0

照明システム用の単純なシェーダーを作成しようとしています。現在、法線マッピングのサポートを追加する作業を行っています。法線マッピングがなければ、照明システムは正常に機能します。頂点シェーダーから転送された法線を使用していますが、問題なく動作します。また、法線マップから法線を正しく読み取っています。法線マップを含めなくても、ライティングは完璧に機能します。頂点法線と法線マップの法線を追加しようとしましたが、うまくいきません。また、掛けてみました。法線マップの読み方は次のとおりです。

vec4 normalHeight = texture2D(m_NormalMap, texCoord);
vec3 normals = normalize((normalHeight.xyz * vec3(2.0) - vec3(1.0)));

したがって、正しい頂点法線と、法線マップからの法線があります。正しい法線を取得するには、これらをどのように組み合わせる必要がありますか?

4

2 に答える 2

2

法線マップの保存方法によって異なります。それらが最初からワールド空間にあり (これはかなりまれです)、シーンがまったく変わらない場合は、現在の方法でそれらを調べることができます。ただし、通常、それらは接空間にあります。接線空間は、オブジェクトの法線と、(s,t) テクスチャ座標の変化率を使用して、サーフェス上の法線を任意の方向に適切に変換するベクトル空間です。

接線空間の法線マップは通常、肉眼では青みがかったように見えますが、ワールド空間の法線マップは虹のすべての色です (色空間の半分は負のベクトルを表すと想定されているため、バイアスとスケーリングが必要です) :)

接空間をよりよく理解し、基底ベクトルを導出するための実装を完了したい場合は、このリンクを参照してください。

于 2013-08-13T22:13:45.973 に答える