1

OpenGL アプリで接線空間の法線マッピングを実装していますが、いくつか質問があります。

1) 当然、テクスチャ座標が歪んでいる可能性があるため、TBN 行列が常に直交するとは限らないことはわかっています。グラム・シュミット法を使用して再直交化できることを知っています。私の質問はこれです - グラム-シュミット法は目に見えるアーティファクトを導入しますか? 変更されていない純粋な法線/タンジェント/バイタンジェントを使用することで、最高のビジュアル品質が得られますか?

2) 多くのチュートリアルで、ビュー空間ではなく接線空間で照明計算を行っていることに気付きました。どうしてこれなの?遅延レンダラーを使用する予定なので、法線をバッファに保存する必要があります。保存時にビュー スペースにある必要があるという点で正しいですか? 計算でタンジェント スペースの代わりにビュー スペースを使用すると、何が失われますか? ビュー スペースを使用している場合、TBN マトリックスの逆数が必要ですか?

3) フラグメント シェーダーでは、タンジェントとバイタンジェントを再正規化する必要がありますか? 入ってくる (正規化された) バンプ マップの法線を乗算した後、再正規化する必要がありますか? 直交性 (質問 1 を参照) はこれに影響しますか? フラグメント シェーダー内で再正規化する必要がある、または再正規化する必要がないベクトルは?

4

1 に答える 1

3

グラム-シュミット プロセスでは目に見えるアーティファクトが導入されますか?

それは望ましい結果に依存します。しかし、法線マップ ベクトルは接線空間にあるため、通常の答えはイエスです。接線空間を直交化すると、テクスチャ座標が非直交ベースを定義している場合、法線マッピングの計算が歪められます。

多くのチュートリアルで、ビュー空間ではなく接線空間でライティングの計算を行っていることに気付きました。どうしてこれなの?

ビュー スペースで法線マッピングを行うには、各法線マップ テクセルをビュー スペースに変換する必要があります。これは、頂点シェーダーで照明ベクトルを接線空間に変換し、重心補間ステージ (はるかに効率的) を機能させるよりもコストがかかります。

フラグメント シェーダーでは、タンジェントとバイタンジェントを再正規化する必要がありますか?

いいえ。個々のベクトルを変換した後 (法線マップ、光源および視点への方向)、イルミネーションの計算を行う前に、それらを正規化する必要があります。

于 2014-04-25T00:05:31.387 に答える