Microsoft DirectX 8.0 (Visual Basic)

不透明と 1 ビット アルファ テクスチャ

テクスチャ フォーマット DXT1 は、不透明または単一の透過型色のあるテクスチャ用である。

各不透明または 1 ビット アルファ ブロックのために、2 つの 16 ビット値 (RGB 5:6:5 フォーマット) とピクセル単位の 2 ビットの 4 × 4 ビットマップが格納される。これは、16 テクセルに対して合計 64 ビット、つまり 4 ビット/テクセルとなる。ブロック ビットマップには、4 色間を選択するテクセルごとに 2 ビットがある。4 色のうち 2 色は、符号化されたデータに格納される。ほかの 2 色は、線形補間で格納される色から派生する。次の図は、このレイアウトを示している。

1 ビット アルファ フォーマットは、ブロックに格納される 16 ビットカラー値を比較することにより、不透明フォーマットと区別される。これらは、符号なしの整数として処理される。最初の色が次の色よりも大きい場合は、不透明テクセルだけが定義されていることを意味する。つまり、テクセルを表すのに 4 色が使用される。4 色の符号化には 2 つの派生した色があり、全 4 色は RGB 色空間に等しく配布される。このフォーマットは、RGB 5:6:5 フォーマットに類似している。ほかの点では、1 ビット アルファ透過性用にこれらの色は使用され、4 番目の色は透過型テクセルを表すために確保される。

3 つの色の符号化には 1 つの派生した色があり、4 番目の 2 ビット コードは透過型テクセル (アルファ情報) を含むために確保される。このフォーマットは、アルファ マスクを符号化するために使用される最後のビットのある RGBA 5:5:5:1 に類似している。

8 バイト ブロック用のメモリ層を次の表に示す。最初のインデックスが y 軸、2 番目のインデックスが x 軸に対応すると考える。たとえば、テクセル [1][2] は (x,y) = (2,1) でテクスチャ マップ ピクセルを参照する。

次の表は、8 バイト (64 ビット) ブロック用のメモリ レイアウトを示している。

単語アドレス 16 ビット単語
0 色 _0
1 色 _1
2 ビットマップ単語 _0
3 ビットマップ単語 _1

色 0 と色 1 (2 極値での色) の配置を次に示す。

ビット
04:00 (LSB) 青色成分
10:5 緑色成分
15:11 赤色成分

ビットマップ word_0 の配置

ビット テクセル
01:00 (LSB) テクセル [0][0]
3:2 テクセル [0][1]
5:4 テクセル [0][2]
7:6 テクセル [0][3]
9:8 テクセル [1][0]
11:10 テクセル [1][1]
13:12 テクセル [1][2]
15:14 (MSB) テクセル [1][3]

ビットマップ word_1 の配置

ビット テクセル
01:00 (LSB) テクセル [2][0]
3:2 テクセル [2][1]
5:4 テクセル [2][2]
7:6 テクセル [2][3]
9:8 テクセル [3][0]
11:10 テクセル [3][1]
13:12 テクセル [3][2]
15:14 (MSB) テクセル [3][3]

不透明色符号の例

不透明符号の例として、赤と黒が極値であると仮定する。赤は色 _0、黒は色 _1 とする。一様に傾度を互いに分割したフォームの補間した 4 色がある。4 × 4 ビットマップの値を決定するには、次に示す計算式を使用する。

00 ? color_0
01 ? color_1
10 ? 2/3 color_0 + 1/3 color_1
11 ? 1/3 color_0 + 2/3 color_1

このビットマップは、次のようになる。

このビットマップは次のような一連の色となる。

1 ビット アルファ符号の例

符号なし 16 ビット整数 (色 _0) が符号なし 16 ビット整数 (色 _1) より小さい場合、このフォーマットが選択される。このフォーマットは、青空を背景にした木の葉などに使用できる。いくつかのテクセルは、3 色の緑の影が葉に対して使用される間に透過型として記される。これら 2 色は極値に適合し、3 番目の色は補間した色となる。

そのような画像の例を次に示す。

上の図で、白色で示す画像では、テクセルは透過型として符号化されることに注意すること。また、透過型テクセルの RGBA コンポーネントは、ブレンディング前にゼロに設定するよう注意すること。

色と透過性に対するビットマップ符号は、次の計算式を使用して決定される。

00 ? color_0
01 ? color_1
10 ? 1/2 color_0 + 1/2 color_1
11   ?   Transparent

ビットマップは、次のようになる。