次の方法で共有


球状環境マッピング

球状環境マッピング

球状環境マップ、または球状マップは、オブジェクトの周りのシーンの画像またはオブジェクトの周りのライティング エフェクトを含む特殊なテクスチャである。キューブ環境マップとは異なり、球状マップはオブジェクトの周囲の様子を直接表現するわけではない。「環境マッピング」のトピックのティーポットの画像は、球状マッピングで実現できる反射エフェクトを示している。

球状マップは、オブジェクトの周囲の 360°の視界を、魚眼レンズで見たように 2D 表現したものである。次の図は、Sphere Map サンプルで使う球状マップを示している。

建物の内側の球状マップ

球状環境マップのテクスチャ座標

環境マッピングの対象となる各頂点に指定するテクスチャ座標は、テクスチャを湾曲したサーフェイスに映るゆがみの関数として処理する必要がある。アプリケーションでは、各頂点のテクスチャ座標を計算して、目的のエフェクトを実現しなければならない。テクスチャ座標を簡単かつ効果的に生成する方法は、頂点法線を入力として使うことである。方法には何種類かあるが、次の公式は、球状マップによる環境マッピングを実行するアプリケーションで共通の公式である。

球状マップのテクスチャ座標を計算するための公式

この公式では、u および v は計算するテクスチャ座標、NX および NY はカメラ空間の頂点法線の x および y 要素である。この公式は単純で有効である。法線に正方向の x 要素がある場合、法線は右方向を指しており、u 座標はテクスチャを適切に処理できるように調整される。v 座標も同様、正方向の y は、法線が上方向を指していることを示す。各成分の負の値に対しては、この反対が成り立つ。

法線が直接カメラを指している場合、結果の座標にはゆがみが生じない。両方の座標に +0.5 バイアスを加えると、ゆがみのないポイントは球状マップの中央に配置され、(0, 0, z) の頂点法線によってこのポイントが処理される。この公式では、法線の z 要素は考慮されない。ただし、この公式を使うアプリケーションでは、正方向の z 要素のある法線を持つ頂点を省略することで計算を最適化できる。フラット シェーディングを適用したオブジェクトに対してこれが有効なのは、カメラ空間で法線がカメラから離れる方向 (z の正方向) を指している場合、オブジェクトのレンダリング時に頂点がカリングされるからである。グロー シェーディングを適用したオブジェクトの場合、カメラから離れる方向 (x の正方向) に法線を向けて、頂点を含む三角形を表示したままにすることができる。この頂点の u および v を計算しないと、その面がそのまま使われて予期しない動作が生じる可能性がある。

球状環境マップの適用

環境マップをオブジェクトに適用するときは、その他のテクスチャの場合と同様、IDirect3DDevice9::SetTexture メソッドで適切なテクスチャ ステージにテクスチャを設定する。第 1 引数には、目的のテクスチャ ステージのインデックスを設定し、第 2 引数には、環境マップのキューブ マップ テクスチャの作成時に返された IDirect3DDevice9 インターフェイスのアドレスを設定する。必要に応じて色およびアルファ ブレンディング処理と引数を設定して、目的のテクスチャ ブレンディング エフェクトを得ることができる。