次の方法で共有


テクスチャの概要

テクスチャ リソースはテクセルを格納するデータ構造であり、これは読み取りまたは書き込みが可能なテクスチャの最小単位です。 テクスチャがシェーダーによって読み取られるとき、テクスチャ サンプラーでフィルター処理できます。

テクスチャ リソースは、テクセルを格納するように設計されたデータの構造化されたコレクションです。 テクセルは、パイプラインによって読み取りまたは書き込みが可能なテクスチャの最小単位を表します。 バッファーとは異なり、テクスチャはシェーダー ユニットによって読み取られるテクスチャ サンプラーによってフィルター処理できます。 テクスチャの種類は、テクスチャのフィルター処理方法に影響します。 各テクセルには 1 から 4 個のコンポーネントが含まれています。このコンポーネントは、DXGI_FORMAT列挙体によって定義された DXGI 形式のいずれかで配置されます。

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

テクスチャの種類

Direct3D では、いくつかの浮動小数点表現がサポートされています。 すべての浮動小数点計算は、IEEE 754 32 ビット単精度浮動小数点規則の定義済みのサブセットで動作します。

テクスチャにはいくつかの種類があります。1D、2D、3D、それぞれがミップマップの有無にかかわらず作成できます。 Direct3D では、テクスチャ配列とマルチサンプリングテクスチャもサポートされています。

1D テクスチャ

最も単純な形式の 1D テクスチャには、1 つのテクスチャ座標で対処できるテクスチャ データが含まれています。次の図に示すように、テクセルの配列として視覚化できます。

次の図は、1D テクスチャを示しています。

1D テクスチャ

各テクセルには、格納されているデータの形式に応じて、色成分の数が含まれています。 さらに複雑さを増して、次の図に示すように、ミップマップ レベルを持つ 1D テクスチャを作成できます。

の 1d テクスチャにはミップマップ レベル が含まれています

ミップマップ レベルは、上のレベルよりも大きさが 2 の冪乗で小さくなるテクスチャです。 最上位レベルには最も詳細が含まれています。後続の各レベルは小さくなります。 1D ミップマップの場合、最小レベルには 1 つのテクセルが含まれます。 さらに、MIP レベルは常に 1:1 まで下げられます。

奇数サイズのテクスチャに対してミップマップが生成されると、次の下位レベルは常に偶数サイズになります (最下位レベルが 1 に達した場合を除く)。 たとえば、この図には、5x1 テクスチャが示されており、その次の最下位レベルが 2x1 テクスチャであり、さらにその次(そして最後)のミップ レベルが 1x1 サイズのテクスチャであることが示されています。 レベルは LOD (詳細レベル) と呼ばれるインデックスによって識別されます。これは、カメラに近くないジオメトリをレンダリングするときに、小さなテクスチャにアクセスするために使用されます。

1D テクスチャ配列

Direct3D では、テクスチャの配列もサポートされています。 1D テクスチャの配列は、概念的には次の図のようになります。

1d テクスチャの配列

このテクスチャ配列には、3 つのテクスチャが含まれています。 3 つの各テクスチャのテクスチャ幅は 5 です (これは最初のレイヤーの要素の数です)。 各テクスチャには、3 つのレイヤー ミップマップも含まれています。

Direct3D のすべてのテクスチャ配列は、テクスチャの均一な配列です。これは、テクスチャ配列内のすべてのテクスチャのデータ形式とサイズが同じである必要があることを意味します (テクスチャの幅とミップマップ レベルの数を含む)。 各配列内のすべてのテクスチャのサイズが一致する限り、異なるサイズのテクスチャ配列を作成できます。

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

Texture2D リソースには、テクセルの 2D グリッドが含まれています。 各テクセルは、u、v ベクターでアドレス指定できます。 テクスチャ リソースであるため、ミップマップ レベルとサブリソースを含む場合があります。 完全に構成された 2D テクスチャ リソースは、次の図のようになります。

2D テクスチャ リソース

このテクスチャ リソースには、3 つのミップマップ レベルを持つ単一の 3 x 5 テクスチャが含まれています。

2D テクスチャ配列リソースは、2D テクスチャの均一な配列です。つまり、各テクスチャは同じデータ形式とディメンション (ミップマップ レベルを含む) を持ちます。 次の図に示すように、テクスチャに 2D データが含まれるようになった点を除いて、1D テクスチャ配列と同様のレイアウトになっています。

2D テクスチャの配列

このテクスチャ配列には、3 つのテクスチャが含まれています。各テクスチャは、2 つのミップマップ レベルを持つ 3 x 5 です。

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

テクスチャ キューブは、6 つのテクスチャを含む 2D テクスチャ配列です。1 つはキューブの各面に対して 1 つです。 完全に満たされたテクスチャ キューブは、次の図のように見えます。

テクスチャ キューブ を表す 2D テクスチャの配列を する

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

3D テクスチャ

3D テクスチャ リソース (ボリューム テクスチャとも呼ばれます) には、テクセルの 3D ボリュームが含まれています。 テクスチャ リソースであるため、ミップマップ レベルを含む場合があります。 完全に満たされた 3D テクスチャは、次の図のようになります。

3D テクスチャ リソース

3D テクスチャ ミップマップ スライスがレンダー ターゲット出力としてバインドされている場合 (レンダー ターゲット ビューを使用)、3D テクスチャは n 個のスライスを含む 2D テクスチャ配列と同じように動作します。 特定のレンダー スライスは、ジオメトリ シェーダー ステージから選択されます。

3D テクスチャ配列の概念はありません。したがって、3D テクスチャ サブリソースは単一のミップマップ レベルです。

Direct3D の座標系は、ピクセルとテクセルに対して定義されます。

ピクセル座標系

Direct3D のピクセル座標系は、次の図に示すように、左上隅にあるレンダー ターゲットの原点を定義します。 ピクセルの中心は整数位置から (0.5f,0.5f) 分ずれて配置されています。

direct3d 10 におけるピクセル座標系の

テクセル座標系

テクセル座標系は、次の図に示すように、テクスチャの左上隅に原点があります。 これにより、ピクセル座標系がテクセル座標系に揃えられるので、画面に配置されたテクスチャのレンダリングが簡単になります。

テクセル座標系 の

テクスチャ座標は、正規化された数値またはスケーリングされた数値で表されます。各テクスチャ座標は、次のように特定のテクセルにマップされます。

正規化された座標の場合:

  • ポイント サンプリング: テクセル # = floor(U * Width)
  • 線形サンプリング: 左テクセル番号 = floor(U * 幅), 右テクセル番号 = 左テクセル番号 + 1

スケーリングされた座標の場合:

  • ポイント サンプリング: テクセル # = フロア(U)
  • 線形サンプリング: 左テクセル # = floor(U - 0.5)、右テクセル # = 左テクセル # + 1

ここで、幅はテクスチャの幅 (テクセル単位) です。

テクスチャアドレスラッピングは、テクセルの位置が計算された後に発生します。

テクスチャ