Birden fazla nesne oluşturmak için kaç OpenGL programı kullanmalıyım?


10

Sahnemde birden fazla nesne var. (Diyelim ki 3 küp, 1 silindir, 8 küre.) Her biri için bir köşe gölgelendirici oluşturmam gerektiğini varsayıyorum. Kaç programım olmalı?

Alternatifler:

  • Nesne başına bir program
  • Tüm küpler için bir program ve tüm küreler için başka bir program (aynı gölgelendiricileri kullandıkları varsayılarak)
  • Her şey için büyük bir program

Doğru yaklaşım nedir?


1
"Her biri için bir tepe gölgeleyici oluşturmam gerektiğini düşünüyorum." Bunu neden varsayıyorsun? Köşe gölgelendirici, köşeleri modelinize göre dönüştürür ve matrisleri görüntüler ve neredeyse her şey için her zaman aynı olmasını istersiniz.
usm

Yanıtlar:


8

Gölgelendirici programları devletin dokularla benzer bir parçası olarak görmelisiniz. Durumu değiştirmek pahalıdır, bu nedenle doku değişikliklerini önlemek için birkaç dokuyu bir araya getirerek kurtulabilirsiniz; Aynı şey gölgelendiriciler için de geçerlidir - durum değişikliklerini önlemek için birkaç gölgelendiriciyi birleştirebilirsiniz.

Dokuları birleştirmeye benzer şekilde, gölgelendiricileri birleştirmek bir ek yükle gelir - 4096x4096 dokusundan sadece 16x16 piksel alanı oluşturursanız, donanımı verimli bir şekilde kullanmazsınız. Benzer şekilde, oluşturduğunuz nesne gölgelendiricinizdeki kodun yalnızca% 10'unu kullanıyorsa, grafik kartının gereksiz yere çok fazla şey hesaplaması mümkündür (ve hatta muhtemelen).

Kısacası, "bağlıdır".


4
Ayrıca, birçok durumda sadece bir gölgelendirici ile uzaklaşabilirsiniz. Farklılıklar sadece gölgelendiriciye geçtiğiniz üniformalar, renk, doku, normal haritalar vb.
Gibidir

Evet, örneğin pullu görünen parçalar üreten ve bunu kullanarak 3 küpün, 1 silindirin ve 8 kürenin hepsini oluşturabileceğiniz şekilde çalışan bir "Pullu" gölgelendiriciniz olabilir. bir gölgelendirici (elbette karşılık gelen geometri ilkelleriyle). Burada makul bir üniforma seti, rengi tanımlayan bir vektör değeri ve belki de birkaç skaler veya görsel efektin "pul pul" veya "parlak" olacağını etkileyen bir şey olabilir. Sonra bir gölgelendiriciniz var ve bireysel geometrilerin çizimleri arasındaki üniformaları değiştirerek gölgelendiricinin nasıl renklendirdiğini değiştiriyorsunuz.
Steven Lu

5

İşleri olabildiğince basit tutmak en iyisidir. Aynı gölgelendiriciyi her nesne için çoğaltmak gereksizdir ve hızla şişirilir. Ayrıca, gereksiz her yükü kapsayan bir dev gölgelendirici istemezsiniz, çünkü bu gereksiz ek yüke neden olur.

Gölgelendirici yönetimi hakkında birkaç görüş vardır ve buna yaklaşmanın "optimal" yolu yoktur. Hatta her gölgelendiricinin anında kapalı parametrelerine (örneğin Unreal motorunda ) oluşturulduğu bazı gölgelendirici uygulamaları gördüm .

Bu bölgeye yeni başlayan biri için, önce temel gölgelendiricileri kalemle boyamak iyi olabilir. Örneğin, dokusuz nesneler için bir gölgelendiricim, temel dokuya sahip bir gölgelendiricim ve piksel başına aydınlatma desteği, vb ... Sonra her zaman önceki gölgelendirici kullanılarak yapılamayan farklı bir efekt istediğimde, ' Yeni efekt için yeni bir tane oluşturacağım.

Böyle bir sistemin amacı işleri basit tutmaktır. Sadece. Tut. O. Basit.


+1 çünkü mevcut endüstrinin ne yaptığını söylemiştiniz.
Krythic
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.