Normaller ve Normal haritalar


17

3D modelleri ayrıştırmak için Assimp varlık ithalatçısı kullanıyorum ( http://assimp.sourceforge.net/lib_html/index.html ).

Şimdiye kadar, kafeslerimdeki her bir tepe için tanımlanan normal vektörleri çıkardım. Yine de normal haritalarda çeşitli dersler buldum ...

Normal haritalar için anladığım kadarıyla, normal vektörler normal bir haritanın her bir texeline kaydedilir ve bunları gölgelendiricideki normal dokudan çıkarırsınız.

Normalleri elde etmenin neden iki yolu var, hangisi en iyi uygulama olarak kabul edilir ve neden?

Yanıtlar:


31

Kısa cevap

Normal haritalar ve Normaller iki farklı şeydir: Normaller, herhangi bir kafesin / yüzeyin geometrik bir özelliğidir, kullanımı gölgeleme ve aydınlatma hesaplamaları için özel değildir, ancak aslında fizikte başka birçok kullanıma sahiptir. Normal haritalar bilgisayar grafiklerinde tümsekleri simüle etmek için kullanılan alternatif normal vektörleri kodlayan dokulardır.

Uzun cevap

Geometride normaller normal, belirli bir nesneye dikey olan bir vektör veya çizgidir (örn. Düzlem normal, tepe normal). Grafiklerdeki normaller genellikle nokta ürününü ışık yönü ve yüzey normalleri arasında alarak dağınık yansımayı hesaplamak gibi ışık hesaplamaları için kullanılır . Normaller genellikle ağın geometrik özelliklerine (Yüzler / Vertisler) dayanarak, aynı düzlemde yer alan iki paralel olmayan kenarın çapraz çarpımı alınarak hesaplanır.

OpenGL'de normaller her köşe için belirtilir (bu nedenle köşe özellikleri olarak adlandırılır), ancak bu durumda yalnızca her yüz için hesaplanabilse de, bir yüzdeki her köşe için aynı normali belirtmeniz gerekir. Normaller, bir yüzün (üçgenin) her köşesinde OpenGL ile enterpole edilebilir, böylece köşe başına değil piksel başına yansıyan ışığı hesaplayabilirsiniz, böylece daha fazla doğru bir sonuç elde edebilirsiniz.

Normal Haritalama : Öte yandan, bilgisayar grafiklerinde bir doku haritasında Normalleri kodlayan bir tekniktir, bu nedenle her normal metin başına kodlanır. Genellikle çarpma ve ezik ışıklarının taklit edilmesi için kullanılır (örn. Yumru haritalama, paralaks haritalama).

Normaller, kafes / yüzeyin geometrik özelliklerine göre hesaplandığından, Normal Haritalar size daha fazla çokgen eklemeden yüzeye ayrıntı eklemek için tümsekleri simüle edebilen alternatif Normaller verecektir.

Normal haritalar genellikle çok daha ayrıntılı bir 3D model kullanılarak oluşturulur, daha sonra bu modele dayanarak normaller hesaplanır ve Normal Haritada kodlanır.

Neden ikisine de ihtiyacımız var?

Sadece nihai aydınlatma efektini elde etmek için genellikle render, normaller ve normal haritalar birlikte konuşurken, iyi bir örnek, yumru aydınlatma efektini elde etmek için normal normal haritaya ihtiyacınız olan bir yumru gölgelendirici olabilir ve yine de teğet uzay denilen şeyi hesaplamak için normal geometrik . Teğet boşluk genellikle normal haritalarda yeniden kullanılabilirlik sağlamak için kullanılır.

Normalin yüzeyin geometrik bir özelliği olarak kabul edildiğini ve sadece ışık hesaplamalarından çok daha fazla kullanımı olduğunu unutmayın. Diğer yandan normal haritalar genellikle yüzeysel etkiler için kullanılır.

Teğet alanların neden önemli olduğunu açıklamak için cevabı genişletmek:

Kısa cevap: Teğet uzaylar, normal haritaları altta yatan geometriden bağımsız hale getirmek için kullanılır.

[EDIT] Teğet uzaydaki normal haritayı ve dünya uzayındaki normal haritayı temsil eden resim eklendi.

resim açıklamasını buraya girin

Uzun cevap: Aşağıdaki resim UV düzlemini ve teğet alanı tanımlayan normali gösterir, normal bir harita oluştururken, kullanılan alanın her zaman Z yönünde Normal işaretine sahip olacağını zaten bileceğiz (bu yüzden normal haritalar mavimsi görünür) , bu yüzey eğriliğini görmezden gelmemize yardımcı olacaktır **.

Teğet alan bize normal harita kodlamamızın belirli bir mesh normaline bağlı olmaması avantajını sağlar. Dünya veya nesne uzayında normal haritamızı kodladığımızı varsayalım, o zaman kodladığımız her normalin, orijinal haritanızın dünya uzayında nasıl değiştiğine bağlı olarak bir yönü olacağını, normal haritanızın model dönüşümlerinden etkileneceğini belirtmiyoruz.

resim açıklamasını buraya girin

Yukarıdaki iki resimde teğet uzayının altta yatan geometriden bağımsız olarak normal haritalar (sağda) yaptığı oldukça açıktır, çünkü tüm normaller, çarpmaların etkisini simüle etmek için küçük varyasyonlarla neredeyse aynı yönde kodlanır.

** yüzey eğriliği, bir geometrik nesnenin bir çizgi durumunda düz veya düz olmaktan saptığı miktarla tanımlanır, ancak bu, bağlama bağlı olarak farklı şekillerde tanımlanır.

Teğet mekan gösterimi


1
Köşe başına tanımlanmış normal ve teğet bir alan olmadan normal bir dokunun tek başına nasıl kullanılamayacağını gösteren bir görüntü bulabilirseniz, bunu yeni başlayan grafik programcılarının çoğu için bu kafa karıştırıcı konunun en iyi yanıtı yapacaksınız!
teodron

Güzel cevap ama normaller her yüzünde OpenGL tarafından enterpolasyona girmiyor. Bunu kendiniz yapmanız ve enterpolasyonlu normali OpenGL'ye (veya gölgelendirici kodunuza) sağlamanız gerekir.
Anastasios G

1
@AnastasiosG Bence belirli bir ilkel için bir parça hesaplandığında bir üçgende enterpolasyona girdiğinde değişen verilerin varsayılan davranışından bahsediyor. OpenGL'ye bir üçgenin olası 3 tepe normalinden belirli bir normal kullanmasını söylemek için kullanabileceğiniz bir bayrak olduğunu biliyorum, ama bu benim bildiğim gibi varsayılan davranış değil.
teodron

1
@AnastasiosG Böyle bir detayın cevabı herhangi bir iyilik yapmayacağını düşündüm çünkü bu OpenGL'nin nasıl kullanılacağı ile ilgili değil. Ancak bu yardımcı olursa, sabit boru hattı döneminde, openGL'ye enterpolasyon yapmasını söylemek için glShadeModel (GL_SMOOTH) gerekir. Programlanabilir boru hattı döneminde, değişkenleri gölgelendiricide değişken veya giriş / çıkış olarak tanımlarsınız, böylece OpenGL enterpolasyon yapabilir.
concept3d

Yumru haritaların siyah beyaz bir dokuya göre yükseltilmiş / indirilmiş basit (geometrik) normaller olduğunu eklemek isterim. :)
Entalpi
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.