xigongxiaozi_ 2026-03-20 09:19 采纳率: 0%
浏览 5

教如何解决unity模型光照显示问题

img


我的unity的模型在给材质上完贴图(base Material normal)之后出现了整体泛蓝光的情况,想请教一下这个应该怎么解决。
这个蓝光在特定角度会让材质的画面完全黑掉,也可能会看得清楚。

img

img


如上两个图分别是没开灯和开灯的。

还想问问这个为什么我在场景里面添加一个realtime的灯光之后却对模型没有任何影响这是为什么,有什么解决方法吗,谢谢啦

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-03-20 09:20
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你遇到的问题是Unity中材质光照显示异常,具体表现为模型在开启灯光后出现泛蓝光、黑掉或无法正常显示的情况。这通常与以下几个方面有关:


    一、问题原因分析

    1. 材质(Material)配置不当

    • 你使用了Base Material Normal,但可能没有正确设置材质的金属度(Metallic)光滑度(Smoothness)
    • 如果材质被误判为“金属”材质,而实际是“非金属”,那么光照计算会出现错误,导致颜色偏蓝。

    2. 法线贴图(Normal Map)使用不正确

    • 法线贴图如果方向不对,或者没有正确应用到材质上,会导致光照计算错误,出现异常的颜色(如蓝色)。

    3. 光照设置不正确

    • 场景中的光源(如Directional Light)未正确设置为RealtimeShadowcasting
    • 光源的强度、颜色、阴影等参数设置不当,也可能导致模型显示异常。

    4. Shader类型不匹配

    • 使用了不兼容的Shader(如Standard Shader),可能导致光照计算错误。

    二、解决方案

    1. 检查并调整材质设置

    步骤:

    1. 选中你的模型,打开Inspector窗口。
    2. 确保材质使用的是Standard Shader
    3. 在材质属性中,检查以下内容:
      • Metallic:设为 0(非金属材质)。
      • Smoothness:设为 0.5 或根据需要调整。
      • Albedo:确保贴图正确,并且颜色正常。
      • Normal Map:确认是否已正确应用,且方向正确(通常为Tangent Space Normal Map)。

    注意: 如果你使用的是URP(Universal Render Pipeline),请使用UnlitLitShader,并确保光照设置正确。


    2. 检查光源设置

    步骤:

    1. 打开场景中的光源(如Directional Light)。
    2. 确保光源的Mode设置为 Realtime
    3. 检查以下参数:
      • Intensity(强度):建议设为 1 或更低。
      • Color(颜色):默认为白色,若改为蓝色则会引发问题。
      • Shadows(阴影):勾选 Hard ShadowsSoft Shadows,视需求而定。
      • Culling Mask:确保光源照射到你的模型所在的层。

    如果光源没有影响模型,可能是:

    • 模型不在光源照射范围内;
    • 模型的Layer未包含在光源的Culling Mask中;
    • 模型的Mesh Renderer未启用。

    3. 检查法线贴图(Normal Map)

    步骤:

    1. 检查法线贴图的格式是否为 RGB
    2. 确认法线贴图的方向是否正确(通常是 Tangent Space)。
    3. 在材质中,将法线贴图拖入 Normal Map 字段。
    4. 如果法线贴图方向错误,可以尝试在纹理属性中勾选 Invert Green Channel 来纠正。

    4. 检查渲染管线(Render Pipeline)

    步骤:

    • 如果你使用的是 URP(Universal Render Pipeline),请确保:
      • 使用了 LitUnlit Shader。
      • 光源类型为 Directional LightPoint Light
      • 启用了 Lighting 模块。
    • 如果使用的是 HDRP(High Definition Render Pipeline),请确保光源和材质都支持 HDRP 的光照系统。

    5. 代码层面的调试(如有自定义Shader)

    如果你使用了自定义Shader,请检查以下部分:

    // 示例:标准光照计算
    fixed4 frag (v2f i) : SV_Target
    {
        // 计算光照
        fixed3 worldNormal = normalize(i.worldNormal);
        fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
        fixed3 diffuse = _LightColor0.rgb * max(0, dot(worldNormal, lightDir));
        
        // 颜色混合
        fixed4 col = tex2D(_MainTex, i.uv) * diffuse;
        return col;
    }
    

    注意: 如果你使用了错误的光照公式或未正确处理法线方向,可能会导致颜色异常。


    三、总结:解决步骤清单

    1. 检查材质设置

      • 使用 Standard Shader。
      • 设置 Metalic = 0,Smoothness = 0.5。
      • 正确应用 Albedo 和 Normal Map。
    2. 检查光源设置

      • 确保光源为 Realtime。
      • 调整 Intensity 和 Color。
      • 检查 Culling Mask 是否包含模型所在的 Layer。
    3. 检查法线贴图

      • 确保是 Tangent Space。
      • 适当反转 Green Channel。
    4. 检查渲染管线

      • 确保使用正确的 Shader(Lit/Unlit)。
      • 检查光照模块是否启用。
    5. 检查自定义Shader(如有)

      • 确保光照计算逻辑正确。

    四、示例:修改后的材质设置(Unity界面)

    | 参数 | 建议值 | |-------------|----------------| | Shader | Standard | | Metallic | 0 | | Smoothness | 0.5 | | Albedo | [贴图] | | Normal Map | [法线贴图] |


    五、常见错误提示及解决方法

    | 错误现象 | 可能原因 | 解决方法 | |----------------------|------------------------------|------------------------------------| | 模型泛蓝光 | 材质误判为金属 | 设置 Metallic = 0 | | 模型完全变黑 | 光照未正确应用 | 检查光源设置和模型 Layer | | 光源无影响 | 光源未开启或未照射模型 | 检查光源模式和 Culling Mask | | 法线贴图异常 | 法线方向错误 | 反转 Green Channel 或重新生成贴图 |


    如果你能提供具体的材质截图、光源设置或代码片段,我可以进一步帮你定位问题。希望这些信息对你有帮助!如果还有其他问题,欢迎继续提问 😊

    评论

报告相同问题?

问题事件

  • 创建了问题 3月20日