法線マッピングは、モデルのジオメトリを増やすことなくサーフェス上の追加の詳細をシミュレートする手法ですが、残念ながら実装では期待どおりに機能しませんでした。コードを詳しく調べて、潜在的な問題を特定しましょう。
頂点シェーダーはほとんど正しいようです。ただし、対処すべき重要な点が 1 つあり、新しい GLSL バージョンでは優先される構文であるため、頂点属性に in の代わりにattribute を使用することです。
フラグメント シェーダーを確認すると、いくつかの重要な点が示されます。問題の発生:
color.rgb *= light.ambient + diffuse + specular;
color = vec4(brownColor * (texture(diffuseMap, fsCoords).rgb + 0.25), 1.0);
関数内の接線ベクトルと副接線ベクトル (一般に従法線と呼ばれる) を計算するコードは健全であると思われます。ただし、適切な TBN 計算のために両方のベクトルを正規化して単位長を確保することをお勧めします。
光ベクトルと表面ベクトルを接線に変換するために TBN 行列を使用しています。空間。ただし、TBN 行列は接線空間基底行列 (TBN) の転置であることを覚えておくことが重要です。 TBN マトリックスを構築する正しい方法は次のとおりです:
mat3 TBNMatrix = mat3(normalize(tangent), normalize(bitangent), normalize(normal));
法線マッピングの問題を効果的にデバッグするには、次の手順を検討してください:
法線マッピングの問題のトラブルシューティングには、細部への細心の注意と徹底的なテストが重要であることを覚えておいてください。
以上が法線マッピングが正しく機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。