Derinlik testi kullanmasam bile piksel atma performansı kaybediyor muyum?


22

İlk atma talimatlarını aradığımda, atma kullanımının performansın düşmesine neden olacağını söyleyen uzmanlar buldum. Pard atmanın, GPU'nun zBuffer'ı doğru kullanma yeteneğini kıracağını söylediler çünkü GPU'nun ilk önce her iki nesne için de Fragment shader'ı çalıştırması gerekiyor, kameraya yakın birinin atılıp atılmadığını kontrol etmek zorunda kaldılar. Üzerinde çalışmakta olduğum 2B bir oyun için hem derinlik testini hem de derinlik yazmayı devre dışı bıraktım. Tüm nesneleri derinliklerine göre sıralıyorum ve hepsi bu, GPU'ya süslü şeyler yapmanıza gerek yok. Şimdi merak ediyorum, parça gölgelendiricimdeki pikselleri atmamın hala kötü olup olmadığı?

Yanıtlar:


20

Grafik donanımı, renk değerlerini hesaplamadan önce (başka bir deyişle, parça gölgelendiricinizi çalıştırmadan önce) parçaların derinlik tabanlı parçalanmasını gerçekleştirebilir . Sonuç olarak discard, alfa testi veya gl_FragDepthdonanımın bu optimizasyonu yapma yeteneğini manipüle etme gibi etkileyebilecek herhangi bir özellik kullanırsanız , parçanın gerçek derinliği alınamadığı ve tam gölgelendirici çalıştırılması gerektiği için tehlikeye girer.

Bu uzlaşmacı özelliklerden herhangi birinin kullanılmasının net bir gözlemlenebilir performans etkisinin olup olmadığı, duruma göre değişir. Erken z optimizasyonu, örneğin çok pahalı parça gölgelendiricilere sahipseniz performansı artırabilir, ancak boru hattınızın maliyeti tepe gölgesinde (veya başka bir yerde) bulunuyorsa, size çok fazla fayda sağlayamaz ve sonuç olarak çok az veya kullanarak performans düşüşü olmaz discard.

Derinlik testinin tamamen API üzerinden devre dışı bırakılması, optimizasyonun da çalışmasını engellemelidir, çünkü hatalı görüntülenen sahnelere neden olabilir. Senin durumunda, kullanman önemli değil discard.

Son kullanılan donanımlar, testleri (erken şablon testleri de dahil olmak üzere) kullanarak zorlayabilir layout(early_fragment_tests)- cevabın başında bağlantı verdiğim sayfada bu konuda daha fazla bilgi (ve uyarılar) vardır.


3

Her zaman olduğu gibi performans soruları için en doğru cevap hedef donanımınız üzerinde deneyip ne olduğunu ölçmektir.

Senin durumunda bu muhtemelen yapılacak kötü bir şey değil. Aslında, bellek bant genişliğinden tasarruf ederek performansa yardımcı olacağı bir şans var. Aynı zamanda gölgelendirici talimatları da ekleyecektir, bu nedenle her zaman bir performans avantajı değildir.

Derinlik tamponunu kullanırken bile, performans vuruşu her zaman çok önemli değildir, eğer bir şeyler çizdiğiniz sıraya dikkat ederseniz.

Bir blog yazısı var https://fgiesen.wordpress.com/2011/07/08/a-trip-through-the-graphics-pipeline-2011-part-7/ , ayrıntılı bir biçimde nasıl erken derinlik testi kudreti çalışması donanımda ne gibi sınırlamalar olabilir?


1
Aslında testten sonra, ne kaybetmediğimi ne de performans elde edeceğimi varsaymanın güvenli olduğunu düşünüyorum, ancak ne ve neyin olacağına dair derinlemesine bir açıklama veren bir cevap arıyordum.
Ali1S232 20:12
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.