Mengapa peta normal sebagian besar berwarna biru?

44

Mengapa peta normal lebih didominasi biru daripada warna acak?

Saya kira vektor normal dari objek 3D dapat menunjuk ke segala arah, seperti:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

masukkan deskripsi gambar di sini

Jinbom Heo
sumber

Jawaban:

71

Ada dua jenis peta normal yang biasa digunakan dalam pengembangan game. Cara Anda berpikir mereka harus bekerja adalah cara satu jenis bekerja (model-space normal maps), tetapi sebagian besar game menggunakan tipe lain (tangen-space normal maps) yang mengapa Anda mengaitkan sebagian besar tekstur biru dengan peta normal.

Contoh peta-ruang normal model

Dengan peta normal ruang-model , setiap saluran mengkodekan nilai presisi normal menggunakan sistem koordinat yang sama dengan simpul model yang digunakan. Ini berarti bagian-bagian berbeda dari peta normal akan memiliki rona yang berbeda, tetapi piksel yang berdekatan biasanya memiliki warna yang sama. Contoh peta normal ruang model muncul di atas ( sumber ).

Peta normal bersinggungan-ruang biasanya biru muda. Jenis peta ini mendefinisikan normals dalam ruang koordinat yang unik untuk setiap posisi pixel pada permukaan mesh. Menggunakan vertex (interpolasi) normal sebagai sumbu Z, dan dua vektor ortogonal lainnya, yang disebut garis singgung dan bitangen, sebagai sumbu X dan Y. Pada dasarnya, Anda dapat menganggap normals di peta sebagai "offset" dari normal untuk piksel yang dihitung dengan menginterpolasi normals verteks. Vektor tangen dan bitangent juga diinterpolasi dari data vertex, dan menentukan arah mana pada mesh sesuai dengan "atas" dan "kiri" di peta normal. Gambar yang disediakan dalam pertanyaan memberikan contoh yang sangat baik tentang seperti apa peta normal tangen-space normal, jadi saya tidak akan memberikan contoh lain di sini.

Komponen-komponen dari suatu normal biasanya (no pun intended) berkisar dari [-1, 1]. Tetapi komponen warna dalam rentang gambar dari [0, 1](atau [0, 255]tetapi biasanya mereka dinormalisasi ke [0, 1]). Jadi normalnya diskalakan dan diimbangi sedemikian rupa sehingga yang normal (0, 0, 1)menjadi warnanya (0.5, 0.5, 1). Ini adalah warna biru muda yang Anda lihat di peta normal, dan ini menunjukkan tidak ada penyimpangan dari vertex interpolasi normal ketika menggunakan norman ruang singgung.

Alasan mengapa tangen-space normals lebih disukai daripada norma- space model adalah karena fakta bahwa mereka lebih mudah untuk dibuat, dan dapat digunakan untuk banyak jerat. Selain itu, jika digunakan dengan mesh animasi, normalnya ruang singgung selalu digunakan, karena normalnya terus berubah.

bcrist
sumber
6
Sukai penjelasan ini - ringkas, termasuk matematika, menguraikan berbagai jenis yang digunakan untuk peta normal dan mengapa mereka digunakan.
Tom 'Blue' Piddock
Terima kasih telah mendapatkan perbedaan antara bitangentdan binormalbenar.
imallett
2
@ imallett Ya, permukaan memiliki garis singgung, garis singgung dan bitangen, sedangkan kurva memiliki garis singgung, normal, dan binormal. Setidaknya itulah pemahaman saya.
bcrist
8

Peta normal sebagian besar menunjuk keluar dari permukaan. Dengan asumsi Anda pergi dengan pemetaan biasa komponen Z dari vektor normal XYZ menjadi arah "kedalaman" dan pemetaan ke komponen B dari ruang warna RGB, Anda akan berakhir dengan sebagian besar vektor normal menjadi biru.

Jika teksturnya, katakanlah, merah, maka itu berarti bahwa peta normal adalah permukaan yang sebagian besar mengarah ke kanan. Anda dapat melihat fitur itu pada gambar sampel Anda karena ujung paling kanan tonjolan memiliki warna kemerahan.

Permukaan lengkap warna kemerahan tidak masuk akal. Itu akan menunjukkan permukaan yang sepenuhnya menghadap ke kanan. Itu hanya akan dimodelkan dengan geometri, bukan bagian dari peta normal.

Sean Middleditch
sumber
3
Untuk memperjelas ini sedikit lebih jauh, normalmap memegang BUKAN vektor normal dari sudut pandang Anda, tetapi itu memegang vektor normal dari sudut pandang wajah, jadi setelah Anda mendapatkan normal dari wajah, Anda mencampurnya dengan normalmaps-normalvector. Dan karena sebagian besar berwarna biru, yaitu (0, 0, 1), ini berarti vektor normal yang sudah Anda dapatkan tidak berubah. (Pikirkan tentang ini, seperti Anda akan meletakkan setiap wajah rata di lantai sebelum Anda menggambarnya, dan kemudian menggunakan vektor normal dari peta normal, ini sebagian besar akan ke atas, jika itu kanan atau kiri, ada yang salah dengan jaring Anda).
tkausl