Oluşturmadan önce nesneleri sıralama


10

Bir sahne grafiği uygulamaya çalışıyorum ve karşılaştığım tüm makalelerde nesne sıralama hakkında konuşma var. Böylece nesnelerinizi "malzeme" ye göre sıralayabilirsiniz. Şimdi oturup uygulamaya başlayana kadar bunu bir nevi kabul ettim, çünkü mantıklıydı. Ama şimdi sıralamanın gerçekte ne değiştiğini merak ediyorum.

Motorumda, UBO'lar için bir yöneticim var, sadece zaman, kamera ve projeksiyon matrisleri ve ışıkları içeren şu anda programlar arasında paylaşılacak verileri depolamak için kullanıyorum (hangi ışıkların etkilendiğini yönetme konusunda endişelenmiyorum hangi nesneleri ATM).

Şimdi her model için modeli dünya matrisi üniformasıyla değiştirmek zorundayım, hiçbir sıralama bunu değiştirmeyecek. Peki, bu matrisi değiştirmekten, aynı zamanda kötü olan her nesne için bir malzeme belirlemeye geçiş mi?

Ben belli belirsiz Eğer boru hattı şey her değiştirdiğinizde, bu kızardı almak zorunda olduğu bir yere okuma hatırlamak ve bu performans sorunlarına neden olabilir. Ama her çizim çağrısı için yine de dünya matrisine bir model oluşturuyorum, bu yüzden bu konuda endişelenmek ne mantıklı?

BTW, üniforma değiştirmenin ve glBufferSubData'yı çağırmanın daha pahalı (veya daha az) olup olmadığı hakkında herhangi bir bilgi vardır.


3
Hızlı cevap, evet, bir matrisin değiştirilmesinden her nesnede malzeme ayarlanmasına atlamak o kadar kötü. Bu noktada, devam etmeden önce platformunuz için OpenGL performans ölçüm araçları hakkında bilgi edinmek için bir yan seyahat yapmanızı öneririm. Mükemmel araçlarla farklı teknikleri kolayca ölçebilir ve işleyicinizin ihtiyaçları için neyin en iyi olduğunu öğrenebilirsiniz. Ayrıca, bu araçlar tüm kariyerinizi ileri sürerken bu bir oluşturucu ... çok fazla değil ;-)
Patrick Hughes 27:12

@PatrickHughes harika, teşekkürler, kesinlikle onları kontrol edeceğim
dreta

Yanıtlar:


4

Kesinlikle malzemeleri toplu olarak sıralamak istiyorsunuz. Yapabiliyorsanız, geometriyi toplu olarak oluşturmak için örneklemeyi de kullanabilirsiniz (örneğin, aynı nesnelerin X sayısına sahipseniz).

Derinliğe göre sıralamada da hala değer var. Saydam nesneler için öne doğru sıralamanız gerekir (sınırlı durumlarda bu ihtiyacı ortadan kaldıran birkaç gelişmiş tekniği yok saymak).

Opak nesneleri önden arkaya sıralamanın bir değeri de vardır, çünkü erken Z'nin sahnenizin parça gölgelendirici yükünü büyük ölçüde azaltmasına izin verir.


3
Opak / saydam nesneler sipariş etmek karmaşık durumlar için kolay değildir (keyfi kurallar olmadan imkansız olduğu noktaya kadar). Aynı şekilde gl çağrılarını azaltmak için dokuya göre gruplayabilirsiniz.
Darkwings

Çağrıları toplu hale getirmek ve çizim çağrılarını azaltmak için dokuya göre sipariş vermek gerekir. Sıralama işleminin çizim çağrılarını azaltmayla ilgisi yoktur. Sıralama, gerçekte doğru oluşturma (saydam nesneler için) alma veya parça işlemcisi ek yükünü (opak nesneler için) en aza indirme ile ilgilidir. "Karmaşık" olmak bir sorundur, evet, ama oyun motoru grafik programcılarının oyunları emtia donanımında gerçekten oynanabilir hale getirmek için uğraştığı şey budur. Sadece sıralı ve ayrıştırılmamış opak nesneler arasındaki donanım verimliliği oldukça büyük olabilir.
Sean Middleditch

opengl.org/wiki/Transparency_Sorting 'Keyfi kurallar' ile kastettiğim budur. Karmaşık vakalar için objektif bir 'doğru' sıralama yoktur. 'Sıralama' ve 'sıralama' hakkında OP açıkça 'malzemeye göre sıralama' (şeffaflıktan bağımsız olarak) ifadesini belirtti ve her ikisi de performans etkisini hedeflediğinden doku için aynı şeyi kastediyorum.
Darkwings

Dürüst olmak gerekirse, bir zamanlar bu tür sorunların gerçek oyunlarda ortaya çıktığını görmedim. Bu örnekler, şeffaf nesnelerin genellikle kabaca tek biçimli boyutta olduğu ve her ikisi de çılgın çakışmaları önleyen oldukça "kutu" çarpışma sınırlarına sahip olduğu şeylerin gerçekte nasıl işlediğini gerçekten yansıtmaz. Her iki durumda da, "zor" olması gerekliliğini değiştirmez. Ayrıca elbette, malzeme ile harmanlamanın önemli olduğunu ve "hiçbir sıralama yardımcı olamaz" iddiasına karşı koymak için bahsettiğimden bahsetmiştim, bu yüzden cevabımda yanlış bulduğunuz somut bir şey olup olmadığından emin değilim.
Sean Middleditch

Bakın, bir yorum cevabınızda yanlış bir şey bulduğum anlamına gelmez ve hiçbir zaman 'hiçbir sıralama yardımcı olamaz' demedim. Herhangi bir objektif doğru çözümün bulunmadığı durumlar olduğunu belirttim, bu yüzden açıkçası keyfi kurallar kullanılarak bir çözüm bulunmalıdır. Bunlar tamamen farklı 2 ifade.
Darkwings

3

Nesneleri yalnızca derinliğe göre sıralamak, özellikle binning veya döşemeli oluşturma mimarilerinde büyük bir değere sahiptir.

Katıları önden arkaya, asetatları arkadan öne doğru sıralayın.

Görüntü oluştururken, önce kameraya en yakın ve katı olan öğeler işlenir ve aynı alanı kaplayan diğer her şey erken bir z arabellek denetimi tarafından reddedilir.

Grafik mimarisinde bir tür hiyerarşik veya düşük çözünürlüklü z-tamponu varsa, geometri herhangi bir şey oluşturulmadan önce çıkartılabilir.

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.