2BPPからまともな色をどのように取得しますか?


11

私はPowerVRテクスチャを調査しており、明らかにピクセルあたり2ビットのいくつかのテクスチャに遭遇しました。これは率直に言って、私の心を揺さぶる。ピクセルあたりのpiあたり4つの可能な状態しかない場合、どのようにして色を半分ほど保存できますか?私は、そのような偉業の背後にある圧縮について語るあらゆるリソースが欲しいです。ありがとう!


JPGを使用すると、1BPP未満でまともな色を得ることができます:)
Ivan Kuckir

回答:


13

このペーパーで紹介したPVRTC 2BPPエンコーディングは、画像を8x4テクセルブロックに分割し、32ブロックごとに2つのRGBカラーのみが格納されるように各ブロックを圧縮します。

32個のテクセルのいずれも独自の色を格納しません。各テクセルは、8x4テクセルブロックの2つのRGB色をブレンドする方法に関する情報のみを格納します。

ソース画像に虹が32色の8x4テクセルブロックが含まれている場合、PVRTC 2BPPでは各8x4テクセルブロックに2つのRGBカラーしかブレンドできないため、PVRTC 2BPP圧縮は品質を維持するのに非常に不十分です。


魅力的です!どうもありがとうございました。残念ながら、リンクした用紙の読み込みに多くの問題を抱えています。多分それはAmazonのEC2でホストされていますか?;)
東寺

6

テクスチャ圧縮はピクセルを圧縮しません。ピクセルのブロックを圧縮します。個々のピクセルが参照されると、GPUはそのピクセルを表すブロックを計算します。次に、ブロック全体を処理して、そのピクセルの色を取得します。

RGBテクスチャでブロックサイズが4x4ピクセルであると仮定します。非圧縮の場合、各ブロック4x4x3 = 48はテクスチャメモリのバイトを消費します。
これで、圧縮アルゴリズムは各チャネル(RGB)の平均を計算し、それをブロック(3バイト)とともに保存します。次に、各ピクセルに2ビットを指定して、ピクセルが元の色に近づくように平均を調整します。それは別の4x4x2x3/8 = 12バイトです。
この新しく開発されたコンプレッサーによって使用される合計バイトは、ブロックあたり15バイト、圧縮率は31.25%です。

私の神秘的なコンプレッサーは7.5 bppを使用します。これは2 bpp pvrtcが達成できるほど良くはありませんが、2 bbpがどのように達成されるかについておおまかに考えています。

アップデート:
私はちょうど見PVRTCのためのWikipediaのページ。pvrtcは従来のブロックベースの圧縮を使用していないようです。 ここでは、ブロックベースの圧縮の仕組みとpvrtcの違いについて説明した論文を紹介します。特に注意してください:ブロックベースのフィルターは4bpp(アルファなし)を使用してまともな画像を生成できますが、nvrtcは2bppを使用できます。


1

@Toji、論文が掲載されているサイトは少し気まぐれですが、今朝はうまくいきました。失敗した場合、ACM / SIGGRAPHへのアクセス権があれば、ここでホストされます。不思議なことに、それ IMG / PowerVR開発者のWebサイト(無料登録)にもありましたが、適切なセクションが見つからないようです。:-(

[更新]これはまだIMGサイトにあります [/更新]

@bmcnet:PVRTCは、テクスチャをETCやS3TCなどのブロックに分割しません。FWIW、私はブロックベースのテクスチャを試してみましたが、十分なデータを自己完結型ブロックにパックし、それでも希望どおりの結果を得る方法を見つけることができませんでした。代わりに、これは「グローバルな」テクスチャ圧縮システムに少し似ています。2つの低解像度画像があり、ターゲット解像度に双線形的に拡大され、これらをテクセルごとに一緒に混合します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.