Doku atlası ve dizi dokusu karşılaştırması: CPU ve GPU tarafından ne kadar farklı kullanılırlar ve bu performansı nasıl etkiler?


10

Unity 5.4 (şu anda beta sürümündedir), OpenGL ArrayTexture ile aynı şekilde, dizi dokuları olan çok beklenen bir özelliği (2013'ten beri) getirecektir . Bununla birlikte, diziler-dokular ve doku atlasları hakkında biraz okuma yaptıktan sonra, CPU ve GPU'lar tarafından kullanımlarındaki teknik farklılıkları hala tam olarak anlayamıyorum.

Bu nedenle, daha spesifik olmak gerekirse, doku atlasının ve doku dizilerinin CPU ve GPU tarafından nasıl ele alındığı ve en önemlisi, bu farklılıkların performans ve bellek işlemeyi nasıl etkileyebileceği (örn. doku dizilerinin doku atlaslarından vb. nasıl daha fazla performans gösterebileceği).

Unity'nin talihsiz kapalı kaynaklı olması nedeniyle uygulanmasına ilişkin teknik ayrıntılar eksikse, OpenGL.s ArrayTexture ile ilgili bir cevaptan memnun olurum.


Her ikisi de uygulamaya bağlı olduğundan (diziler için daha fazla) teknik karşılaştırma bulamadığınız için şaşırmadım.
wondra

Kapalı bir kaynak, kara kutu olduğu için Unity motorunun iç kısmının nasıl çalıştığı hakkında bilgi almakta zorlanacaksınız. Yapabileceğiniz tek şey, her bir durumda profil oluşturmak ve kendinize cpu ve gpu kullanımının bir karşılaştırmasını almaktır. Nasıl çalıştığını anlamak için, bir Birlik mühendisinin devreye girmesini veya kaynak kodunun açılmasını veya sızdırılmasını gerektirir.
jgallant

@Jon Fair yeterince, ama aslında motor agnostik bir cevapla daha fazla ilgileniyordum. Çok fazla değişiyorsa, örneğin OpenGL'nin ArrayTexture'ı hakkında konuşmak için soruyu güncelleyebilirim: opengl.org/wiki/Array_Texture
ASteer

Yanıtlar:


12

Yukarıdaki yorumlarda belirtildiği gibi, performans uygulamaya, özel donanımınıza ve dokularla ne yapmaya çalıştığınıza bağlı olacaktır, bu nedenle tek güvenilir yanıtı her bir tercihi profillemektir.

Her seçeneği nasıl kullandığınız konusunda tutarlı bir şekilde geçerli olacak birkaç farklılık vardır:

Büyük bir fark, dizi dokuları için, her doku, doku koordinatlarını sarma veya mipmap oluşturma gibi amaçlarla ayrı ayrı işlem görmesidir.

Bu, numunelerin kenarlarındaki, özellikle daha derin mip seviyelerinde birlikte kanamasını önlemek için bitişik doku renk örnekleri arasına dolgu eklememiz gereken doku atlasları ile ilgili yaygın sorunları önler.

Bu ayrıca dokularınızın döşenmesini istiyorsanız, vanilya dokusunda olduğu gibi bunu yapmak için doku örnekleme donanımını kullanabileceğiniz anlamına gelir. Atlaslar ile, genellikle parça gölgelendiricimizde döşeme matematiğini yapmak zorundayız, çünkü örnekleyici içindeki tek tek fayansları değil, sadece tüm atlasın üzerindeki doku koordinatlarını sarar / yansıtır.

Dizi dokuları ile ilgili temel kısıtlama, tüm kurucu dokularının aynı çözünürlük ve mip seviyelerine sahip olmalarını gerektirmesidir. Çok farklı çözünürlük ihtiyaçları olan dokuları toplu olarak birleştirmeye çalışıyorsanız (örneğin, LoD'leri sanal bir dokuda mesafeyle düşen arazi karolarını depolamak ), bunun yerine atlasın esnekliğini isteyebilirsiniz.


Teşekkürler, tam da peşindeydim. Demek istediğim, daha az bellek yoğunluğu daha kesin olan bir cevap değil - elbette bunlar uygulamaya bağlı. Yine de, her davanın işleyişine dair bazı işaretçilerin her zamanki en iyi ve en kötü uyum senaryolarını anlamak için yararlı olabileceğinden emindim. Cevabınız gerçekten bana bu konuda yardımcı oldu.
ASteer

Dizi dokularının bir başka dezavantajı: ile sınırlıdır GL_MAX_ARRAY_TEXTURE_LAYERS. Yarı modern GPU'mda bu 2048, bu yüzden tonlarca küçük doku istiyorsanız, bu sınır çok düşük olabilir.
jwd
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.