圧縮テクスチャ リソース (Direct3D 9)

テクスチャ マップとは、視覚的な詳細を追加するために 3 次元形状で描画された、デジタル画像です。 テクスチャ マップは、ラスター化時に 3D の形状にマッピングされます。このプロセスではシステム バスとメモリの両方を大量に消費することがあります。 テクスチャによって消費されるメモリ量を減らすために、Direct3D ではテクスチャ サーフェスの圧縮がサポートされています。 Direct3D デバイスの中には、圧縮テクスチャ サーフェスを標準でサポートするものもあります。 このようなデバイスでは、圧縮したサーフェスを作成し、データをロードすると、他のテクスチャ サーフェスと同様に Direct3D でそのサーフェスを使用することができます。 テクスチャが 3D オブジェクトにマッピングされるときに、Direct3D によって圧縮が解除されます。

ストレージの効率とテクスチャの圧縮

テクスチャ圧縮形式はすべて 2 の累乗です。 これはテクスチャが必ず正方形であることを意味するのではなく、x と y の両方が 2 の累乗であることを意味します。 たとえば、元のテクスチャが 512 × 128 バイトであった場合、次のミップマップ処理では 256 × 64 というように、1 レベルごとに 2 の累乗ずつ小さくなります。 さらにレベルを下げて、テクスチャを 16 × 2 および 8 × 1 までフィルタリングすると、圧縮ブロックは常に 4 x 4 のテクセル ブロックであるため、無駄なビットが生じます。 ブロックの未使用部分はパディングされます。 低いレベルでは無駄なビットが出ますが、全体的なゲインは重要です。 理論的に最悪のケースは、2K × 1 (2 の 0 乗) のテクスチャです。 この場合、1 ブロックにつき 1 つのピクセル行しかエンコードされず、ブロックの残りの部分は使用されません。

1 つのテクスチャ内で書式を混在する

個々のテクスチャはすべて、16 テクセルのグループごとにデータを 64 ビットまたは 128 ビットで格納するように指定する必要があることに注意してください。 テクスチャに 64 ビット ブロック (つまり DXT1 の形式) が使用されている場合は、ブロック単位で不透明なアルファ形式と 1 ビットアルファ形式を同じテクスチャ内に混在させる可能性があります。 つまり、color_0 と color_1 の符号なし整数の絶対値の比較が、16 テクセルのブロックごとに独立して実行されます。

128 ビット ブロックを使用したら、テクスチャ全体に対してアルファ チャネルを明示的 (形式 DXT2 および DXT3) または補間モード (DXT4 と DXT5 の形式) で指定する必要があります。 色と同様に、補間モード (DXT4 と DXT5 の形式) が選択されている場合は、8 つの補間アルファまたは 6 つの補間アルファ モードをブロック単位で使用できます。 ここでも、alpha_0 と alpha_1 の絶対値の比較がブロックごとに独立して実行されます。

Direct3D では、3D モデルのテクスチャに使用する、サーフェスを圧縮するためのサービスが用意されています。 ここでは、圧縮テクスチャ サーフェスのデータの作成および操作について説明します。

情報は、次のトピックに含まれています。

Direct3D テクスチャ