Unity 5.4 (saat ini dalam versi beta), akan menghadirkan fitur yang banyak ditunggu-tunggu (sejak 2013) yaitu array-textures - sama sia -sianya dengan OpenGL's ArrayTexture . Namun, setelah melakukan beberapa bacaan tentang array-tekstur dan atlas tekstur, saya masih belum bisa memahami perbedaan teknis pada penggunaannya oleh CPU dan GPU.
Jadi, untuk lebih spesifik, saya ingin meminta penjelasan tentang perbedaan utama antara bagaimana atlas tekstur dan array tekstur ditangani oleh CPU dan GPU dan, yang paling penting, bagaimana perbedaan tersebut dapat berdampak pada kinerja dan penanganan memori (misalnya bagaimana susunan tekstur bisa lebih banyak kinerja daripada tekstur atlas, dll).
Jika rincian teknis tentang implementasi Unity kurang karena ketidakamanan sumber daya yang tertutup, saya akan cukup senang dengan jawaban mengenai OpenGL.s ArrayTexture.
sumber
Jawaban:
Seperti disebutkan dalam komentar di atas, kinerja akan tergantung pada implementasi, perangkat keras khusus Anda, dan apa yang Anda coba lakukan dengan tekstur, sehingga satu-satunya jawaban yang dapat diandalkan adalah untuk membuat profil setiap alternatif.
Ada beberapa perbedaan dalam hal bagaimana Anda menggunakan setiap opsi, yang akan berlaku secara konsisten:
Satu perbedaan besar adalah bahwa, untuk tekstur array, masing-masing tekstur diperlakukan secara terpisah untuk keperluan seperti membungkus koordinat tekstur atau memetakan.
Ini menghindari masalah umum dengan atlas tekstur di mana kita perlu menambahkan padding antara carikan tekstur yang berdekatan untuk menjaga sampel di tepi mereka dari pendarahan bersama, terutama di tingkat mip yang lebih dalam.
Ini juga berarti jika Anda ingin memoles tekstur, Anda dapat menggunakan perangkat keras pengambilan sampel tekstur untuk melakukannya seperti halnya dengan tekstur vanila. Dengan atlas, kita biasanya harus melakukan matematika ubin di shader fragmen kami, karena sampler hanya membungkus / cermin / klem / batas tekstur koordinat seluruh atlas, bukan ubin individu di dalamnya.
Batasan utama dengan tekstur array adalah bahwa mereka memerlukan semua tekstur penyusunnya untuk memiliki resolusi dan jumlah level mip yang sama. Jika Anda mencoba menggabungkan tekstur dengan kebutuhan resolusi yang sangat berbeda (misalnya, menyimpan petak medan yang LoDnya jatuh dengan jarak dalam tekstur virtual ), Anda mungkin menginginkan fleksibilitas atlas.
sumber
GL_MAX_ARRAY_TEXTURE_LAYERS
. Pada GPU semi-modern saya, ini adalah 2048, jadi jika Anda ingin banyak tekstur kecil, batas ini mungkin terlalu rendah.