Sebuah png besar pada disk mungkin hanya memakan beberapa megabyte tapi saya membayangkan bahwa pada GPU png yang sama disimpan dalam format yang tidak terkompresi yang membutuhkan lebih banyak ruang. Apakah ini benar? Jika benar, berapa ruang?
File JPG dan PNG hampir selalu berukuran lebih kecil di dalam disk daripada di memori; mereka perlu didekompresi saat terbang untuk mendapatkan data RGB mentah, sehingga membutuhkan lebih banyak daya pemrosesan untuk memuat dan lebih banyak RAM setelahnya. Begitu banyak mesin modern memilih untuk menyimpan format yang sama pada disk seperti yang mereka lakukan dalam memori, mengarah ke file yang ukurannya sama dengan persyaratan memori tekstur (tetapi juga lebih besar dari PNG atau JPG). RGB / RGBA dan S3TC / DXTn / BCn adalah format yang paling banyak digunakan, karena mereka dibaca langsung ke memori tanpa pemrosesan apa pun (tekstur DXT dikompresi).
Jadi, ini adalah ukuran untuk berbagai format tekstur umum:
Jika Anda menggunakan gambar dengan mipmaps , teksturnya akan membutuhkan memori 4/3 lebih banyak. Selain itu, lebar dan tinggi tekstur dapat dibulatkan secara internal untuk menjadi kekuatan dua pada perangkat keras lama atau kurang mampu, dan pada beberapa perangkat keras yang sangat terbatas, juga dipaksa menjadi persegi.
Info lebih lanjut tentang DXT: ini adalah kompresi lossy; ini berarti, beberapa data warna hilang saat mengompresi tekstur. Ini memiliki dampak negatif pada tekstur Anda, mendistorsi batas tajam dan membuat "blok" pada gradien; tetapi manfaatnya jauh lebih baik daripada kerugiannya (jika Anda memiliki tekstur yang terlihat sangat buruk di DXT, biarkan saja itu tidak terkompresi; yang lain akan menggantikan kehilangan ukuran). Juga, karena piksel dikompresi oleh blok ukuran tetap, lebar dan tinggi tekstur harus kelipatan empat.
Jelas: Itu tergantung pada format.
Mari kita ambil tekstur persegi 256 x 256 piksel. Jika tidak terkompresi 32-bit dengan saluran alpha (
Color
dalam XNA) maka dibutuhkan 256KB (256*256*4
byte).Format 16-bit (mis . :)
Bgr565
jelas akan menjadi setengah ukuran - 128KB .Kemudian Anda masuk ke format terkompresi. Di XNA Anda memiliki DXT1, DXT3 dan DXT5 (juga dikenal sebagai S3 Compression ). Ini adalah format kompresi lossy. Ini juga merupakan format berbasis blok - yang berarti Anda dapat mengambil sampel darinya (karena Anda tahu di mana blok sebuah piksel berada). Ini juga lebih cepat, karena Anda menggunakan lebih sedikit bandwidth.
Rasio kompresi DXT1 adalah 8: 1 dan untuk DXT3 dan DXT5 adalah 4: 1.
Jadi gambar DXT1 dari 256x256 adalah 32KB . Dan DXT3 atau DXT5 adalah 64KB .
Dan kemudian ada pemetaan . Jika ini diaktifkan, ini menciptakan serangkaian gambar dalam memori grafis masing-masing setengah dari ukuran sebelumnya. Jadi untuk gambar 256x256 kami: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Tekstur dengan pemetaan pemetaan adalah sekitar 133% ukuran aslinya.
sumber
Kebanyakan GPU hanya dapat membaca format kompresi yang sangat spesifik. misalnya. BC *, DXT *, bukan format seperti png. Jadi ya, memang benar sebagian besar bahwa .png akan mengambil lebih banyak ruang dalam memori video daripada pada disk.
Tekstur dapat disimpan terkompresi atau tidak terkompresi dalam memori video dan memori sistem.
Untuk tekstur yang tidak terkompresi, aturan umum adalah bahwa ia akan mengambil jumlah ruang yang sama dalam memori video seperti halnya dalam bentuk yang tidak terkompresi dalam memori sistem.
Untuk tekstur terkompresi DXT1. GPU menyimpan 8 byte untuk setiap ubin 4x4 dalam tekstur Anda. Data yang tidak terkompresi (pada 8-bit per saluran RGB) biasanya 4x4x3 = 48 byte, jadi itu adalah rasio kompresi 6: 1. Untuk tekstur terkompresi DXT3 / DXT5, GPU menyimpan 16 byte untuk setiap ubin 4x4 dalam tekstur Anda. Itu rasio kompresi yang sedikit lebih rendah dari 3: 1.
Ada beberapa peringatan dengan tekstur terkompresi dan terkompresi:
Sebagian besar memori dialokasikan dalam halaman (ukurannya bervariasi di antara GPU) dengan ukuran tetap. misalnya. 4KB dan sering yang tidak dialokasikan dan dibagikan dengan data GPU lainnya. Yaitu. jika tapak tekstur Anda lebih kecil dari ukuran halaman, tapak kaki dalam video seringkali masih berupa ukuran halaman.
Beberapa GPU memiliki persyaratan penyelarasan yang sangat spesifik. Di masa lalu, beberapa GPU memiliki persyaratan bahwa tekstur menjadi kekuatan 2 ukuran. Ini sering diperlukan untuk mendukung representasi swizzled (lihat Morton Ordering: http://en.wikipedia.org/wiki/Z-order_(curve )) untuk meningkatkan akses lokalitas ketika mengambil sampel dari tekstur. Ini berarti bahwa tekstur dengan ukuran ganjil akan diisi untuk menjaga persyaratan ini (biasanya bantalan ini ditangani oleh pengemudi). Meskipun perintah mortal tidak selalu digunakan dalam GPU modern, mungkin masih ada kembung untuk mendukung persyaratan spesifik GPU.
Beberapa representasi tekstur Anda mungkin ada di memori kapan saja, terutama jika Anda menggunakan kunci buangan padanya. Ini dapat mengasapi penggunaan memori Anda sampai representasi tidak lagi digunakan oleh GPU (yang biasanya beberapa frame di belakang rendering CPU)
Jika Anda mengaktifkan pemetaan pemetaan, rata-rata tambahan akan mengkonsumsi rata-rata sekitar sepertiga dari tingkat dasar basis. YMMV berdasarkan peringatan di atas.
sumber
AFAIK itu adalah lebar gambar * tinggi * BPP, tidak tergantung apakah itu PNG, JPG atau BMP. Saya tidak tahu bagaimana DDS atau format kompresi lainnya diletakkan.
Pemetaan-mip akan meningkatkan kebutuhan memori video.
Pengetahuan saya tentang topik ini mungkin sedikit ketinggalan zaman. Saya telah meninggalkan 3D beberapa waktu lalu.
sumber