Saya belajar tentang pemetaan normal. Saya mengerti bahwa nilai RGB dikonversi menjadi XYZ, tetapi pertanyaan saya adalah bagaimana cara dikonversi dan mengapa peta normal berwarna biru dan ungu?
11
Karena peta normal mencakup vektor dari -1 hingga 1, masuk akal untuk meregangkan rentang ini menjadi 0> 1 sehingga semuanya dapat masuk dalam kisaran RGB.
Jadi biasanya kita menerapkan transformasi pada normal untuk mengubahnya menjadi sesuatu yang bisa kita lihat.
vec3 colour = vec3(0.5) + normal * 0.5;
Warna biru adalah karena peta normal seharusnya digunakan relatif terhadap primitif (segitiga / dll) normal dengan arah default (0,0,1) untuk menunjukkan tidak ada penyimpangan dari segitiga normal. Biasanya shader fragmen perlu memutar normal ini dalam kaitannya dengan normal per-pixel saat ini pada saat runtime.
vec3 colour = vec3(0.5) + normal * 0.5;
ini mengubah RGB ke XYZ?vec3 normal = (colour - vec3(0.5)) * 2.0;
Hanya ruang singgung peta normal yang terutama biru. Ini karena warna biru mewakili normal (0,0,1) yang akan menjadi normal tidak berubah ketika segitiga terletak pada bidang x dan y, yaitu tegak lurus terhadap permukaan. Garis singgung, x dan bi-tangen, y (juga disebut sebagai bi-normal) dikodekan dalam saluran merah dan hijau dan bentuk ini untuk menciptakan ruang tangen normal untuk titik pada permukaan segitiga.
Jika peta normal ruang singgung adalah untuk mengkodekan warna hanya dalam merah (1,0, 0,0, 0,0) ini akan menghasilkan paralel normal ruang singgung ke permukaan segitiga. Ini tidak pernah terlihat karena itu berarti bahwa segitiga hanya akan menyala pada 90 derajat dari permukaan dan melihat vektor pada titik mana Anda tidak akan dapat melihat segitiga itu.
Peta normal ruang dunia mengkodekan unit normal di atas bola sehingga dapat menjadi warna yang berbeda sekali setelah dikodekan dari [-1, 1] ke [0, 1] per saluran.
Suatu perbandingan dapat dilihat di sini:
Dalam praktiknya, peta normal biasanya dikodekan dalam format 2 saluran seperti BC5 yang sebenarnya hanya menyimpan x dan y dengan z yang direkonstruksi seperti yang kita tahu itu adalah vektor satuan. Ini memungkinkan Anda untuk mempertahankan presisi yang lebih tinggi dengan bit lebih banyak tanpa meningkatkan ukuran file.
sumber