DXTC

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内, 検索

DXTC(時々S3 Texture Compression(S3TC)ないしDXTnと呼ばれる)は、元々S3社によって開発された画像圧縮アルゴリズム技術である(US Patent #5,956,431)。この技術はSavage 3Dグラフィックスアクセラレータで用いられている。JPEGのような既存の画像圧縮アルゴリズムとは違い、DXTCは(VQのやり方に似た)単純なメモリアクセスと対になった固定レートデータ圧縮を行う。これは3Dコンピュータグラフィックスをハードウェアで支援する際、テクスチャを圧縮するのに適している。この技術は、MicrosoftDirectX 6.0に含まれると、ハードウェアやソフトウェアメーカーに広く採用されるようになった。S3社はもはやグラフィックスアクセラレータ市場において、リーディングカンパニーではないが、例えばコンソール用に使われているDXTC技術のライセンス料でいまだ生き長らえている。

目次

[編集] コーデック

DXTCアルゴリズムには5つのバリエーションがある。これらはDXT1からDXT5まであり、それぞれのフォーマットに対してFourCCコードがMicrosoftによって割り当てられている。これらはそれぞれ特定の種類のイメージデータ用に設計されている。画像はすべてのフォーマットにおいて、64ビットないし128ビットに量子化された4×4ブロックに変換され、32ビットのRGBA入力データは8:1ないし4:1に圧縮される。DXTCは非可逆圧縮アルゴリズムであるため、画像品質は落ちるが、リアルな画像を表示するには、圧縮された画像データでも十分である。手書きのアニメチックな画像には画像データと法線マップデータのいずれも圧縮が効き辛いが、その両方は目に見える物体によく使われている。ATIの3Dc圧縮アルゴリズムは、DXTCが持つ法線マップについての欠点を克服するように設計された、DXT5の変種である。

現在ある多くの画像圧縮アルゴリズムのように、DXTCはただ画像を解凍するのに使われる方法を指定するのみであって、特定の用途に合った圧縮アルゴリズムの設計を許す実装になっているからである。初期の圧縮ルーチンは最適化されていなかった。それはどんどん改善されたが、最初DXTCは開発ベンダーに採用されなかった。NVIDIAGeForceからGeForce 4までのGPUは16ビット補間のDXT1テクスチャ描画を使用していたので、色変化を伴うテクスチャを解凍する時に帯のようなノイズが載っていた。このため、テクスチャ圧縮に対してよくない印象を与えてしまったが、これはコーデック自身に基本的に関係しないものだった。

[編集] DXT1

DXT1は最も簡単なDXTCのバリエーションである。これは、16ピクセル入力から64bitデータを出力する。この出力は16bit RGB5:6:5 2色と4x4の2bitのルックアップテーブルからなる。

最初の色(c0)が2番目の色(c1)より数値的に大きいならば、他の2つの色はc_2 = {2 \over 3} c_0 + {1 \over 3} c_1c_3 = {1 \over 3} c_0 + {2 \over 3} c_1として計算される。このモードはAppleのビデオコーデックのc0モードによく似ている。

逆にc_0 \le c_1なら、c_2 = {1 \over 2} c_0 + {1 \over 2} c_1 になり、c3は透過色になる。

ルックアップテーブルはそれぞれのピクセル毎に色値が決定される。c_0だと0に相当し、c_3だと3が相当する。より高圧縮にするためにアルファデータは格納されない。

[編集] DXT2とDXT3

DXT2とDXT3は16ピクセル入力から128bitデータに変換する。これは64bitの色データに続いて64bitのアルファチャンネルデータ(ピクセルそれぞれについて4bit)からなり、DXT1と同様の方法でエンコードされる(ただし、アルファなしの4色バージョンが常に使われる)。DXT2では、色データにはあらかじめアルファデータが掛け合わせてあり、DXT3ではアルファデータが掛け合わされていない。普通、DXT2/3は透過色の領域と不透明色の領域の境界が鋭く変化する画像によく合う。

[編集] DXT4とDXT5

DXT4とDXT5は16ピクセル入力から128ビットデータに変換する。このデータには64bitの色データ(DXT2ないしDXT3と同じ方法でエンコードされたもの)に続いて、64bitのアルファチャンネルデータ(2つの8bitアルファ値と4x4の3bitルックアップテーブル)からなる。

\alpha_0 > \alpha_1であれば、6つの補間用アルファ値を以下の用に計算する。\alpha_2 = {{6\alpha_0 + 1\alpha_1} \over 7}, \alpha_3 = {{5\alpha_0 + 2\alpha_1} \over 7}, \alpha_4 = {{4\alpha_0 + 3\alpha_1} \over 7}, \alpha_5 = {{3\alpha_0 + 4\alpha_1} \over 7}, \alpha_6 = {{2\alpha_0 + 5\alpha_1} \over 7}, \alpha_7 = {{1\alpha_0 + 6\alpha_1} \over 7}.

逆に\alpha_0 \le \alpha_1であれば、4つの補間用アルファデータを\alpha_2 = {{4\alpha_0 + 1\alpha_1} \over 5}, \alpha_3 = {{3\alpha_0 + 2\alpha_1} \over 5}, \alpha_4 = {{2\alpha_0 + 3\alpha_1} \over 5}, \alpha_5 = {{1\alpha_0 + 4\alpha_1} \over 5}と計算する。残り2つは\alpha_6 = 0\alpha_7 = 255とする。ルックアップテーブルはそれぞれのピクセルのアルファ値に従って決定される。\alpha_0は0に割り当てられ、\alpha_7は7に割り当てられる。DXT4の色データはアルファ値がすでに掛け合わせてあり、DXT5の色データはそうではない。DXT4/5は補間アルファ色値を用いているので、DXT2/3よりアルファ値(透過具合)がだんだん変化していくものについては非常によい結果をもたらす。DXT5は最も柔軟な汎用圧縮アルゴリズムだと考えられる。

FOURCC 内容 Alpha premultiplied? 圧縮率 テクスチャタイプ
DXT1 不透明色 / 1-bit Alpha N/A 8:1 / 6:1 単純なアルファなし
DXT2 明示的なアルファ値 Yes 4:1 鋭く変化するアルファ値をもつ
DXT3 明示的なアルファ値 No 4:1 鋭く変化するアルファ値をもつ
DXT4 補間アルファ値 Yes 4:1 徐々に変化するアルファ値をもつ
DXT5 補間アルファ値 No 4:1 徐々に変化するアルファ値をもつ

[編集] 関連項目


この記事は英語版ウィキペディアにある同じ項目の記事15:20, 19 May 2007の版から翻訳された記事である。
個人用ツール
名前空間

変種
操作
案内
ヘルプ
ツールボックス
他の言語