テクスチャの折り返し

テクスチャの折り返しによって、Direct3D が各頂点に指定されたテクスチャ座標を使って、テクスチャが適用された多角形をラスタライズする際の基本的な方法が変更されます。 多角形をラスタライズするとき、システムは多角形の各頂点のテクスチャ座標の間を補間して、多角形の各ピクセルに使うテクセルを決定します。 通常、システムはテクスチャを 2D 平面として扱い、テクスチャ内の点 A から点 B までの最短経路を取ることによって新しいテクセルを補間します。点 A が u, v 位置 (0.8, 0.1) にあり、点 B が (0.1, 0.1) にある場合、補間の線は次の図のようになります。

2 点間の補間の線の図

この図では、A と B の間の最短距離がテクスチャのほぼ中央を通っています。 u または v のテクスチャ座標の折り返しを有効にした場合、Direct3D で u 方向および v 方向のテクスチャ座標間の最短経路を判定する方法が変わります。 定義では、テクスチャの折り返しによって 0.0 と 1.0 が同じ位置になると仮定され、ラスタライザーがテクスチャ座標間の最短経路を決定します。 これは理解が難しい部分です。次のように考えてみましょう。一方向のテクスチャの折り返しを有効にすると、システムは円柱の周囲に巻き付いているかのようにテクスチャを扱います。 たとえば、次の図について検討します。

円柱の周りに巻き付いたテクスチャと 2 つの点の図

この図は、u 方向の折り返しによって、テクスチャ座標の補間がどのように影響を受けるかを示しています。 折り返されていない通常のテクスチャの例と同じ点を使用すると、点 A と点 B 間の最短経路がテクスチャの中央を通っていないことがわかります。この場合は、0.0 と 1.0 が重なっている境界線を横切っています。 v 方向の折り返しも同様ですが、横置きになった円柱の周囲にテクスチャが巻き付けられます。 u 方向と v 方向両方の折り返しはさらに複雑です。 この場合は、円環面、つまりドーナツ状のテクスチャを想像してください。

テクスチャの折り返しを実際に使用した最も一般的なアプリケーションは、環境マッピングの実行です。 通常、環境マップでテクスチャ処理したオブジェクトは非常に反射しやすく、オブジェクトの周囲のミラー イメージがシーンに表示されます。 これを説明するために、4 つの壁に囲まれた部屋を考えてみましょう。壁にはそれぞれ R、G、B、Y という文字が描かれており、それぞれに対応する赤、緑、青、および黄色のカラーが塗られています。 このような単純な部屋の環境マップは、次の図のようになります。

赤、緑、青、黄の垂直方向ストライプの図

この部屋の天井が、完全に反射する、4 面から成る 1 本の柱で支えられているとします。 この柱に環境マップ テクスチャをマッピングするのは簡単ですが、文字とカラーが柱に反射しているように見せるのは容易ではありません。 次の図は、上部の頂点付近に該当するテクスチャ座標を記載した、柱のワイヤー フレームを示したものです。 折り返しがテクスチャのエッジを横切る継ぎ目は、点線で示しています。

二等分する点線が描かれた四角形の図

u 方向で折り返しが有効になっているので、テクスチャ処理した柱には、環境マップのカラーとシンボルが適切に表示されており、テクスチャの前面の継ぎ目では、ラスタライザーによって、テクスチャ座標間の最短経路が正しく選択されています。この場合、u 座標の 0.0 と 1.0 が重なっていることを前提としています。 テクスチャ処理した柱は、次の図のようになります。

赤、緑、青、および黄の 4 つの領域で構成された柱の図

テクスチャの折り返しが有効でない場合、ラスタライザーは期待される反射イメージの生成に必要な方向には補間しません。 u 座標 0.175 と 0.875 の間のテクセルはテクスチャの中心を通るため、柱の前面の領域には水平方向に圧縮されたテクセルが含まれます。 折り返しの効果は適用されていません。

テクスチャの折り返しを、類似する名前のテクスチャのアドレス指定モードと混同しないでください。 テクスチャの折り返しは、テクスチャのアドレス指定の前に行われます。 テクスチャの折り返しデータに、[0.0, 1.0] の範囲外のテクスチャ座標が含まれないようにしてください。このような座標が含まれている場合、定義されていない結果になります。 テクスチャの折り返しについて詳しくは、「テクスチャのアドレス指定モード」をご覧ください。

ディスプレースメント マップの折り返し

ディスプレースメント マップは、テセレーション エンジンによって補間されます。 テセレーション エンジンには折り返しモードを指定できないため、ディスプレースメント マップを使ってテクスチャの折り返しを行うことはできません。 アプリケーションは、強制的に補間を行う頂点を使って、任意の方向に折り返すことができます。 また、補間を単純な線形補間として行うように指定することもできます。

テクスチャ