Mengapa peta normal berwarna biru dan ungu?

11

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?

Abhinay Singh Negi
sumber

Jawaban:

12

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.

PaulHK
sumber
Apakah kode vec3 colour = vec3(0.5) + normal * 0.5;ini mengubah RGB ke XYZ?
Abhinay Singh Negi
1
@AbhinaySInghNegi tidak, warna RGB dan normal adalah XYZ, jadi ini mengkonversi XYZ ke RGB. Jika Anda ingin RGB ke XYZ yang Anda gunakanvec3 normal = (colour - vec3(0.5)) * 2.0;
bram0101
20

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:

masukkan deskripsi gambar 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.

Syntac_
sumber
Ruang singgung tidak secara unik parametrized, namun saya menemukan banyak jala + gambar normal-peta-di-ruang singgung di sekitar. Apakah ada cara konvensional untuk mendefinisikan basis ruang singgung?
Alec Jacobson