法線マッピング

法線マッピング（ほうせんマッピング、）またはdot3バンプマッピングは、3次元コンピュータグラフィックスにおけるバンプマッピング的技法の一種。追加のポリゴンを使わずに詳細な見た目を実現する。法線マップとは一般に、より詳細なオブジェクトの法線ベクトルのX, Y, Z座標に対応したRGB画像である。この技法は低ポリゴンモデルに高密度なポリゴンモデルで生成した法線マップを使い、見た目を大幅に改善するために使用される。
歴史.
幾何学的詳細を高ポリゴンモデルから獲得するという考え方は、SIGGRAPH 1996 で発表された Krishnamurthy と Levoy の "Fitting Smooth Surfaces to Dense Polygon Meshes" で初めて示された。この論文では、NURBS上で変位マップを生成するためにこの技法を使っていた。1998年には、高ポリゴンメッシュから低ポリゴンメッシュへ法線マップの形で詳細を転写するという考え方の2つの論文が登場した。このうちCohen他の論文は、制限付きの単純化アルゴリズムを使い、単純化する過程を監視して、法線マップを単純化されたメッシュにマッピングする方法を決定する。これに対してCignoni他の論文では、高ポリゴンメッシュと低ポリゴンメッシュを分離して考え、どのような方法で低ポリゴンメッシュを生成しても高ポリゴンメッシュの詳細を再現できるような単純なアルゴリズムを提案した。この後者の方式に若干の改良を加え、今も多くのツールで使っている。
動作原理.
ある表面のランバート反射（散乱）を計算するには、シェーディングポイントから光源に向かう単位ベクトルとその表面の法線ベクトルのドット積を計算する。これがその表面の点における光の強さとなる。球面のポリゴンモデルを考えたとき、表面の形状は近似でしかない。モデルを3チャネルビットマップ画像に対応させると、より詳細な法線ベクトル情報を符号化できる。つまり、ビットマップの各チャネルをそれぞれ別の次元（X, Y, Z）に対応させる（そのまま表示すると奇妙な色合いの画像だが、RGB値がXYZ値に対応していて、それぞれのピクセルでの法線ベクトルを示している）。これらの空間の次元は、オブジェクト-空間法線マップの座標系に対応するか、または正接空間法線マップの場合は、（テクスチャ座標における位置の導関数に基づいて）滑らかに変化する座標系に対応する。これはモデルの表面をより詳細化でき、特に高度な照明技法を組み合わせることで効果が増大する。
ゲームにおける法線マッピング.
実時間の法線マップのレンダリングはノースカロライナ大学チャペルヒル校で開発した並列レンダリングマシン PixelFlow で世界で初めて実現した。その後SGIのワークステーションでも、マルチパス・レンダリングとフレームバッファ操作で可能となった。さらにPCではパレット化テクスチャと呼ばれる技法を使って可能となった。その後PCやゲーム機にもプログラマブルシェーダーが搭載されるようになり、2003年後半ごろからビデオゲームで法線マッピングが普通に使えるようになり、オープンソースのゲームにも広がっていった。リアルタイムのレンダリングで法線マッピングがよく使われるのは、同様の効果が得られる他の技法に比べて処理性能が低くてもよいためである。そのような効率が可能となっているのは、distance-indexed detail scaling と呼ばれる技法によるところが大きい。これは、視点から遠い表面ほど光源のシミュレーションをあまり厳密にしなくて済むため、遠いオブジェクトほど法線マップの詳細度を低減させるものである（ミップマップ）。
基本的な法線マッピングは、パレット化テクスチャをサポートしていれば、どんなハードウェアでも実装できる。法線マッピング専用ハードウェアを備えた最初のゲーム機はセガのドリームキャストだった。しかし実際に市販されたゲームで法線マッピングを多用したのはマイクロソフトのXboxが最初である。Xboxは世界で最初にプログラマブルシェーダーを搭載したコンシューマーゲーム機であった。同時代のゲーム機、PlayStation 2のGPUは法線マッピングをサポートしていなかった。Xbox 360とPlayStation 3のゲームは法線マッピングを多用しており、視差マッピングの実装も始まっている。
バンプマップに比べて法線マップを手作業で製作するのは困難であるため、通常はマッピング対象となるローポリゴンモデルを基に、ZBrushなどの3Dスカルプトソフトで細部を作りこみ、その情報を法線マップに変換して適用する手法が用いられる。