Mengapa peta singgung ruang normal tidak sepenuhnya biru?

11

Mengapa peta normal tidak hanya berwarna biru? Saya akan berpikir bahwa peta normal harus didominasi warna biru karena komponen Z dari normal diwakili oleh biru. Normalnya menunjuk keluar dari permukaan ke arah Z jadi kita harus melihat biru sebagai warna dominan karena komponen Z dominan.

Menurut definisi ruang tangen tegak lurus terhadap permukaan. Pada titik mana pun kita harus memiliki titik selalu normal di Z (arah biru) tanpa X (arah merah) atau Y (arah hijau). Jadi peta normal (karena itu adalah "peta normal") harus memiliki warna normals yang hanya biru (R = x = 0, G = y = 0, B = z = 1) tanpa nuansa di antaranya.

Tapi peta normal tidak demikian, dan mereka memiliki gradien nuansa di dalamnya. Kenapa begitu?

kuda laut
sumber

Jawaban:

19

Ruang singgung tegak lurus terhadap normals geometrik - normals vertex interpolasi dari poligon. Peta normal memberikan normals yang teduh , relatif terhadap ruang singgung yang ditentukan oleh normals geometris. Ketika shading normals tidak sama dengan yang geometris - yaitu karena Anda memiliki tekstur permukaan terperinci dengan fitur-fitur yang tidak dimodelkan dalam geometri - peta normal menyimpang dari "biru datar" (RGB 128, 128, 255).

Itu semacam inti dari peta normal - itu adalah cara Anda mendapatkan detail, bentuk skala kecil dari suatu permukaan untuk diwakili oleh pencahayaan dan naungan meskipun Anda belum memodelkan semua detail kecil itu dengan poligon.

Nathan Reed
sumber
1
Untuk menguraikan, peta normal umumnya dilakukan dalam ruang singgung karena ini tetap akurat ketika mesh dianimasikan, sedangkan misalnya model-ruang peta normal akan membutuhkan peta normal dianimasikan bersama-sama dengan animasi apa pun yang mungkin Anda miliki (yang akan sangat rumit dengan kerangka dan ragdolls sewenang-wenang, misalnya). Untuk geometri statis, tidak ada alasan teknis Anda tidak dapat memiliki peta model ruang-ruang, tidak-semua-biru, menyederhanakan pixel shader Anda sedikit (dengan mengorbankan konsistensi, membutuhkan lebih banyak shader, dan pada gilirannya memerlukan lebih banyak shader perubahan pilihan).
MaulingMonkey
1
(juga data peta normal biasanya tidak dapat digunakan kembali di banyak tempat di jala jika dalam ruang model)
MaulingMonkey
+1; paragraf terakhir adalah kunci dari pertanyaan - jika permukaan mereka seharusnya rata, mereka akan berwarna biru. Jika permukaan seharusnya memiliki beberapa kekasaran model peta normal kekasaran itu tanpa perlu menentukan geometri tambahan.
Maximus Minimus
2

Jawaban sederhana adalah bahwa itu karena rentang biasing.

Normalnya memiliki rentang -1,0 hingga 1,0, untuk setiap komponen (x, y, z). Peta normal, disimpan sebagai gambar RGB 24 bit, di sisi lain, memiliki rentang 0 hingga 255 untuk setiap komponen.

Ini berarti bahwa setiap komponen yang nol menjadi 127,5 (tengah tepat) di peta normal (yang membulatkan ke 128).

Vektor normal (0,0,1) menjadi (128.128.255) pada gambar peta normal, yang merupakan warna keunguan, bukan biru murni (0,0.255).

GraphixBeli
sumber