iOS のゲーム用にスプライトシートのさまざまな圧縮をテストしています。驚くべきことに、PNG 32 (RGBA 4444) の代わりにアルファ付きの PVR 2 ビットを使用すると、より重要なメモリ (RAM) の使用が得られます。スプライトシートがメモリ内に読み込まれると、PNG 32 の代わりに PVR 2 ビットを使用すると、消費量が 25% 高くなります。xCode で Instruments を使用して、物理デバイス (iPad Air 2) のメモリ使用量を確認しています。
TexturePacker を使用してスプライトシートを生成しています。
私は、PVR 2 または 4 が PNG 32 よりもはるかに少ないメモリ消費量であるすべての場所を読みました。それはどのように可能ですか?
編集:
私の観察によると、PVRTC 4ビットRGBAはPNG 32よりも多くのメモリ(RAM)を使用するため、これは奇妙です。PVRTC 2 ビット RGBA は、PNG 32 RGBA 4444 よりも 25% 高いです。私が話しているのは、何も関係がなく、問題にならないディスク サイズではなく、ライブ RAM 消費についてです。特にRAMにロードするとき、iOSはPVRを想定とは異なる方法で管理しているようです。
編集2:
私のテクスチャは 2048x2048 で、POT があり、正方形のフォーマットです。RAMの消費量が本来よりもはるかに高いことを除いて、すべてが正常に機能します。私はすべてのテストを、USB ケーブルで私の Mac に接続された物理的な iPad Air 2 デバイスで行っています。xcode 内で Instruments を使用して、ライブでの RAM の消費を確認して追跡しています。テクスチャを 2 (1024x1024) で割った PNG 8 ビット (インデックス付き) 形式に切り替えることで、RAM 消費の問題を解決しました。コードでスケール x2 を作成して、通常のサイズのテクスチャを復元します。RAM の消費量は、(PVR 2 ビット RGBA) では 950 MB でしたが、240 MB (PNG 8 ビット インデックス) に減少しました。私のゲームはビデオ パズル (15 fps で 8 秒間のビデオ ループ) で、多くのスプライトを使用します。(TexturePacker によって生成された各パズルには 43 のスプライトシート、各スプライトシートには約 130 のスプライト)