萌えハッカーニュースリーダー

2025/11/12 13:50 The Geometry Behind Normal Maps

出典: https://www.shlom.dev/articles/geometry-behind-normal-maps/
hakase
博士

やあ、ロボ子。今日はタンジェント空間について話すのじゃ。

roboko
ロボ子

タンジェント空間ですか。なんだか難しそうですね。

hakase
博士

難しくないぞ!タンジェント空間は、サーフェス上の各点にローカルな座標フレームを作るようなものじゃ。たとえば、リンゴの表面に小さな平面をペタッと貼り付けるイメージじゃな。

roboko
ロボ子

なるほど、その平面がタンジェント空間の基礎となる接平面なのですね。

hakase
博士

そう!そして、その平面上のベクトルを接線ベクトル、平面に垂直なベクトルを法線ベクトルと言うのじゃ。これらがサーフェス上のローカル座標フレームを形成する正規直交基底になるぞ。

roboko
ロボ子

接線ベクトルと法線ベクトルで、サーフェスの向きを表現するんですね。それがどう役に立つんですか?

hakase
博士

良い質問じゃな、ロボ子!タンジェント空間は、ワールド空間ではなくサーフェスを基準にした方向や微分、変換を表現するために使うのじゃ。例えば、テクスチャをサーフェスに貼り付けるときに、UVマップを使うじゃろ?

roboko
ロボ子

はい、UVマップはサーフェス上の各点に2D座標を与えるものですね。

hakase
博士

その通り!UVマップはテクスチャの適用方法を定義するだけでなく、2Dテクスチャ空間の動きがサーフェス上の動きにどのように変換されるかを示すのじゃ。タンジェントベクトルは、テクスチャ座標がサーフェス上をどのように移動するかを記述するのじゃ。

roboko
ロボ子

タンジェントベクトルと法線ベクトルを組み合わせると、タンジェント空間行列ができるんですね。

hakase
博士

そうじゃ!そして、この行列を使って、タンジェント空間で表現されたベクトルをサーフェスの座標フレームに変換できるのじゃ。記事にも「正接ベクトルを求めるには、サーフェス空間とUV空間の両方に存在する三角形のエッジ間の関係を利用する」とあるぞ。

roboko
ロボ子

でも、UVマップが歪んでいると、タンジェントベクトルが垂直でなくなることがあるんですよね?

hakase
博士

その通り!だから、グラム・シュミットの正規直交化法を使って、タンジェントフレームを正規直交化する必要があるのじゃ。記事にも書いてある通りじゃな。

roboko
ロボ子

タンジェントベクトルと従法線の符号は、通常、アセットのインポート時やメッシュの前処理中に計算されて、頂点属性として格納されるんですね。

hakase
博士

その通り!そして、法線マッピングを使うと、メッシュにない細かいディテールに対するライティングの反応を表現できるのじゃ。法線マップは、RGBチャンネルを使って法線ベクトルをエンコードするのじゃ。

roboko
ロボ子

法線マップのテクセルを符号付きベクトルとして解釈するには、RGBカラーの範囲を-1から1に再マッピングする必要があるんですね。

hakase
博士

そうじゃ!MikkTSpaceは、正接の構築、平均化、正規直交化、符号の格納、およびシェーダーでの従法線の再構築の方法を定義する標準じゃ。これを使うと、異なる環境でも一貫した結果が得られるのじゃ。

roboko
ロボ子

タンジェント空間は、異方性、トライプラナー投影、ディテール法線、ディスプレイスメントマッピングなど、様々な技術の基盤になっているんですね。

hakase
博士

その通り!タンジェント空間を理解することは、現代のグラフィックスプログラミングにおいて非常に重要なのじゃ。…ところでロボ子、タンジェントって英語で何て言うか知ってるか?

roboko
ロボ子

えっと… tangent ですよね?

hakase
博士

正解!…正接だけにね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search