Normal haritalar neden mavi ve mor renktedir?


11

Normal haritalamayı öğreniyorum. RGB değerlerinin XYZ'ye dönüştürüldüğünü anladım, ama sorum şu ki nasıl dönüştürülüyor ve normal harita neden mavi ve mor renkte?

Yanıtlar:


12

Normal bir harita -1'den 1'e kadar vektörleri kapsadığı için bu aralığı 0-> 1'e uzatmak mantıklıdır, böylece hepsi RGB aralığının içine sığabilir.

Bu yüzden genellikle normalde görebildiğimiz bir şeye dönüştürmek için bir dönüşüm uygularız.

vec3 colour = vec3(0.5) + normal * 0.5;

Mavi renk, normal haritaların normal üçgenden sapma olmadığını göstermek için varsayılan (0,0,1) yönde normal ilkel (üçgen / vb.) İle ilişkili olarak kullanılması gerektiğidir. Genellikle fragman gölgelendiricisinin çalışma zamanında piksel başına normal akım başına bu normali döndürmesi gerekir.


Bu kod vec3 colour = vec3(0.5) + normal * 0.5;RGB'yi XYZ'ye dönüştürüyor mu?
Abhinay Singh Negi

1
@AbhinaySInghNegi hayır, renk RGB ve normal XYZ, bu XYZ'yi RGB'ye dönüştürüyor. vec3 normal = (colour - vec3(0.5)) * 2.0;
RGB'den XYZ'ye

20

Sadece teğet uzay normal haritaları öncelikli olarak mavidir. Bunun nedeni, mavi rengin (0,0,1) bir normali temsil etmesidir; bu, üçgen x ve y düzleminde, yani yüzeye dik olduğunda değişmeyen bir normal olacaktır. Teğet, x ve bi-teğet, y (bi-normal olarak da adlandırılır), kırmızı ve yeşil kanallarda kodlanır ve bu form, üçgenin yüzeyindeki bir nokta için normal bir teğet alanı oluşturmak için kullanılır.

Teğet uzay normal haritası bir rengi sadece kırmızı (1.0, 0.0, 0.0) olarak kodlayacak olsaydı, bu üçgen yüzeye paralel bir teğet uzay normali üretecektir. Bu asla görülmez, çünkü üçgenin yüzeyden sadece 90 derecelik bir ışıkta yanacağı ve hangi noktada üçgeni göremeyeceğinizi göreceksiniz.

Dünya uzay normal haritaları üniteyi bir küre üzerinde normal olarak kodlar, bu nedenle kanal başına [-1, 1] ila [0, 1] arasında kodlandığında öncelikle farklı renkler olabilir.

Burada bir karşılaştırma görülebilir:

resim açıklamasını buraya girin

Pratikte normal haritalar genellikle BC5 gibi 2 kanallı bir formatta kodlanır, bu da aslında sadece x ve y'yi depolar ve z bir birim vektör olduğunu bildiğimiz için z yeniden yapılandırılır. Bu, dosya boyutunu büyütmeden daha fazla bit ile daha yüksek hassasiyet sağlamanıza olanak tanır.


Teğet uzaylar benzersiz bir şekilde parametrelenmemiştir, ancak etrafta çok fazla örgü + normal harita-teğet-uzay görüntüsü buluyorum. Teğet uzay temelini tanımlamanın geleneksel bir yolu var mı?
Alec Jacobson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.