Direct3D 11 のテクスクチャーの概要

テクスチャー リソースは、テクセルの格納のために設計された、一連のデータを構造化したものです。テクセルは、パイプラインで読み取りまたは書き込みできるテクスチャーの最小単位を表します。バッファーと異なり、テクスチャーは、シェーダー ユニットによる読み取りの際に、テクスチャー サンプラーでフィルタリングが可能です。テクスチャーをフィルタリングする方法は、テクスチャーの種類に影響されます。各テクセルは 1 ~ 4 個の成分を持ちます。これらの成分は、DXGI_FORMAT 列挙型によって定義された DXGI_FORMAT フォーマットのどれか 1 つで配置されます。

テクスチャーは、既知のサイズを持つ構造化されたリソースとして作成されます。ただし、各テクスチャーは型付きでも型なしでも作成できます。型なしの場合は、パイプラインにバインドするときにビューを使用して型を完全に指定する必要があります。

テクスチャーのタイプ

テクスチャーのタイプには 1D、2D、および 3D があり、それぞれミップマップ付きまたはミップマップなしで作成できます。Direct3D 11 では、テクスチャー配列とマルチサンプル テクスチャーもサポートされています。

  • 1D テクスチャー
  • 1D テクスチャー配列
  • 2D テクスチャーと 2D テクスチャー配列
  • 3D テクスチャ

1D テクスチャー

1D は最も単純なフォーマットで、格納されているテクスチャー データは 1 つのテクスチャー座標に関連付けることができます。これを図で表現するとテクスチャーの配列になります。1D テクスチャーは ID3D11Texture1D インターフェイスで表現します。

図形 1.  1D テクスチャーの概念図

Ee422123.d3d10_1d_texture(ja-jp,VS.85).gif

各テクセルは、いくつかのカラー成分を持ち、その数は格納するデータのフォーマットによって決まります。複雑なものとしては、ミップマップ レベル付きの 1D テクスチャーを作成できます。これを図で表現すると次のようになります。

図形 2.  ミップマップ レベル付き 1D テクスチャーの概念図

Ee422123.d3d10_resource_texture1d(ja-jp,VS.85).png

ミップマップ レベルは、上のレベルより小さい 2 の累乗のテクスチャーです。最上位レベルは最も詳細で (大きく)、レベルが下がるほど小さくなります。1D ミップマップの最小レベルは 1 つのテクセルのみで構成されます。また、MIP レベルは必ず 1x1 まで減少します。奇数個のテクスチャーでミップマップを生成すると、次の下位レベルは必ず偶数個のテクスチャーになります (最下位レベルが 1 になったときを除く)。たとえば、図に示す 5x1 のテクスチャーの次の下位レベルは 2x1 テクスチャーで、その次の (最後の) ミップ レベルはサイズ 1x1 のテクスチャーです。各レベルは、詳細レベル (LOD) と呼ばれるインデックスで識別します。カメラにさほど近くないジオメトリをレンダリングする場合は、LOD を使用して小さいテクスチャーにアクセスします。

1D テクスチャー配列

Direct3D 11 では、テクスチャーの配列もサポートしています。1D テクスチャー配列も ID3D11Texture1D インターフェイスで表現します。1D テクスチャーの配列の 1 つを概念図で表現すると次のようになります。

図形 3.  1D テクスチャー配列の概念図

Ee422123.d3d10_resource_texture1darray(ja-jp,VS.85).png

このテクスチャー配列は 3 つのテクスチャーを含んでいます。3 つのテクスチャーは、それぞれ 5 のテクスチャー幅を持ちます (5 は最初のレイヤーにある要素の数)。また、各テクスチャーは 3 つのレイヤー ミップマップを含みます。

Direct3D のすべてのテクスチャー配列は、テクスチャーの同次配列です。つまり、同じテクスチャー配列にあるテクスチャーは、すべて同じデータ フォーマットとサイズ (テクスチャー幅とミップマップ レベルの数) を持つ必要があります。各配列内のテクスチャーのサイズがすべて一致している限り、異なるサイズのテクスチャー配列を作成することは可能です。

2D テクスチャーと 2D テクスチャー配列

Texture2D リソースは、テクセルの 2D グリッドを 1 つを含みます。各テクセルは u ベクトルと v ベクトルで指定します。これはテクスチャー リソースの一種であるため、ミップマップ レベルとサブリソースを含むことが可能です。2D テクスチャーは ID3D11Texture2D インターフェイスで表現します。すべての要素が設定された 2D テクスチャー リソースは次のようになります。

図形 4.  2D テクスチャー リソース

Ee422123.d3d10_resource_texture2d(ja-jp,VS.85).png

このテクスチャー リソースには、1 つの 3x5 テクスチャーと 3 つのミップマップ レベルがあります。

2D テクスチャー配列リソースは、2D テクスチャーの同次配列で、各テクスチャーは同じデータ フォーマットとサイズ (ミップマップ レベルを含む) を持ちます。2D テクスチャー配列も ID3D11Texture2D インターフェイスで表現します。この配列は、テクスチャーに 2D データが含まれることを除けば 1D テクスチャー配列と同様のレイアウトを持ち、次のようになります。

図形 5.  2D テクスチャー配列リソース

Ee422123.d3d10_resource_texture2darray(ja-jp,VS.85).png

このテクスチャー配列は 3 つのテクスチャーを含み、各テクスチャーは 3x5 テクスチャーで、2 つのミップマップ レベルを持ちます。

テクスチャー キューブとしての 2D テクスチャー配列の使用

テクスチャー キューブは、キューブの各面に 1 つずつ 6 つのテクスチャーを含む 2D テクスチャー配列です。すべての要素が設定されたテクスチャー キューブは次のようになります。

図形 6.  テクスチャー キューブを表現する 2D テクスチャーの配列

Ee422123.d3d10_resource_textureCube(ja-jp,VS.85).png

6 つのテクスチャーを含む 2D テクスチャー配列は、キューブ テクスチャー ビューでパイプラインにバインドした後、キューブ マップ組み込み関数を使ってシェーダー内から読み取ることができます。テクスチャー キューブは、テクスチャー キューブの中心を起点とする 3D ベクトルによってシェーダーで処理されます。

3D テクスチャ

3D テクスチャー リソースは、ボリューム テクスチャーとも呼ばれ、テクセルの 3D ボリュームで構成します。これはテクスチャー リソースの一種であるため、ミップマップ レベルを設定できます。3D テクスチャーは ID3D11Texture3D インターフェイスで表現します。すべての要素を設定した 3D テクスチャーは次のようになります。

図形 7.  3D テクスチャー リソース

Ee422123.d3d10_resource_texture3d(ja-jp,VS.85).png

3D テクスチャー ミップマップ スライスを (レンダー ターゲット ビューを使って) レンダー ターゲット出力としてバインドすると、3D テクスチャーは n スライスの 2D テクスチャーと同じように動作します。出力データのスカラー成分を SV_RenderTargetArrayIndex システム値として宣言すると、ジオメトリシェーダー ステージから特定のレンダリング スライスが選択されます。

3D テクスチャー配列という概念は存在しません。そのため、3D テクスチャーのサブリソースは単一のミップマップ レベルとなります。

関連項目

テクスチャー