圧縮は、多くの異なる層に多くの方法で起こる、いつ、どこで、どのようにその使用の目的&目標は(圧縮がスペースを節約について常にではないが何であるか、完全に依存していることができますディスク上に)。
非常に基本的に、すべてのアセットは一括アーカイブに圧縮されます(これにより、HDDからの読み込みが少なくなるため読み込みが高速化されますが、これに対して処理能力を犠牲にしていますまったくCPUを使用していない非圧縮ファイルを、)読み取るためにDMAを使用して、ほとんど常にパフォーマンスを破壊し、問題のホストを引き起こすバックHDDに読み取りが(場合によってはなり、メモリへの記憶を行われているリードバック不可能な、古い世代のコンソールなど)。
例として、テクスチャはさまざまな方法で圧縮できますが、主にブロック圧縮(S3TC/DXTn、BCn)は圧縮解除がサポートされているため使用されています(またはドライバによってエミュレートされる)ので、アーカイブ/ディスクのための読み込みが完了したら、それ以上の解凍は必要ありません。
圧縮戦略はまた、特に、メモリレイアウトに非常に敏感である限られた資源を持っているとCとのzlibなどのライブラリー(またはその他)を使用するなど
小さなキャッシュを持っているコンソールで、プラットフォームごとに異なり++この実行時圧縮解除はどのように行われますか?
一般的には、メモリはアーカイブのファイルをマッピングし使用してRAMに直接解凍したい、これを行い十分に立証されてAAAアーカイブシステムの良い例はブリザードエンターテイメントが使用するMPQ format(、より詳細hereです)、そのようなディアブロI、ウォークラフトIII、World of Warcraftの中にbzip2のためのzlibのためのデフレートとして、圧縮ALGOSの様々なを使用し、彼らは最近、SCIIような彼らの新しいゲームのためのLZとスパース圧縮を追加しました。
月ヴァッセンベルク」論文(Optimizing File Accesses via Ordering and Caching
)も、興味のあるファイル管理の良い内訳を、持っています。
私は知りません見つけることができ、彼はこの全体のプロセスを説明しQuakeCon 2011で基調講演を持っていたもの'asset'はここで具体的に意味しますが、別々の圧縮ファイルがたくさんある場合は、オンデマンドで圧縮解除してみてください。したがって、ファイルは必要なときにのみメモリ内で解凍され、キャッシュされます。キャッシュが大きくなりすぎないように、他のファイルを解凍する必要があるときには、キャッシュから不要なファイルを破棄します。 – sashoalm
アセット私はゲームに必要なファイル、イメージ、メッシュ、マテリアル、シェイダーなどのものを意味します。 – Constan7ine
"Game Coding Complete"には、記述された方法がかなりありました。 – risingDarkness