ฉันกำลังเรียนรู้เกี่ยวกับการทำแผนที่ปกติ ฉันเข้าใจว่าค่า RGB ถูกแปลงเป็น XYZ แต่คำถามของฉันคือมันถูกแปลงเป็นอย่างไรและเหตุใดแผนที่ปกติจึงเป็นสีน้ำเงินและสีม่วง
ฉันกำลังเรียนรู้เกี่ยวกับการทำแผนที่ปกติ ฉันเข้าใจว่าค่า RGB ถูกแปลงเป็น XYZ แต่คำถามของฉันคือมันถูกแปลงเป็นอย่างไรและเหตุใดแผนที่ปกติจึงเป็นสีน้ำเงินและสีม่วง
คำตอบ:
เนื่องจากแผนที่ปกติครอบคลุมเวกเตอร์ตั้งแต่ -1 ถึง 1 จึงเหมาะสมที่จะขยายขอบเขตนี้เป็น 0-> 1 ดังนั้นทั้งหมดจึงสามารถอยู่ในช่วงของ RGB ได้
ดังนั้นโดยปกติแล้วเราจะใช้การแปลงแบบปกติเพื่อแปลงเป็นสิ่งที่เราเห็น
vec3 colour = vec3(0.5) + normal * 0.5;
สีฟ้าเป็นเพราะแผนที่ปกติควรจะใช้เทียบกับแบบดั้งเดิม (สามเหลี่ยม / ฯลฯ ) ปกติพร้อมทิศทางเริ่มต้น (0,0,1) เพื่อระบุว่าไม่มีการเบี่ยงเบนจากสามเหลี่ยมปกติ โดยปกติชิ้นส่วนจำเป็นต้องหมุนปกตินี้สัมพันธ์กับปกติต่อพิกเซลปัจจุบันที่รันไทม์
vec3 normal = (colour - vec3(0.5)) * 2.0;
แผนที่ปกติของพื้นที่สัมผัสแทนนั้นจะมีสีน้ำเงินเป็นหลัก นี่เป็นเพราะสีน้ำเงินสีแสดงถึงค่าปกติของ (0,0,1) ซึ่งจะเป็นปกติไม่เปลี่ยนแปลงเมื่อรูปสามเหลี่ยมอยู่ในระนาบ x และ y คือตั้งฉากกับพื้นผิว แทนเจนต์, x และไบแทนเจนต์, y (หรือเรียกอีกอย่างว่าไบ - ปกติ) ถูกเข้ารหัสในช่องสีแดงและสีเขียวและแบบฟอร์มเหล่านี้เพื่อสร้างพื้นที่แทนเจนต์ปกติสำหรับจุดบนพื้นผิวของรูปสามเหลี่ยม
หากแผนที่ปกติของพื้นที่แทนเจนต์ต้องเข้ารหัสสีเป็นสีแดงเท่านั้น (1.0, 0.0, 0.0) สิ่งนี้จะสร้างพื้นที่ปกติแทนเจนต์ - ขนานกับพื้นผิวสามเหลี่ยม สิ่งนี้ไม่เคยถูกมองเห็นเพราะมันหมายความว่ารูปสามเหลี่ยมจะส่องสว่างแค่ 90 องศาจากพื้นผิวและดูเวกเตอร์ที่จุดที่คุณไม่สามารถมองเห็นสามเหลี่ยมได้
แผนที่ปกติอวกาศของโลกเข้ารหัสหน่วยปกติเหนือทรงกลมเพื่อให้สามารถสีที่แตกต่างกันหลักเมื่อเข้ารหัสจาก [-1, 1] ถึง [0, 1] ต่อช่อง
การเปรียบเทียบสามารถดูได้ที่นี่:
ในทางปฏิบัติแผนที่ปกติมักจะเข้ารหัสในรูปแบบ 2 ช่องทางเช่นBC5ซึ่งจริง ๆ แล้วเก็บเฉพาะ x และ y โดย z จะถูกสร้างขึ้นใหม่เนื่องจากเรารู้ว่ามันเป็นเวกเตอร์หน่วย สิ่งนี้ช่วยให้คุณรักษาความแม่นยำที่สูงขึ้นด้วยบิตที่มากขึ้นโดยไม่เพิ่มขนาดไฟล์
vec3 colour = vec3(0.5) + normal * 0.5;
นี้แปลง RGB เป็น XYZ หรือไม่?