最近、私のゲーム エンジンに PowerVR (PVR) のサポートが追加されました。Google とウィキペディアで検索したところ、PVR の定義しかわかりませんが、何に使用されるのか、その利点と欠点は何なのかわかりません。Android 用のゲームを開発していますが、PNG と PVR のどちらを使用すればよいですか?
1 に答える
(PowerVR は、Imagination Technologies Ltd. のグラフィックス アクセラレーション テクノロジを示すブランド名です。PVR は、PowerVR Insider SDK で使用されるテクスチャ コンテナー フォーマットです。PVRTC は、PowerVR のテクスチャ圧縮方式です。違ったらごめんなさい)
PVRTC は、PowerVR グラフィックス アクセラレータで使用するためのランタイム テクスチャ圧縮形式です (多くの Android プラットフォームにはこれらのいずれかがあります)。圧縮されていない 32 ビット テクスチャと比較して、PVRTC は 4 ビット/ピクセルまたは 2 ビット/ピクセル モードで 8 倍または 16 倍の圧縮を提供します。これはランタイム テクスチャ圧縮スキームであるため、グラフィックス コア自体の外側のどの段階でも解凍する必要がないため (そこにはそのビット専用の回路があります)、データはディスク上で小さくなり、GL にアップロードするには小さくなり、メモリとレンダリング時の使用量が少なくなり、ほぼすべての点でより良く、より速くなりました。メモリ帯域幅が貴重で、グラフィックスのパフォーマンスのボトルネックになることが多いモバイル システムでは、フレームレートに大きな違いが生じる可能性があります (また、消費電力 - メモリ アクセスが電力を消費します)。
欠点:
- PVRTC は、ディスク上の PNG よりも大きくなる傾向があります。PVRTC データは (たとえば)、ディスク ストレージに適しています。
- PVRTC は非可逆圧縮です。ソース イメージと比較すると、PVRTC テクスチャにアーティファクトが見られることがあります。PNGはロスレスなので問題はありません
- PVRTC は (現時点では) PowerVR 以外のグラフィックス アクセラレーションでは使用できません。他のプラットフォームの DXT/S3TC (より大きな) または ETC (アルファなし) 圧縮を参照してください。
- 正方形の 2 の累乗次元のテクスチャのみが機能する可能性があります (例: 32x32、512x512 など)。
- 圧縮はかなり遅くなる可能性があります
PNG はランタイム形式ではないため、圧縮されていない画像よりも PNG 圧縮の方が有利な唯一の場所は、ディスク上のストレージ (またはネットワーク経由での送信など) です。PNG 画像データは、解凍する前に CPU で解凍する必要があります。 GL に渡されるか、何らかの方法で描画されます。つまり、PNG は、これらのプラットフォームでテクスチャを取得できるのと同じくらい遅くなります。
PNG はロスレスで、アルファ チャネルもサポートします。
そう...
最高のパフォーマンスを得るには、できる場合は PVRTC を使用し、できない場合はテクスチャの他のバージョンを使用します。たとえば、圧縮アーティファクトが明らかすぎる場合や、実行しているプラットフォームがサポートしていない場合などです。
参考文献:
- http://imgtec.com/powervr/insider/powervr-faq.asp
- http://imgtec.com/powervr/insider/docs/PVRTextureCompression.pdf
- http://imgtec.com/forum/default.asp
PVRTC テクスチャを作成するには:
それが役立つことを願っています...