私は使用しています.png
私のテクスチャにSをして、仮想ファイルシステムを使用しています.zip
私のゲームプロジェクトのためのファイル。これは、テクスチャが2回圧縮および解凍されることを意味します。この二重圧縮の問題の解決策は何ですか?私が聞いた解決策の1つは.tga
、テクスチャにs を使用することです。別の解決策は、圧縮解除を実装するGPU
ことです。これは高速なので、オーバーヘッドを忘れてください。
私は使用しています.png
私のテクスチャにSをして、仮想ファイルシステムを使用しています.zip
私のゲームプロジェクトのためのファイル。これは、テクスチャが2回圧縮および解凍されることを意味します。この二重圧縮の問題の解決策は何ですか?私が聞いた解決策の1つは.tga
、テクスチャにs を使用することです。別の解決策は、圧縮解除を実装するGPU
ことです。これは高速なので、オーバーヘッドを忘れてください。
回答:
zip形式は、いくつかの異なる圧縮アルゴリズムをサポートしています。アーカイブ内のファイルごとに異なるアルゴリズムを使用できます。追加の圧縮(PNGなど)の恩恵を受けない圧縮済みのファイルをzipアーカイブに保存する場合は、これらのファイルをまったく圧縮しない「保存済み」アルゴリズムでエンコードできます。7-zipの [アーカイブに追加]ダイアログでは、[ 圧縮強度]でこれを選択できます。
しかし、アーカイブだけでなく画像だけでなく他のより圧縮可能なリソースがある場合、すべてのファイルにアルゴリズムを選択するのは非常に面倒です。その場合、圧縮アーカイブで圧縮されていない画像形式を選択することもできます。
TGA形式は多くの異なるモードを認識しており、そのうちのいくつかは圧縮されており、いくつかは圧縮されていません。圧縮を使用しない場合は、使用しているグラフィックエディターのエクスポートオプションで正しい圧縮を選択してください。別の非圧縮画像形式は、BMP(Windowsビットマップ)です。
これが私が作ったテストです。同じイメージ(現在のプロジェクトのアセット)を異なる形式で複数回zipアーカイブに追加しました。一部は「deflate」アルゴリズム、通常は強度、もう1つは「store」です。ドイツのGUIでごめんなさい。2列目は非圧縮サイズ、3列目は圧縮アルゴリズム、4列目は圧縮サイズです。
ご覧のとおり、PNGのdeflateエンコードはわずか0.3%しか節約できませんが、deflateエンコードのBMPはPNGバージョンよりもさらに小さい元のファイルの1/10に削減されます。これは非常に驚きました。PNGの圧縮方法は画像データ用に最適化する必要がありますが、ZIPはそうではないため、PNGが小さくなると予想していました。おそらく、私のイメージエディター(GIMP)は、BMPにはしないPNGファイルに非常に多くのメタ情報を追加したということです。
圧縮されたTGAファイルの圧縮はZIPによってさらに改善されましたが、圧縮されていないバージョンほどではありませんが、圧縮されていないTGAは圧縮前後のファイルサイズに関してBMPと同様に動作しました。
deflate以外のアルゴリズムおよび他の圧縮強度設定を試してみる価値があるかもしれません。どの組み合わせが最良の結果をもたらすかは、おそらくテクスチャのスタイルによって異なります。ただし、ゲームのアセット読み込みのベンチマークを検討し、使用する設定に応じて圧縮解除のパフォーマンスを決定することもできます。
結論:ファイルサイズが小さいままで二重圧縮を避けたい場合はPNG
、Store
zipアルゴリズムまたはBMP
圧縮zipアルゴリズムを使用します。
心配しないでください。
.zipファイルで使用される「deflate」アルゴリズムが、.png画像のピクセルデータなど、既に十分に圧縮されたデータブロックに遭遇すると、効果的に圧縮できないことがわかり、リテラルとして保存されます。非圧縮データ。これにより、コピーアウトするための解凍終了時のオーバーヘッドがほとんどかかりません。
store
代わりにすべてを強制的に使用し、リリースビルドではすべてを使用する必要があります。deflate
deflate
いくつかの非常に良い答えが既に与えられているように見えますが、私はもう一つ与えたいと思いました:
What are the solutions to this double compression problem?
解決策:何もしないでください。
根拠:問題はありませんでした-はい、情報を2回圧縮していますが、なぜこれを心配していますか?データサイズが大きすぎませんか?減圧は遅すぎますか?これは、現時点で追加、改良、テスト、および/またはデバッグできる多数の機能よりも重要ですか?
PNGやOGGなどの特殊な形式を使用する場合、ZIPの圧縮は必要ありません。
PNG、OGG、およびその他の既に圧縮されている形式は、ZIPとして再度圧縮してもそれほど小さくなりません。圧縮された100MBのPNGは、まだ〜100MBです。
スクリプト、構成ファイル、およびその他のテキストベースの形式は、圧縮の恩恵を大いに受けますが、通常、それらは比較的小さく、それほど多くのデータを保存しません。ゲームが100MBの場合、テキストファイルはゲーム全体の1MBになる可能性があります。たとえ圧縮によって100KBにできたとしても、1%未満の900KBしか獲得できず、努力の価値はほとんどありません。
仮想のzipベースのファイルシステムを使用する代わりに、ファイルシステムを直接使用することもできます。パッチを適用するのは非常に簡単です。変更したファイルを交換するだけです。
.zip
ファイルを使用するかどうかに関して、選択肢がない場合もあります。たとえば、Androidプラットフォームでは、.apk
は.zip
ファイルであり、リソースが含まれている場合があります。