Berapa ukuran tekstur yang optimal?


12

Baru-baru ini saya menambahkan paket tekstur ke proyek saya yang akan mengemas sejumlah tekstur menjadi satu, seperti ini:

Tekstur dikemas

Jadi misalnya yang ini berukuran 582x1023 piksel. Tujuan menambahkan tekstur yang dikemas ini jelas untuk meningkatkan kinerja jadi saya ingin mencari ukuran tekstur optimal untuk tekstur OpenGL (menggunakan LWJGL). Hal-hal yang saya temukan adalah bahwa banyak didukung ukuran maksimum tekstur tampaknya menjadi 1024x1024, menurut ini misalnya. Ini menurut saya aneh karena jelas banyak tekstur saja yang akan lebih besar dari itu, jadi apa yang terjadi dengan itu? Saya cukup yakin sebagian besar kartu grafis mendukung tekstur lebih besar dari itu. Dapatkah saya mengharapkan sebagian besar kartu grafis untuk menangani misalnya tekstur 4096x4096 (atau mungkin lebih besar dari itu)?

Untuk sampai pada poin kedua saya (saya harap ini masih dianggap sebagai satu pertanyaan, tetapi pada dasarnya bermuara pada masalah yang sama): Haruskah tekstur berukuran hingga kekuatan 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) dan haruskah Saya pad tekstur dikemas lebih kecil dari itu ke kekuatan berikutnya 2? Menurut pertanyaan ini dari tahun 2011 ini bukan persyaratan tetapi dapat meningkatkan kinerja dan menghindari bug kecil dan yang satu ini dari 2012 mengatakan bahwa Anda pasti harus membalut tekstur. Jadi saya menyadari bahwa pertanyaan-pertanyaan ini telah ditanyakan sebelumnya tetapi mereka diberi tanggal yang wajar untuk jawaban telah berubah dan selanjutnya mereka masing-masing hanya sebagian menjawab pertanyaan saya. Bagaimana proyek lain / menangani ini?

TL; DR: Ukuran tekstur apa yang dapat saya harapkan dari sebagian besar kartu grafis? Berapa ukuran tekstur yang optimal (atau ada)? Haruskah saya menempelkan lebar tekstur ke kekuatan 2 berikutnya?


4
GPU hanya memberikan kekuatan 2. Jika Anda tidak membuat tekstur secara manual, maka GPU (atau mesin game pilihan Anda) melakukan ini untuk Anda, menghasilkan sedikit keterlambatan saat runtime per tekstur, yang dapat bertambah. Saya tidak dapat menawarkan bantuan pada ukuran tekstur maksimum / optimal.
ketura

@ketura Ah saya mengerti, terima kasih. Jadi katakanlah saya mendapat gambar yang 513x10. Apakah akan lebih cepat untuk memasangnya ke 1024x1024 dan kemudian mentransfer semua piksel kosong ini atau membiarkan GPU melakukan itu?
flotothemoon

4
Anda tidak perlu pergi setinggi itu. 1024 x 16 akan berfungsi; tidak perlu KOTAK, hanya kekuatan 2 di setiap arah. Meskipun dalam hal itu saya akan mempertimbangkan dengan serius jika saya tidak dapat menyimpan piksel dan menurunkannya menjadi 512x16, lol.
ketura

Jawaban:


6

Saya akan mencoba menjawab ini, meskipun YMMV. Saya menggunakan Survei Perangkat Keras Steam ( http://store.steampowered.com/hwsurvey?platform=pc ) untuk menentukan berapa RAM video (VRAM) yang tersedia di sebagian besar komputer. Melihat hasil pada 2015-10-13 (hari ini), hampir 85% orang memiliki VRAM 1024 MB.

Pertanyaan Anda sangat luas, karena tidak menyatakan perangkat keras target (konsol, PC, perangkat genggam, perangkat seluler?) Saya akan berbicara tentang PC dan Anda dapat memperkirakan untuk platform lain berdasarkan spesifikasi perangkat keras.

Dengan asumsi 32 bit warna + alpha per pixel yaitu 4 bypes per pixel, 1 GB VRAM dapat secara maksimal menampung ~ 256 juta piksel. Ini sama dengan 256 1K oleh 1K tekstur. Ini mengasumsikan (secara tidak benar) bahwa Anda hanya ingin menahan tekstur dalam VRAM Anda, sementara akan ada banyak hal lain (mis. Data mesh, jika Anda bekerja dalam 3D) yang perlu Anda tinggalkan. Anda juga mungkin ingin memberi lebih banyak ruang untuk memetakan mip tekstur, yang biasanya paling baik jika tekstur Anda adalah kekuatan dua.

Konsol modern (XBOX One dan PS4) memiliki 4-8 GB RAM terpadu, sebagian besar perangkat genggam dan perangkat seluler memiliki 1 - 2 GB RAM terpadu, dengan batasan berapa banyak yang dapat Anda alokasikan sebagai VRAM.

Saya biasanya akan membuat tekstur 2K sehingga berfungsi pada kebanyakan PC, memungkinkan opsi untuk menurunkan untuk perangkat ujung bawah. Jika Anda sedang menulis game 2D dan ingin menargetkan tampilan resolusi yang lebih tinggi (4K, retina iPad, dll) Anda dapat menggunakan tekstur 4K untuk latar belakang, tetapi untuk sebagian besar bagian lain, itu mungkin berlebihan.

Semoga ini bisa membantu dan tidak mengeruhkan air.


Terima kasih atas jawabannya, pasti membantu. Adapun luasnya, maaf tentang itu, lupa memasukkan beberapa detail: Saya sedang mengembangkan untuk PC dalam 2D. Apa yang akan terjadi jika Anda menggunakan tekstur yang lebih besar dari ukuran tekstur maksimum yang didukung? Apakah itu tidak berfungsi sama sekali atau hanya menjadi lebih lambat?
flotothemoon

1
Sepertinya jawaban saya tepat. Memeriksa posting forum situs lain tekstur 2k adalah apa yang harus Anda dukung agar gim Anda dapat bekerja di sebagian besar perangkat. Batas ukuran tekstur tergantung pada perangkat keras tertentu dan versi OpenGL-ES tertentu. Saya tidak yakin apa pesan kesalahan spesifiknya, tetapi pesan itu datang dari OpenGL-ES ketika Anda mencoba memuat tekstur. Link bermanfaat: answers.unity3d.com/questions/563094/... , forum.unity3d.com/threads/texture-sizes-and-videocards.281422 dan feedback.wildfiregames.com/report/opengl/feature/...
Vijay Varadan

Kapan saya mencoba memuat atau mencoba mengikat tekstur? Atau apakah itu hal yang sama di sini?
flotothemoon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.