
3D コンピュータグラフィックスでは、ノーマルマッピング、またはDot3 バンプマッピングは、凹凸のライティングを擬似的に表現するために使用されるテクスチャマッピング技術です。これはバンプマッピングの実装です。ポリゴン数を増やすことなく詳細を追加するために使用されます。[ 1 ]この技術の一般的な用途は、高ポリゴンモデルまたはハイトマップからノーマルマップを生成することで、低ポリゴンモデルの外観と詳細を大幅に向上させることです。
法線マップは通常、通常のRGB画像として保存され、RGB コンポーネントはそれぞれ表面法線の X、Y、Z 座標に対応します。
1978年、ジム・ブリンは、表面の法線を摂動させることで、幾何学的に平坦な面に詳細な外観を持たせる方法について説明しました。[ 2 ] 高ポリゴンモデルから幾何学的詳細を取得するというアイデアは、KrishnamurthyとLevoyによる「Fitting Smooth Surfaces to Dense Polygon Meshes」(Proc. SIGGRAPH 1996)[ 3 ]で紹介され、このアプローチはNURBS上の変位マップを作成するために使用されました。1998年には、高ポリゴンメッシュから低ポリゴンメッシュに法線マップを使用して詳細を転送するための重要なアイデアを扱った2つの論文が発表されました。Cohenらによる「Appearance Preserving Simplification」(SIGGRAPH 1998)[ 4 ]と、Cignoniらによる「A general method for preserving attribute values on simplified meshes」(IEEE Visualization '98)です。[ 5 ]前者は、変位ではなく表面法線をテクスチャに直接格納するというアイデアを導入しましたが、低詳細モデルを特定の制約付き簡略化アルゴリズムで生成する必要がありました。後者は、高ポリゴンメッシュと低ポリゴンメッシュを分離し、低詳細モデルの作成方法に依存しない方法で高詳細モデルの属性(色、テクスチャ座標、変位など)を再現できる、よりシンプルなアプローチを提示しました。法線をテクスチャに格納するという組み合わせと、より一般的な作成プロセスは、現在利用可能なツールのほとんどで依然として使用されています。
座標軸の向きは、法線マップがエンコードされた空間によって異なります。単純な実装では、法線をオブジェクト空間でエンコードし、赤、緑、青の各成分がX、Y、Z座標に直接対応するようにします。オブジェクト空間では、座標系は一定です。
しかし、オブジェクト空間の法線マップは、表面の向きが異なるため、複数のモデルで容易に再利用することはできません。カラーテクスチャマップは自由に再利用でき、法線マップは特定のテクスチャマップに対応する傾向があるため、アーティストにとっては法線マップも同様の特性を持つことが望ましいと言えます。

ノーマルマップの再利用は、マップを接空間にエンコードすることで可能になります。接空間は、モデル表面に接するベクトル空間です。座標系は、テクスチャ座標に対する位置の微分に基づいて、表面全体にわたって滑らかに変化します。

接空間法線マップは、表面から直接外側を向いているベクトルに対応する、支配的な紫色によって識別できます。計算を参照してください。
コンピュータグラフィックスにおいて、表面法線は主に照明の目的で使用されます。これは、鏡面反射と呼ばれる現象を模倣することによって実現されます。物体の可視像は、その表面から反射した光であるため、表面の各点から得られる光の情報は、その点における接空間上で計算することができます。

3次元空間における曲面の各接空間には、その接空間のすべてのベクトルに垂直な2つのベクトルが存在します。これらのベクトルは法線ベクトルと呼ばれ、これらの2つのベクトルのどちらかを選択することで、その点における曲面の向きを記述することができます。光の情報は、光線と入射角によって決まるためです。そして法線ベクトル光は、このような場合、反射方向を持つ光線法線ベクトルに沿っては
ここで、光線の法線への投影は。
直感的に言えば、これは、物体を外側から見ているときは外面しか見えず、内側から見ているときは内面しか見えないという意味です。光の情報は局所的なものであることに注意してください。そのため、表面全体が必ずしも向き付け可能である必要はありません。メビウスの帯やクラインの壺のような空間は向き付け不可能ですが、それでも視覚化できるのはこのためです。

法線はさまざまな座標系で指定できます。コンピュータグラフィックスでは、サーフェスの接平面に対する法線を計算すると便利です。これは、アプリケーション内のサーフェスがレンダリング処理やスケルタルアニメーションなど、さまざまな変換を受けるため、これらの変換の下で法線ベクトル情報が保持されることが重要だからです。このような変換の例としては、変換、回転、せん断と拡大縮小、透視投影[ 6 ]、または精緻なキャラクターのスケルタルアニメーションなどがあります。
コンピュータグラフィックスにおいては、曲面の最も一般的な表現方法は三角形分割であり、その結果、ある点における接平面は、その点と交差する三角形を含む平面間を補間することによって得られます。同様に、接空間を持つパラメトリック曲面の場合、パラメトリック化によって偏微分が得られ、これらの偏微分を各点における接空間の基底として使用できます。
法線の摂動を求めるには、接空間を正しく計算する必要があります。[ 7 ]多くの場合、法線はモデル行列とビュー行列を適用した後、フラグメントシェーダーで摂動されます。通常、ジオメトリは法線と接線を提供します。接線は接平面の一部であり、行列の線形部分(上側の3x3)で簡単に変換できます。ただし、法線は逆転置行列で変換する必要があります。ほとんどのアプリケーションでは、双接線が変換されたジオメトリ(および関連するUV)と一致することを望んでいます。したがって、双接線が接線に垂直になるように強制するのではなく、一般的には双接線を接線と同じように変換する方が望ましいです。接線である、双接線であること、普通である、3x3モデル行列の線形部分とし、3x3ビュー行列の線形部分とする。


表面のランバート(拡散)照明を計算するには、シェーディングポイントから光源までの単位ベクトルと、その表面に垂直な単位ベクトルとの内積を計算し、その結果がその表面上の光の強度になります。球の多角形モデルを想像してみてください。表面の形状を近似することしかできません。モデル全体に3チャンネルのビットマップをテクスチャとして使用することで、より詳細な法線ベクトル情報をエンコードできます。ビットマップの各チャンネルは、空間次元(X、Y、Z)に対応します。これらの空間次元は、オブジェクト空間法線マップの場合は一定の座標系に対して、接空間法線マップの場合は滑らかに変化する座標系(テクスチャ座標に対する位置の微分に基づく)に対して相対的です。これにより、特に高度な照明技術と組み合わせることで、モデルの表面にさらに詳細な情報を追加できます。
u、vテクスチャ座標に対応する単位法線ベクトルが法線マップにマッピングされます。ビューアに向かうベクトル(左手系の場合、z: 0~-1 )のみが存在し、ビューアから遠ざかる方向を向いたジオメトリのベクトルは表示されません。マッピングは以下のとおりです。
X: -1~+1 : 赤: 0~255 Y: -1~+1 : 緑: 0~255 Z: 0~-1 : 青: 128~255
薄緑、薄黄色 ダークシアン、ライトブルー、ライトレッド 濃い青、濃いマゼンタ
拡散照明計算のドット積計算では法線が使用されるため、{0, 0, –1} は {128, 128, 255} の値に再マッピングされ、法線マップで見られるようなスカイブルーの色になります (青 (z) 座標は透視 (深度) 座標で、RG-xy は画面上の平面座標です)。{0.3, 0.4, –0.866} は ({0.3, 0.4, –0.866}/2+{0.5, 0.5, 0.5})*255={0.15+0.5, 0.2+0.5, -0.433+0.5}*255={0.65, 0.7, 0.067}*255={166, 179, 17} の値に再マッピングされます () ) 法線マップの法線ベクトルを目 (視点またはカメラ) または光ベクトルに一致させるには、z 座標 (青チャンネル) の符号を反転する必要があります。負の z 値は頂点がカメラの手前 (カメラの後ろではなく) にあることを意味するため、この規則により、光ベクトルと法線ベクトルが一致するときに表面が最大強度で輝くことが保証されます。[ 8 ]
対話型ノーマルマップレンダリングは、当初はノースカロライナ大学チャペルヒル校で構築された並列レンダリングマシンであるPixelFlowでのみ可能でした。その後、マルチパスレンダリングとフレームバッファ操作を使用してハイエンドのSGIワークステーションで、またはパレットテクスチャを使用したいくつかのトリックを使用してローエンドの PC ハードウェアでノーマルマッピングを実行できるようになりました[ 9 ] 。しかし、パーソナルコンピュータとゲームコンソールにシェーダーが登場すると、ノーマルマッピングは 2000 年代初頭に広く普及し、それを実装した最初のゲームのいくつかには、Evolva (2000)、Giants: Citizen Kabuto、およびVirtua Fighter 4 (2001) があります。[ 10 ] [ 11 ]リアルタイムレンダリングでノーマルマッピングが人気なのは、同様の効果を生成する他の方法と比較して、処理要件に対する品質の比率が優れているためです。この効率性の多くは、距離インデックスによるディテールスケーリングによって実現されています。これは、特定のテクスチャの法線マップのディテールを選択的に低下させる技術(ミップマッピング参照)であり、遠方の表面ほど複雑なライティングシミュレーションを必要としないことを意味します。多くのオーサリングパイプラインでは、高解像度モデルを低/中解像度のゲーム内モデルに焼き付け、法線マップを追加して使用しています。
基本的なノーマルマッピングは、パレット化されたテクスチャをサポートするハードウェアであればどれでも実装できます。 ノーマルマッピング専用ハードウェアを搭載した最初のゲーム機はセガドリームキャストでした。 しかし、市販のゲームでこの効果を広く使用した最初のゲーム機はマイクロソフトのXboxでした。 第6 世代のゲーム機の中で、PlayStation 2のGPUだけが内蔵のノーマルマッピング サポートがありませんが、PlayStation 2 ハードウェアのベクトル ユニットを使用してシミュレートできます。Xbox 360とPlayStation 3のゲームはノーマルマッピングに大きく依存しており、視差マッピングを使用した最初のゲーム機世代でした。ニンテンドー 3DSは、バイオハザード リベレーションズやメタルギアソリッド 3 スネークイーターで実証されているように、ノーマルマッピングをサポートしていることが示されています。