Malzeme ve Gölgelendirici Arasındaki Fark


27

Oyunlarda, materyaller çoğu zaman sadece nesnelerin görsel görünümünü etkiler. Görsel görünüm gölgelendiricilerden etkilenir. Yani terminoloji ile ilgili olarak malzeme ve gölgelendiriciler arasında bir fark var mı? Bir malzeme için bir gölgelendirici mi yazmalısınız?


1
Bir malzemenin gölgelendirici + dağınık doku + bumpmap olduğu birkaç motor gördüm, ancak kısa ve öz bir tanım olduğunu sanmıyorum.
Roy T.

3
@RoyT. Bu motorlar terminolojiyi yanlış kullanıyorlardı. Bir malzeme gölgelendiriciye eşdeğer değildir - gölgelendirici bir programdır , malzeme bir sürü veri değeridir. 2 farklı gölgelendirici programı aynı materyali oluşturabilir ve farklı sonuçlar alabilir.
bobobobo

@bobobobo Veya daha yaygın olarak, birçok dokuyu farklı dokularda, parametre değerlerinde takarak işlemek için tek bir gölgelendirici kullanılır.
Nathan Reed

Yanıtlar:


29

Bir malzeme, verilen bir malzemenin yüzeyinin nasıl görünmesi gerektiğini tanımlayan niteliklerin bir kombinasyonudur.

Bazı motorlar farklı malzemeler için farklı gölgelendiriciler kullanır; bu durumda malzeme tanımı şöyle görünebilir:

[Material]
Shader=NormalMappedSpecular.glsl
Texture1=Rock.png
Texture2=RockNormal.png
Texture3=RockSpecular.png

Diğer motorlar tüm nesneler için bir gölgelendirici kullanır (veya motorlar parametrelere, GPU'nun özelliklerine ve mesafe gibi diğer faktörlere bağlı olarak hangi gölgelendiricinin kullanılacağına karar verir), bu durumda bir malzeme daha çok şöyle görünür:

[Material]
Ambient=0.5
Specularity=0.7
DiffuseMap=Rock.png
NormalMap=RockNormal.png
SpecularMap=RockSpecular.png

2
Materyal tanımını oyun motorunun desteklediği her duyuya uzatamaz mıydınız? Örneğin, malzemenin vurulduğunda, üzerine basıldığında vb. Üreteceği sesler veya sürtünme parametreleri?
didierc

10

Bir malzeme, bir nesnenin ışığa nasıl tepki vereceğini belirler.

Birkaç ortak parametre var:

  • Kd: Işığa dağınık tepki
  • Ks: Işığa speküler tepki
  • Ns: "Parlaklık"
  • map_Kd: Doku

Şimdi , malzemeyle işlenmiş bir üçgenin olduğunu söyleyin M. MKd = (1,0,0) (kırmızı dağınık tepkisi), Ks = (1,1,1) (beyaz speküler tepkisi), Ns = 25 (speküler vurgu oldukça keskin ve bulanık çıkmaz) ve map_Kd yok ( doku yok).

İş shader tepe pozisyonları almaya matematik kullanmaktır üçgen , üçgen görünmelidir Ne renk ışık konumunu, malzeme renk değerlerini ve rakam. Bir köşe gölgelendirici, bu "gölgelendirme hesaplamasını" her köşede bir kez yapar ve rengi üçgen boyunca enterpolasyonlar.

Bir köşedeki dağınık tepkisini hesaplamak için gölgelendiricideki ortak işlem:

// hlsl
float3 vertexToLight = normalize( lightPos.xyz - vertexPos.xyz ) ;

float3 diffuseColor = max( dot( vertexToLight, vertexNormal ), 0.0 ) * kd * lightColor ;

3

Bir malzeme, ona bir renk ve desen vermek için geometriye uyguladığınız şeydir. Bir doku, malzemenin bir bileşenidir.

Gölgelendirici, bu malzemenin çalışma zamanında oluşturulmasını sağlayan küçük bir programdır. Gölgelendiriciler hakkındaki güzel şey, malzemeyi basit bir şekilde oluşturmaktan, speküler vurgulamalar ve yansımalar gibi dinamik efektler eklemeye, bir merminin çarptığı duvarlarda sahte delikler açmak gibi son derece zeki şeylere kadar her şeyi yapabilmenizdir.

bu nedenle sorunuza cevaben - evet, bir fark var, biraz da üst üste gelmek var - bir şeyi kırmızı yapmak için kırmızı bir malzeme yapabilir veya gölgelendirici yazabilirsiniz, ancak her ikisi de size birçok şeyi yapmanıza izin verir diğer ile yapamadı.

ve hayır, materyal başına bir gölgelendiriciye ihtiyacınız yok. Bir malzeme gölgelendirici gerektirmekle birlikte, isterseniz tüm malzemeleriniz için bir tane elde edebilirsiniz. özel şeyler yaparlar, örneğin her şeyin parlak olmasını istiyorsanız, sadece bir tane yazabilirsiniz.

Güzel bir gölgelendirici örneği, savaşın vitrinde. sahne için bir malzeme seti var, ancak taktiksel görünüme geçmek için bir düğmeye bastığınızda, bu malzemeleri oluşturan gölgelendiriciler değişiyor, böylece işler genel hatlarıyla ve genellikle farklı görünüyor. Aynı şey batman'da da oluyor: arkham'ın 'dedektif modu'.


1
Teknik olarak bir doku gerçekten kendi başına bir malzeme değildir , genellikle bir malzemenin parçasıdır .
bobobobo

1

Geç olmasına rağmen, daha iyi anlamanıza yardımcı olabilecek bir "hile" var.

Materyal, bu arama çağrısı için belirli bir gölgelendiriciye eklenen her şeydir.

Örneğin, yukarıdaki cevaba göre, şu malzemeye sahipsiniz: [Malzeme] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png

bu, normal bir harita yapan ve speküler bir hesaplama yapan bir gölgelendirici ile render yapacağınızı ve o gölgelendiricinin içindeki 3 dokuyu kullanacağını söyledi.

Daha sonra, aynı gölgelendiriciyi, farklı diğer 3 dokularla (araba, arabaNormal ve arabaÖzel) gibi yeniden kullanabilirsiniz, gölgelendirici parametrelerini değiştirdiğiniz için farklı bir malzemeyle farklı bir çekme çağrısı yapacaksınız.

Sonuçta, bir malzeme aynı gölgelendiriciyi kullanarak aynı parametrelerle (dokular, üniformalar, nitelikler) benzersiz bir beraberlik çağrısı oluşturan her şeydir.

Umarım bu daha iyi görselleştirmek için yardımcı olur


Şunun gibi bir şey mi: gölgelendirici sınıftır, fakat malzeme örnek midir?
Bengalaa
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.