Microsoft DirectX 8.0 (Visual Basic) |
より複雑な透過性を示すテクスチャ マップの符号化には、2 とおりの方法がある。どちらの場合も、透過性を記述するブロックは既に記述されている 64 ビット ブロックより先に起こる。透過性はピクセル単位に 4 ビットの 4 × 4 ビットマップ (明示的な符号化)、またはそれ以下のビットのビットマップのどちらかであり、線形補間は色符号化で使用されることと類似する。
透過性ブロックと色ブロックの配置は、次の表に示すとおりである。
単語アドレス | 64 ビット ブロック |
---|---|
3:0 | 透過性ブロック |
7:4 | 既に記述された 64 ビット ブロック |
明示的なテクスチャ符号化 (DXT2 と DXT3 フォーマット) のために、透過性を記述するテクセルのアルファ成分は、テクセルごとに 4 ビットの 4 × 4 ビットマップで符号化される。これらの 4 ビットは、アルファ データで 4 つの最上位ビットをディザリングしたり、それらを単に使用するなど、さまざまな方法で達成できる。ただし、作成されると、あらゆる補間のフォームがないとそれだけでしか使用できない。
次の図は、64 ビットの透過性ブロックを示している。
注 Microsoft® Direct3D® の圧縮メソッドでは、4 つの最上位ビットを使用する。
次の表は、アルファ情報が各 16 ビット単語用に配置される方法について示している。
単語 0 用の配置は、次のとおりである。
ビット | アルファ |
---|---|
3:0 (LSB) | [0][0] |
7:4 | [0][1] |
11:8 | [0][2] |
15:12 (MSB) | [0][3] |
単語 1 用の配置は、次のとおりである。
ビット | アルファ |
---|---|
3:0 (LSB) | [1][0] |
7:4 | [1][1] |
11:8 | [1][2] |
15:12 (MSB) | [1][3] |
単語 2 用の配置は、次のとおりである。
ビット | アルファ |
---|---|
3:0 (LSB) | [2][0] |
7:4 | [2][1] |
11:8 | [2][2] |
15:12 (MSB) | [2][3] |
単語 3 用の配置は、次のとおりである。
ビット | アルファ |
---|---|
3:0 (LSB) | [3][0] |
7:4 | [3][1] |
11:8 | [3][2] |
15:12 (MSB) | [3][3] |
DXT2 と DXT3 の違いは、DXT2 フォーマットではカラー データはあらかじめアルファを掛けれられていることを前提としている。DXT3 フォーマットでは、カラー データはあらかじめアルファを掛けれられていないことを前提としている。これらの 2 つのフォーマットが必要とされる理由は、テクスチャが使用される大部分の場合、データをただ調べるだけではカラー値にアルファが掛かっているかどうかを判断できないからである。このような情報が実行時に必要なので、2 つの FOURCC コードを使用してこれらの場合を区別している。ただし、これらの 2 つのフォーマットに使用されるデータと補間のメソッドは同じである。
テクセルが透過型かどうかを判定するために DXT1 で使用される色比較は、このフォーマットでは使用されない。色比較なしでは、カラー データは常に 4 色モードとして処理されることを前提としている。つまり、DXT1 コードの先頭の if 文は次のようになる。
if ((color_0 > color_1) OR !DXT1) {
DXT4 および DXT5 フォーマットに対する透過性の符号は、色に使用される線形符号と類似する概念が基となる。2 つの 8 ビット アルファ値とピクセル単位に 3 ビットの 4 × 4 ビットマップは、ブロックの最初の 8 バイトに格納される。典型的なアルファ値は、中間アルファ値を補間するために使用される。追加情報は、2 つのアルファ値を格納する方法で利用できる。アルファ _0 がアルファ _1 より大きい場合、6 つの中間アルファ値が補間により作成される。また、4 つの中間アルファ値が指定されるアルファ極値間で補間される。2 つの追加の明示的なアルファ値は、0 (完全に透過型) と 255 (完全に不透明) となる。
アルファ ブロックのメモリ層を次に示す。
バイト | アルファ |
---|---|
0 | アルファ _0 |
1 | アルファ _1 |
2 | [0][2] (2 LSBs) , [0][1], [0][0] |
3 | [1][1] (1 LSB) , [1][0], [0][3], [0][2] (1 MSB) |
4 | [1][3], [1][2], [1][1] (2 MSBs) |
5 | [2][2] (2 LSBs) , [2][1], [2][0] |
6 | [3][1] (1 LSB) , [3][0], [2][3], [2][2] (1 MSB) |
7 | [3][3], [3][2], [3][1] (2 MSBs) |
DXT4 と DXT5 の違いは、DXT4 フォーマットではカラー データはあらかじめアルファを掛けれられていることを前提としている。DXT5 フォーマットでは、カラー データはあらかじめアルファを掛けれられていないことを前提としている。これらの 2 つのフォーマットが必要とされる理由は、テクスチャが使用される大部分の場合、データをただ調べるだけではカラー値にアルファが掛かっているかどうかを判断できないからである。このような情報が実行時に必要なので、2 つの FOURCC コードを使用してこれらの場合を区別している。ただし、これらの 2 つのフォーマットに使用されるデータと補間のメソッドは同じである。
テクセルが透過型かどうかを判定するために DXT1 で使用される色比較は、これらのフォーマットでは使用されない。色比較なしでは、カラー データは常に 4 色モードとして処理されることを前提としている。つまり、DXT1 コードの先頭の if 文は次のようになる。
if ((color_0 > color_1) OR !DXT1) {