You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旋转场景下法线贴图(Normal Map)光照异常问题排查

旋转球体法线贴图光照异常的排查与解决

针对你遇到的旋转球体法线贴图光照异常(顶部未正确照亮、一侧偏暗)问题,结合提供的Shader代码,给出以下排查方向:

  • 统一光照向量与法线的空间
    确保light_vector和转换后的法线处于同一空间:

    • 如果in.normal是视图空间法线,需要把世界空间的光源方向(0,1,0)转换到视图空间后再计算点积;如果in.normal是世界空间,那light_vector直接用世界空间的(0,1,0)即可。空间不匹配会导致光照方向错乱。
  • 修正副切线的符号
    很多模型的切线会附带符号信息(通常存在tangent的w分量中),直接计算cross(in.normal, tangent)可能导致副切线方向反转,进而让法线贴图的光照方向错误。修改副切线计算代码:

    simd_float3 bitangent = normalize(cross(in.normal, tangent) * in.tangent.w);
    

    若你的切线没有w分量,需要确认建模时切线的方向是否和法线贴图的烘焙方向一致。

  • 检查法线贴图的通道方向
    不同管线的法线贴图格式有差异:OpenGL风格法线贴图Y轴向上,DirectX风格Y轴向下。如果你的法线贴图是DirectX格式,需要反转绿色通道:

    normal = (normal * 2.0 - 1.0);
    normal.y = -normal.y; // 添加这行
    normal = normalize(normal);
    
  • 确认TBN矩阵的乘法顺序
    虽然你用(0,0,1)验证了TBN的正确性,但仍需确认矩阵的存储顺序(行主序/列主序)与Shader中的乘法逻辑匹配。若你的Shader使用列主序矩阵,确保TBN * normal的乘法方向是正确的切线空间转目标空间。

内容的提问来源于stack exchange,提问作者Sina Dasht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:00:03