環境マッピング(かんきょうマッピング、英: environment mapping)とは、3次元コンピュータグラフィックスにおけるテクスチャマッピングの手法の1つで、3次元形状の表面に擬似的な周囲環境の映り込みを再現する手法である。レイトレーシング法を使わずとも、ローカルイルミネーション計算のみで擬似的な鏡面反射や金属光沢、屈折表現ができる点が特徴である。
主に環境マッピングには反射マッピング(英: reflection mapping)と屈折マッピング(英: refraction mapping)があるが、単に環境マッピングと言った場合、多くの場面で反射マッピングのことを指す。なお、この項で言及する反射マッピングとは、反射率のテクスチャマッピングとは異なることに留意されたい。
環境マッピングは1970年代にジム・ブリンとマーティン・ニューウェル(英語版)によって考案された。 正確に周囲環境の映り込みを再現するには、レイトレーシング法によって反射を描写するのが理想であるが、レイトレーシング法は画素毎の膨大な追跡計算が求められる。また3次元形状で再現された周囲環境ではなく、実写映像など別途制作された周囲環境の映り込みが求められる場合もある。 そこでより簡易な手法として、形状に映り込むであろう周囲環境(全周囲の風景)の画像(環境マップと呼ぶ)をあらかじめ用意し、形状に対してあたかも映り込んでいるかのようにテクスチャマッピングするのが、環境マッピングである。通常、環境マップは単一視点からの1枚しか用意されないので、映り込む風景は正確ではなく、擬似的なものとなる。キューブマップを用いた反射マッピングの概念図。 反射マッピングは、形状表面の法線ベクトルを軸にして視線ベクトルの反射ベクトルを算出し、これと対応する環境マップのテクセルを当該表面にマッピングすることで、擬似的な映り込みを再現する。屈折マッピングは、反射ベクトルの代わりに、別途指定された屈折率に応じて屈折ベクトルを算出するほかは反射マッピングと同じであるが、多くの場合、当該表面の1回分しか屈折計算しないため、いっそう擬似的な表現になる。 これらはUVマッピングでのUV座標をレンダリング毎に変動させることにおよそ相当するため、一般的なUVマッピング対応のレンダリングエンジンを流用して実装できる。現在普及しているほとんどのパーソナルコンピュータやゲーム機のGPUではプログラマブルシェーダーがサポートされているため、リアルタイムの動的テクスチャマッピングが可能であり、同様の手法でリアルタイムの環境マッピングを再現できる。環境マッピングは、Direct3D 6.0やOpenGLといった3DCG APIでも固定機能としてサポートされている。家庭用テレビゲーム機では第5世代ゲーム機頃から対応が始まり、擬似的ではあるが1997年発売の『グランツーリスモ』などで先行的な実装例が見られる。 環境マップは全周囲の風景を2次元の画像に収める為、特殊な3次元ベクトル/2次元テクセルの対応を持つ。主な環境マップの形式には、次のようなものがある。上:キューブマップの例。
概要
環境マップの形式
左下:黒点位置に視点。
右下:仮想の立方体。
キューブマップ(英: cube map)
対象のオブジェクトの6方向(x+,x-,y+,y-,z+,z-)のイメージやライティング効果をテクスチャとしてオブジェクトに適用する方法である。オブジェクトより大きい立方体を配置し、6つの内壁に映ったオブジェクトの周囲の空間をテクスチャとして利用する。
球状マップ(英: sphere map、スフィアマップ)
オブジェクトの周囲の空間やライティング効果を表現した特殊テクスチャである。全周囲を1枚の2次元画像に表したものであり、理論的には視野角360度の魚眼レンズで風景を撮影したのと同じであり、実写撮影にはしばしば球面鏡が用いられる。
参考文献
ポール・デベヴェック(英語版
Mike Seymour (2012年7月24日). “Founders Series: industry legend Jim Blinn”. fxguide. 2019年10月27日閲覧。
関連項目
テクスチャマッピング
ジェームス・F・ブリン
レイトレーシング
表
話
編
歴
テクスチャマッピング
テクスチャマッピング
テクスチャフィルタリング
マッピング
透過マッピング
ディスプレイスメントマッピング(英語版)
バンプマッピング
法線マッピング
高さマップ(英語版)
視差マッピング
レリーフマッピング(英語版)
環境マッピング
プロシージャルテクスチャ(英語版)
フィルタリング
ミップマップ
最近傍補間(英語版)
バイリニアフィルタリング(英語版)
トライリニアフィルタリング(英語版)
異方性フィルタリング
.mw-parser-output .asbox{position:relative;overflow:hidden}.mw-parser-output .asbox table{background:transparent}.mw-parser-output .asbox p{margin:0}.mw-parser-output .asbox p+p{margin-top:0.25em}.mw-parser-output .asbox{font-size:90%}.mw-parser-output .asbox-note{font-size:90%}.mw-parser-output .asbox .navbar{position:absolute;top:-0.90em;right:1em;display:none}