5

iPhone ゲーム開発では、パフォーマンスのために PNG 形式から PVRTC 形式に切り替えました。しかし、PVRTC 圧縮では、PNG ファイルよりもはるかに大きなファイルが作成されます。したがって、140 KB (1024x1024) の PNG は、PVRTC 形式で 512 KB 以上に肥大化します。50 KB の PNG ファイルが圧縮されたことをどこかで読みました。約10KBで、私の場合はすべて逆です..

このように発生する理由と、これを回避する方法..PNGの透明度に関係なく、PVRTC圧縮がやみくもに4bpp変換(1024x1024x0.5)を行っている場合、ここで達成している圧縮は何ですか..

ゲームにはこれらの 1024x1024 の画像が 100 枚あります。それぞれが複雑なアニメーションを実行する多数のキャラクターが存在するためです..画像あたり 512KB のこのレートでは、私のアプリは 50MB 以上を取得します..これは私の顧客にとって受け入れられません..( PNG、アプリを 10MB にすることもできたはずです)。

4

4 に答える 4

17

一般に、圧縮されていない画像データは 24bpp (RGB) または 32bpp (RGBA) のフラットレートです。PVRTC は 4bpp (または 2bpp) フラットレートであるため、これに比べて 6 または 8 (12 または 16) 倍の圧縮があります。

グラフィックス ハードウェアがテクスチャをネイティブに使用するための要件は、ハードウェアがテクスチャの形式にランダムにアクセスできる必要があることです。PVRTC はこの種の形式であり、PNG はそうではありません。これが、PNG がより高い圧縮率を達成できる理由です。PVRTC は実行時の展開形式です。PNG は保存形式です。

PVRTC 圧縮は、一度に 4x4 ブロックのピクセルに対してフラット ビット レートで実行されるため、特定のテクセル値を取得するために必要なデータをメモリ内のどこから取得するかを簡単に計算でき、必要なメモリへのアクセスは 1 回だけです。グラフィックス コアには、この 4x4 ブロックをデコードし、テクセル値をシェーダー/テクスチャ コンバイナーなどに提供する専用回路があります。

PNG 圧縮はフラット ビットレートでは機能せず、特定の値を取得するのがより複雑になります。単一のカラー値を取得するために複数の場所からメモリにアクセスする必要があり、テクスチャの読み取りが発生するたびに、はるかに多くのメモリと処理が必要になります。そのため、ネイティブ テクスチャ フォーマットとして使用するのには適していません。これが、グラフィック ハードウェアが使用する前にテクスチャを解凍する必要がある理由です。これにより、圧縮解除を必要としない PVRTC と比較して帯域幅の使用が増加します。

そのため、オフライン ストレージ (ディスク上のアプリケーションのサイズ) の場合、PNG は PVRTC よりも小さく、完全に圧縮されていないものよりも小さくなります。実行時のメモリ フットプリントとパフォーマンスについては、PVRTC は PNG よりも小さく高速です。PNG は圧縮解除する必要があるため、圧縮されていないテクスチャと同じくらい大きくて低速です。ディスク アクセスの初期化時に PNG を使用すると、ある程度の利点が得られる可能性がありますが、解凍の時間が失われます。

PVRTC のストレージ フットプリントを減らしたい場合は、テクスチャ ファイルで zip スタイルの圧縮を試し、ディスクからロードするときにこれらを展開することができます。

于 2009-11-23T13:09:11.077 に答える
2

PVRTC (PowerVR Texture Compression) は、テクスチャ圧縮形式です。PowerVR を使用するデバイス (iPhone などのほとんどのハイエンド携帯電話や、iPod などのその他の ARM ベースのガジェットなど) では、描画がハードウェア アクセラレーションされるため、描画が非常に高速です。また、画像は圧縮された形式で表現され、描画ごとにデコードされるため、メモリの使用量が大幅に少なくなりますが、PNG は描画する前に解凍する必要があります。

PNGは可逆圧縮です。

PVRTC は非可逆圧縮で、画像に近似します。設計基準がまったく異なります。

PVRTC は、あらゆる種類のアートワークを (概算によって) '圧縮' し、写真画像を含むテクセルあたりの固定ビット数を与えます。

PNG は画像を近似しない​​ため、画像に冗長性がほとんど含まれていない場合、ほとんど圧縮されません。一方、イラストなどの均一な画像は、PNG で最もよく圧縮されます。

そのリンゴとオレンジ。

于 2009-11-06T09:56:34.657 に答える
0

私はウィルに同意します。質問には意味がありません。質問を3回読みましたが、Sankarが何を知りたいのかまだわかりません。それはただの不満であり、疑問の余地はありません。

私がアドバイスできる唯一のことは、PVRTCを使用する場合は使用しないでください。パフォーマンスが向上し、VRAMが節約されますが、この場合は役に立ちません。必要なのはゲームのボリュームを減らすことだけであり、パフォーマンスと品質の間のトレードオフについての考慮事項ではないためです。

于 2010-02-04T22:27:40.213 に答える
0

複数のフレームを 1 つの画像に並べて配置し、テクスチャのサブ長方形をブリットします。これにより、メモリ消費量が大幅に削減されます。

たとえば、画像が 64x64 の場合、256 個の画像を 1024x1024 のテクスチャに 16x16 の配置で配置できます。

少しの努力で、各画像があるテクスチャの長方形のコードを追跡する限り、画像はすべて同じサイズである必要はありません。

これは、iPhone ゲーム開発者が行う方法です。

于 2009-11-09T06:53:29.227 に答える