Jadi saya menulis sebuah game kecil menggunakan Direct3D 9 dan saya menggunakan multitexturing untuk medannya. Yang saya lakukan hanyalah mencicipi 3 tekstur dan peta campuran dan mendapatkan warna keseluruhan dari tiga tekstur berdasarkan saluran warna dari peta campuran. Bagaimanapun, saya mendapatkan penurunan frame rate yang besar ketika saya mencicipi lebih dari 1 tekstur, saya beralih dari 120+ fps menjadi hanya di bawah 50.
Ini adalah kode HLSL yang bertanggung jawab untuk memperlambat:
float3 ground = tex2D(GroundTex, multiTex).rgb;
float3 stone = tex2D(StoneTex, multiTex).rgb;
float3 grass = tex2D(GrassTex, multiTex).rgb;
float3 blend = tex2D(BlendMapTex, blendMap).rgb;
Apakah saya salah? Jika ada yang punya info atau tips tentang pengambilan sampel tekstur atau apa pun, itu akan menyenangkan.
Terima kasih.
Jawaban:
Jika Anda ingin mempercepat, Anda dapat menggunakan sesuatu yang disebut atlas tekstur.
Ini lebih efisien untuk GPU untuk sampel tekstur tunggal besar 4 kali dibandingkan 4 gambar sampel masing-masing. Berikut adalah contoh atlas tekstur medan.
sumber
Satu hal yang perlu dipertimbangkan adalah format tekstur. Apakah ini tekstur mentah 32bpp? Jika demikian, pertimbangkan untuk menggunakan tekstur DXT1 terkompresi, yaitu 4 bit / piksel (mengambil 1/8 ruang), atau DXT5 jika Anda membutuhkan saluran alfa, pada 8 bit / piksel.
Mengurangi ukuran data tekstur harus mengurangi kebutuhan bandwidth memori tekstur, dan meningkatkan kinerja cache tekstur.
Juga, periksa apakah Anda belum menetapkan penyaringan anisotropik kualitas maksimum - yang dapat menambah sedikit biaya.
sumber
Apakah tekstur Anda memiliki mipmaps?
Tanpa pemetaan, tekstur sampel bisa sangat mahal (banyak cache yang hilang)
sumber