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?
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:
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.
vec3 normal = (colour - vec3(0.5)) * 2.0;
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:
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.
vec3 colour = vec3(0.5) + normal * 0.5;
RGB'yi XYZ'ye dönüştürüyor mu?