Pada hari-hari awal OpenGL dan DirectX, ukuran tekstur diminta menjadi kekuatan dua. Ini berarti interpolasi nilai float dapat dilakukan dengan sangat cepat, menggunakan pengalihan dan semacamnya.
Sejak OpenGL 2.0 (dan sebelumnya, melalui ekstensi) dimensi non-power-of-two tekstur telah didukung.
Apakah tekstur dua daya memiliki keunggulan kinerja pada GPU terintegrasi dan diskrit modern? Apa kelebihan yang dimiliki tekstur non-kekuatan-dua?
Apakah populasi desktop yang signifikan memiliki kartu yang mendukung tekstur non-kekuatan-dua?
opengl
textures
performance
Akan
sumber
sumber
Jawaban:
Apakah ada keuntungan kinerja dengan tetap berpegang pada dua kekuatan pada GPU terintegrasi dan diskrit modern?
Sebagian besar GPU modern mendukung non-power of dua (NPOT) tekstur dan menanganinya dengan baik. Penurunan kinerja cukup kecil. Tetapi ada beberapa masalah yang perlu dipertimbangkan:
Saat menggunakan tekstur NPOT, dibutuhkan lebih banyak ruang dalam RAM, sama seperti tekstur POT berukuran berikutnya. Secara teknis Anda hanya membuang ruang yang bisa digunakan untuk meletakkan sesuatu di sana;
Tekstur NPOT dapat ditangani lebih lambat (pada OpenGL 2.1 saya mengalami penurunan kinerja hingga 30%) dibandingkan dengan POT dengan ukuran berikutnya;
GPU lama dan GPU on-board / on-chip tidak terlalu canggih, mereka sering mendukung tekstur NPOT, tetapi dukungannya cukup lambat dan canggung;
Bahkan GPU yang lebih lama dapat menolak untuk menerima / menampilkan tekstur NPOT sama sekali;
Mungkin ada artefak merayap yang disebabkan oleh interpolasi mip-peta, tekstur 25x25 Anda mungkin memiliki pinggiran hitam di mana piksel ditambahkan untuk memasukkannya ke ukuran 32x32.
NB Saya tidak tahu pasti tentang perangkat seluler, bahkan mungkin ada lebih banyak pembatasan mengenai tekstur POT.
Apa kelebihan yang dimiliki tekstur non-kekuatan-dua, jika ada?
Sejauh yang saya tahu hanya ada 2 keuntungan:
Apakah ada populasi besar pengguna desktop yang tidak memiliki kartu yang mendukung tekstur non-kekuatan-dua?
Sejauh yang saya tahu dan diuji pada PC - Ya. Itu termasuk persentase utama GPU penurunan kecepatan / bug minor dan persentase kartu kecil yang tidak akan menangani NPOT sama sekali.
sumber
Salah satu penggunaan umum dari tekstur non-kekuatan-dua adalah untuk 'ukuran layar' atau 'ukuran setengah layar' (dan seterusnya) membuat tekstur target yang digunakan untuk efek postprocessing.
Dalam kasus ini, peta tidak diperlukan, buffer selalu tidak terkompresi, jadi ukuran tekstur yang aneh menyebabkan lebih sedikit masalah di sini
sumber
Ada batasan untuk tekstur NPOT pada perangkat keras yang lebih lama. Seperti yang disebutkan pada wiki OpenGL ini , beberapa perangkat keras lama membutuhkan NPOT untuk tidak memiliki mipmaps, tekstur terkompresi membutuhkan penyelarasan 4x4 piksel, tetapi perangkat keras baru harus menanganinya dengan sempurna.
Dalam pengalaman saya, beberapa perangkat keras yang bahkan relatif baru mengalami kinerja besar jika Anda menggunakan tekstur NPOT dan bukan POT. Saya tidak tahu apa masalahnya; ada kemungkinan bahwa dalam beberapa kombinasi status render, rendering sebenarnya dilakukan dalam perangkat lunak. Jadi, kecuali Anda memiliki alasan yang bagus, saya sarankan tetap mencoba menggunakan POT sebanyak mungkin.
Mengenai mengapa menggunakan NPOT dan bukannya POT - jika Anda memiliki gambar dengan dimensi NPOT, katakan misalnya 1600x1200, menggunakan permukaan 2048x2048 piksel akan menghabiskan banyak memori video.
sumber
kekuatan 2 tekstur meningkatkan kinerja sekitar 30% untuk semua jenis GPU tidak hanya GPU lama (30% lebih cepat adalah perbedaan antara GPU high-end dan rata-rata) mereka mengambil 30% lebih banyak ram tetapi lebih sedikit vram diperlukan mereka meningkatkan kualitas dengan memberikan ukuran tekstur yang tepat untuk jarak tertentu ia bekerja seperti anti-aliasing untuk tekstur garis gelap artefak harus ditangani oleh mesin permainan dan mesin aaa menanganinya dengan baik
sumber
Seni programmer saya hanya dengan ukuran yang benar.
Ini tentu saja menyederhanakan logika tampilan saya untuk mengetahui bahwa jika saya ingin mengatur tekstur ke kiri atas layar, saya hanya dapat mengatur 0,0 sebagai kiri atas tekstur dan melihat semua tekstur di lokasi yang benar, sedangkan jika saya harus menambahkan 0alpha padding, memposisikan tekstur pada tepi layar akan lebih kompleks. Plus, tentu saja, 0alpha itu masih harus dicampur alfa, dan jika saya melihat tekstur buram, saya mungkin memilih untuk tidak memiliki saluran alpha.
sumber