球面環境マッピング (Direct3D 9)
球面環境マップ (球マップ) は、オブジェクトを囲むシーンのイメージ、またはオブジェクトの周囲の照明効果を含む特殊なテクスチャです。 立方環境マップとは異なり、球マップはオブジェクトの周囲を直接表すわけではありません。 環境マッピング (Direct3D 9) トピックのティーポット イメージは、球マッピングで実現できる反射効果を示しています。 球体マップは、次の図に示すように、魚眼レンズを通して撮影されたかのように、オブジェクトの周囲のシーンの完全な 360 度ビューを 2D で表したものです。
球面環境マップのテクスチャ座標
環境マッピングを受け取る各頂点に対して指定するテクスチャ座標は、サーフェスの曲率によって作成される反射歪みの関数としてテクスチャに対応する必要があります。 アプリケーションでは、目的の効果を実現するために、各頂点に対してこれらのテクスチャ座標を計算する必要があります。 テクスチャ座標を生成する簡単で効果的な方法の 1 つは、頂点法線を入力として使用します。 いくつかの方法がありますが、次の式は、球マップを使用して環境マッピングを実行するアプリケーションの間で一般的です。
これらの数式では、you と v は計算されるテクスチャ座標であり、NX と NY はカメラ空間頂点法線の x と y のコンポーネントです。 数式は単純ですが、効果的です。 法線に正の x 成分がある場合、法線は右を指し、u 座標はテクスチャに適切に対応するように調整されます。 同様に、v 座標の場合: 正の y は、法線が上を指していることを示します。 逆は、各コンポーネントの負の値に当てはまります。
法線がカメラを直接指している場合、結果の座標は歪みを受け取らなくなります。 両方の座標に対する +0.5 バイアスは、球マップの中心にゼロディストーションの点を配置し、頂点法線 (0, 0, z) がこの点に対応します。 この数式は法線の z 成分を考慮していませんが、数式を使用するアプリケーションでは、正の z 要素を持つ法線を持つ頂点をスキップすることで計算を最適化できます。 これは、カメラ空間で法線がカメラから離れている場合 (正の z)、オブジェクトのレンダリング時に頂点がカリングされるため、フラット シェーディング されたオブジェクトに対して機能します。 Gouraud シェーディング されたオブジェクトの場合、法線はカメラから離れて (正の x)、頂点を含む三角形を引き続き表示できます。 この頂点に対してと v を計算しないと、顔が引き続き使用され、予期しない動作が発生する可能性があります。
球面環境マップの適用
IDirect3DDevice9::SetTexture メソッドを使用してテクスチャを適切なテクスチャ ステージに設定することで、他のテクスチャと同じ方法で環境マップをオブジェクトに適用します。 最初のパラメーターを目的のテクスチャ ステージのインデックスに設定し、環境マップのテクスチャを作成したときに返される IDirect3DDevice9 インターフェイスのアドレスに 2 番目のパラメーターを設定します。 必要に応じて、色とアルファブレンドの操作と引数を設定して、目的のテクスチャ ブレンド効果を実現できます。
関連トピック