Çok yavaş direct3D doku örneklemesi


9

Direct3D 9 kullanarak küçük bir oyun yazıyorum ve arazi için çoklu çekim kullanıyorum. Yaptığım tek şey 3 doku ve bir karışım haritası örneklemek ve karışım haritasındaki renk kanallarına dayanan üç dokudan genel rengi elde etmektir. Her neyse, 1'den fazla doku örneklediğimde büyük bir kare hızı düşüşü alıyorum, 120+ fps'den 50'nin altına düşüyorum.

Bu yavaşlamadan sorumlu HLSL kodudur:

float3 ground = tex2D(GroundTex, multiTex).rgb;
float3 stone  = tex2D(StoneTex, multiTex).rgb;
float3 grass  = tex2D(GrassTex, multiTex).rgb;
float3 blend  = tex2D(BlendMapTex, blendMap).rgb;

Yanlış mı yapıyorum? Herkes doku örnekleme veya herhangi bir şey hakkında herhangi bir bilgi veya ipucu varsa, bu iyi olurdu.

Teşekkürler.


Hangi donanıma sahipsiniz? Dört doku örneği herhangi bir yeni donanımda sorun olmamalıdır.
Axel Gneiting

Radeon X1950'im var, evet, daha fazla değilse, birkaç yaşında. Sanırım belki de en iyi donanım değil. Ne düşünüyorsun ?
dotminic

Yanıtlar:


9

İşleri hızlandırmak istiyorsanız, doku atlası denilen bir şey kullanabilirsiniz.

Vikipedi - Doku atlası büyük bir görüntü veya her biri 3B nesnenin bir kısmı için bir doku olan birçok küçük alt görüntü içeren "atlas" dır. Alt dokular, nesnenin uvmap'sinin doku koordinatlarını atlas üzerinde değiştirerek, esas olarak görüntünün hangi kısmının içinde olduğunu söyleyerek oluşturulabilir. Birçok küçük dokunun sık kullanıldığı bir uygulamada, genellikle daha etkilidir. dokuları grafik donanımı tarafından bir birim olarak kabul edilen bir doku atlasında saklayın.

Bir GPU'nun, her biri bir kez örneklenmiş 4 görüntüye karşılık 4 kez tek bir büyük doku örneklemesi daha etkilidir. İşte bir arazi dokusu atlası örneği.

alternatif metin


1
Tavsiye için teşekkürler, gölgelendiricimi bir doku atlası kullanarak uyguladım, şimdi sadece 109fps alıyorum, ancak elde ettiğim 55fps'den düzgün bir gelişme. Teşekkürler!
dotminic

1
İyi bir cevap için +1. Bu doku atlas görüntüsünü nereden bulduğunu sorabilir miyim? Herhangi bir kullanım için özel mi yoksa ücretsiz mi?
Cameron

4

Dikkate alınması gereken başka bir şey doku formatıdır. Ham 32bpp bir doku mı? Öyleyse, 4 bit / piksel olan (alanın 1 / 8'ini alan) sıkıştırılmış bir DXT1 dokusu veya 8 bit / pikselde alfa kanalına ihtiyacınız varsa DXT5 kullanmayı düşünün.

Doku verilerinin boyutunun azaltılması doku bellek bant genişliği gereksinimlerinin azalmasına ve doku önbellek performansının artmasına neden olmalıdır.

Ayrıca, makul bir maliyet ekleyebilecek maksimum kaliteli anizotropik filtreleme ayarlamadığınızdan emin olun.


tavsiye için teşekkürler, bir dahaki sefere denemek.
dotminic

3

Dokularında mipmap var mı?

Mipmap oluşturmadan, doku örneklemesi özellikle pahalı olabilir (bir sürü önbellek özlüyor)


Evet, dokuların mipmap'leri var, DirectX doku aracından * .dds olarak dışa aktardım. Ancak, her yerde yüksek çözünürlüklü dokuların olduğu ticari oyunlarda dokuları nasıl kullanıyorlar? Ben sadece 1 doku atlas örnekleme ve bir arazi yaparken, tüm gpu üzerinde 109 fps kare hızı elde ediyorum.
dotminic
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.