圧縮テクスチャー リソース (Direct3D 9)
テクスチャー マップは、視覚的な詳細表現を追加するために 3D の形状の上に描画するデジタル イメージです。テクスチャー マップは、ラスター化時に 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 つのピクセル行しかエンコードされず、ブロックの残りの部分は使用されません。
単一テクスチャー内でのフォーマットの組み合わせ
個々のテクスチャーはすべて、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 モデルのテクスチャーに使用する、サーフェスを圧縮するためのサービスが用意されています。ここでは、圧縮テクスチャー サーフェスのデータの作成および操作について説明します。
説明するトピックは次のとおりです。