GLSL, hepsi bir veya daha fazla gölgelendirici programında mı?


17

OpenGL kullanarak bazı 3D demolar yapıyorum ve GLSL'nin "sınırlı" olduğunu fark ettim (ya da sadece ben mi?). Her neyse, çok farklı materyallerim var. Bazı malzemeler ortam ve dağınık renklere sahiptir, bazı malzemeler ortam tıkanıklık haritasına sahiptir, bazıları speküler harita ve çarpma haritasına sahiptir.

Bir tepe / parça gölgelendirici çiftindeki her şeyi desteklemek daha mı iyi veya çok sayıda köşe / parça gölgelendirici oluşturmak ve bunları şu anda seçili malzemeye göre seçmek daha mı iyi? OpenGL veya D3D'deki olağan gölgelendirici stratejisi nedir?



Bu, gölgelendiricileri yönetmek için bir veya başka bir yaklaşım seçmeniz gereken yanlış bir ikiliktir. Endüstride on beş yıl boyunca, hiçbir zaman aşırı uçlara bağlı kaldığımız bir proje üzerinde çalışmadım, ancak her zaman bunu yapmak için mantıklı olan her şeyi kullanarak gölgelendiricileri yönetmek için iki yaklaşım arasında bir denge kurduk.
Trevor Powell

Yanıtlar:


12

Cevap, biraz değişiyor.

Temel olarak iki düşünce okulu vardır; her şey için küçük, en uygun gölgelendiriciler ve uber gölgelendirici kampı.

Küçük gölgelendiriciler sadece; bir şey yap ve iyi yap. Über gölgelendiriciler, çalışma sırasında işlevlerini üniformalar aracılığıyla kontrol eder veya önişlemci makroları (ve / veya oluşturulan gölgelendirici kaynakları) aracılığıyla bir grup farklı gölgelendiriciye derler.

Optimal çözüm muhtemelen hiçbiri değildir, ancak bir çeşit melezdir. Belki de bazı durumlar için özel gölgelendiricilerle birleştirilmiş birkaç uber-gölgelendirici veya uber-gölgelendirici.

Küçük gölgelendirici

Artıları:

  • Daha hızlı / daha uygun olması muhtemeldir
  • Sadece yapmasını istediğin şeyi yapar
  • Garip, özel işleri kolayca yapabilir

Eksileri:

  • Özellikle özellik sayısı arttığında kolayca kontrolden çıkar
  • Çok az sayıda gölgelendiriciniz yoksa, muhtemelen daha fazla iş

Uber tarayıcılı

Artıları:

  • Her şey tek bir yerde
  • Daha sanatçı dostu (ilk kez X özelliğine sahip A özelliğini kullanmak için mutlaka kodlayıcı zamanı gerekmez)

Eksileri:

  • Daha uzun gölgelendirici derleme süreleri
  • Daha az optimum sonuç (özellikle, özellikleri açmak / kapatmak için üniformalar kullanılıyorsa)
  • Hata ayıklama / optimize etme daha zor olabilir

Uber-shaderBu temsil iyi bir şey değildir :) Ben önceden tanımları dayalı iyi gölgelendirme yöneticisi yazmak için öneriyorum - bu yüzden #ifdefçeşitli malzemeler için değiştirilecek birçok s ile uber-gölgelendirici kodu olacak.
brigadir

2
Bir uber gölgelendiricinin başka bir profesyonelinin, gölgelendiricilerin değiştirilmesinin performans açısından bir maliyetinin olduğunu da ekleyeceğim, bu nedenle daha az sıklıkta geçiş yaparsanız, performansı artırabilirsiniz.
Jherico
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.