Saya menggunakan .png
s untuk tekstur saya dan saya menggunakan sistem file virtual dalam .zip
file untuk proyek game saya. Ini berarti tekstur saya dikompresi dan didekompresi dua kali. Apa solusi untuk masalah kompresi ganda ini? Salah satu solusi yang pernah saya dengar adalah menggunakan .tga
s untuk tekstur, tetapi sepertinya sudah lama, sejak saya pernah mendengarnya. Solusi lain adalah menerapkan dekompresi pada GPU
dan, karena cepat, lupakan overhead.
textures
assets
compression
pengguna1095108
sumber
sumber
Jawaban:
Format zip mendukung beberapa algoritma kompresi yang berbeda. Anda dapat menggunakan algoritma yang berbeda untuk setiap file dalam arsip. Ketika Anda ingin menyimpan file yang sudah dikompresi yang tidak mendapat manfaat dari kompresi tambahan (seperti PNG) dalam arsip zip, Anda dapat menyandikan file-file ini dengan algoritma "tersimpan" yang tidak memampatkan sama sekali. Dialog "Tambahkan ke arsip" dari 7-zip memungkinkan Anda memilih ini di bawah "Kekuatan kompresi".
Tetapi ketika Anda tidak hanya memiliki gambar tetapi juga sumber daya lainnya yang lebih kompresif dalam arsip Anda, mungkin akan sangat membosankan untuk memilih algoritma untuk setiap file. Dalam hal ini Anda mungkin lebih memilih format gambar yang tidak terkompresi dalam arsip kompresi.
Format TGA tahu banyak mode yang berbeda, beberapa di antaranya dikompresi dan beberapa tidak. Ketika Anda tidak ingin menggunakan kompresi, pastikan Anda memilih yang tepat di opsi ekspor editor grafik yang Anda gunakan. Format gambar non-kompresi lainnya adalah BMP (Windows Bitmap).
Inilah tes yang saya buat. Saya menambahkan gambar yang sama (aset dari proyek saya saat ini) dalam format yang berbeda beberapa kali ke arsip zip, beberapa dengan "deflate" -algoritma pada kekuatan normal dan satu dengan "store". Maaf untuk GUI Jerman. Kolom ke-2 adalah ukuran terkompresi, kolom ke-3 adalah algoritma kompresi dan kolom ke-4 adalah ukuran terkompresi.
Seperti yang Anda lihat, deflate-encoding PNG hanya menyelamatkan sedikit 0,3%, sementara BMP deflate-encoded dikurangi menjadi sepersepuluh dari file asli yang bahkan lebih kecil dari versi PNG. Ini cukup mengejutkan saya. Saya akan mengharapkan PNG menjadi lebih kecil karena metode kompresi PNG harus dioptimalkan untuk gambar-data sementara ZIP tidak. Penjelasan yang mungkin adalah bahwa editor gambar saya (GIMP) menambahkan cukup banyak meta-informasi ke file PNG yang tidak dilakukan untuk BMP.
TGA terkompresi berperilaku mirip dengan BMP mengenai filesize sebelum dan sesudah zip sementara kompresi file TGA terkompresi lebih ditingkatkan oleh ZIP, meskipun tidak sebanyak versi terkompresi.
Mungkin layak untuk bereksperimen dengan algoritma lain selain mengempis dan dengan pengaturan kekuatan kompresi lainnya. Kombinasi mana yang akan memberikan hasil terbaik kemungkinan akan tergantung pada gaya tekstur Anda. Tetapi Anda juga dapat mempertimbangkan untuk melakukan benchmark terhadap pemuatan aset game Anda dan memiliki dekompresi-kinerja memengaruhi keputusan Anda yang pengaturan yang Anda gunakan.
Intinya: Bila Anda ingin menghindari kompresi ganda saat masih memiliki ukuran file yang rendah, gunakan
PNG
denganStore
algoritma zip atauBMP
dengan algoritma zip kompresi.sumber
Jangan khawatir tentang itu.
Ketika algoritma "deflate" yang digunakan dalam file .zip menemukan blok data yang sudah terkompresi dengan baik, seperti data piksel dari gambar .png, ia menemukan bahwa itu tidak dapat mengompresnya secara efektif, dan itu akan menyimpannya sebagai literal data tidak terkompresi. Ini membutuhkan sedikit overhead pada akhir dekompresi untuk menyalin.
http://en.wikipedia.org/wiki/DEFLATE
sumber
store
alih-alihdeflate
menghemat waktu, makadeflate
semuanya untuk rilis build.Sepertinya beberapa jawaban yang sangat baik telah diberikan, tetapi saya pikir saya akan memberikan satu lagi:
Solusi: Jangan Lakukan Apa pun.
Dasar Pemikiran: Tidak ada masalah yang dinyatakan - ya Anda mengompresi informasi dua kali, tetapi mengapa Anda khawatir tentang hal ini? Apakah ukuran data terlalu besar? Apakah dekompresi terlalu lambat? Apakah ini lebih atau kurang penting daripada lusinan fitur yang dapat Anda tambahkan, perbaiki, uji dan / atau debugging pada saat ini?
sumber
Jika Anda menggunakan format khusus seperti PNG dan OGG, Anda tidak akan memerlukan kompresi ZIP.
PNG, OGG, dan format lain yang sudah dikompresi tidak akan jauh lebih kecil dengan mengompresnya lagi sebagai ZIP. 100MB PNG terkompresi masih ~ 100MB.
Skrip, file Konfigurasi, dan format berbasis teks lainnya sangat diuntungkan oleh kompresi, namun biasanya sangat kecil jika dibandingkan, mereka tidak menyimpan data sebanyak itu. Jika game Anda 100MB, maka file teks mungkin menghasilkan 1MB dari keseluruhan game, bahkan jika Anda bisa membuatnya 100KB melalui kompresi maka Anda hanya memenangkan 900KB, kurang dari 1%, hampir tidak sepadan dengan usaha.
Anda bahkan mungkin ingin menggunakan sistem file secara langsung daripada menggunakan sistem file virtual, berbasis zip. Itu akan membuat penambalan sangat mudah: Anda bisa menukar semua file yang Anda modifikasi.
sumber
.zip
file atau tidak. Misalnya, pada platform android,.apk
ini adalah.zip
file, yang mungkin berisi sumber daya.