頂点法線は、グーロー シェーディングとフォン シェーディングの両方にとって絶対に不可欠です。
グーロー シェーディングでは、照明は頂点ごとに計算され、三角形全体に補間されます。
フォン シェーディングでは、法線が三角形を横切って補間され、計算はピクセル/フラグメントごとに行われます。
バンプ マッピングは、さまざまなテクノロジを指します。法線マッピング (おそらく最近では最も一般的な方法) を実行する場合、法線、バイタンジェント (誤ってバイノーマルと呼ばれることが多い)、およびタンジェントが頂点ごとに計算されて基底行列が作成されます。次に、この基底行列が三角形全体に補間されます。法線マップから取得された法線は、この基本マトリックスによって変換され、ライティングはピクセルごとに実行されます。
上記の法線マッピング手法には、バンプが背後にある他のバンプを隠すことができる拡張機能があります。これは通常、法線マップとともに高さマップを保存し、高さマップをレイ マーチングして隠蔽されている部分を見つけることによって実行されます。この技法はレリーフ マッピングと呼ばれます。
DUDV バンプ マッピング(環境マップ、バンプ マッピング、または EMBM として DirectX 6 で実装された)などの他の古い形式があります。
また、バンプ マッピングを行う非常に初期の方法であるエンボス バンプ マッピングもあります。
編集:コメントへの回答として、エンボスバンプマッピングはグーローシェーディングされた三角形で実行できます。他の形式のバンプ マッピングは、必然的にピクセル単位になります (ピクセル単位 (または、少なくともテクセル単位) でサーフェス法線を変更することによって機能するため)。頂点ごとのライティングで実行できる他の方法があったとしても、私は驚かないでしょうが、私の頭の上からは何も考えられません。ただし、結果は、ピクセルごとに行う場合と比較して、かなりゴミに見えます.
Re: Tangents と Bi-Tangents は、理解すれば実際には非常に単純です (ただし、何年もかかりました;))。任意の 3D 座標フレームは、直交基底行列を形成する一連のベクトルによって定義できます. 頂点ごとに法線、タンジェント、およびバイタンジェントを設定することにより、各頂点で座標フレームを設定するだけです。これにより、ワールドまたはオブジェクト空間のベクトルを三角形自体の座標フレームに変換できます。ここから、単純にライト ベクトル (または位置) を三角形の表面上の特定のピクセルの座標フレームに変換できます。これは、法線マップの法線をオブジェクトの空間に格納する必要がないことを意味します。したがって、これらの三角形が動き回ると (たとえば、アニメートされる場合)、法線はすでに独自のローカル空間で処理されています。