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

Unity Renderer2D中Light2D与Shader Graph法线贴图渲染异常求助

问题描述

在Unity 2022.3.4f1(搭配Universal RP 14.0.8、Shader Graph 14.0.8)环境下,使用Renderer2D + Light2D + 带法线贴图的Sprite Lit Shader Graph时,出现渲染异常:

  • 相机无旋转正对时渲染完全正常;
  • 相机旋转后,光照区域出现明显的错误偏移;
  • 排查后发现UV本身存在扭曲现象;
  • 切换为Unlit Shader时一切正常,但项目需要法线贴图的光照效果。

相关素材说明:

  • Shader Graph结构极简
  • 相机旋转时的异常动态演示效果
  • UV扭曲示意图
  • 测试用基础纹理与法线贴图
修复方案

1. 修正Shader Graph的法线空间转换逻辑

2D场景的空间计算和3D存在差异,相机旋转会导致切线空间到世界空间的转换出现偏差,需针对性调整:

  • 采样法线贴图后,使用Transform Node将法线从Tangent空间转换为World空间,务必勾选节点的2D Mode选项(URP 2D的Shader Graph中该选项默认未开启,这是核心问题所在);
  • 光照方向计算需适配2D相机变换:使用Light Direction Node获取World空间的光照方向,或直接使用Camera Space下的光照方向参与计算,避免相机旋转带来的空间偏移。

2. 检查Sprite的UV与网格设置

  • 在Sprite Inspector面板中,将Mesh Type设置为Full Rect,避免Tight Mesh在相机旋转时引发UV拉伸扭曲;
  • 开启Generate Mip Maps,并将Filter Mode设为Bilinear,提升纹理采样的稳定性,减少UV偏移概率。

3. 调整Light2D的渲染设置

  • 将Light2D的Render Mode改为Per Pixel,确保光照计算基于像素级的UV采样,而非顶点插值,避免旋转时的光照偏移;
  • 确认Culling Mask仅包含需要光照的Sprite层,排除无关层的计算干扰。

4. 临时规避方案

如果暂时无法调整Shader Graph,可通过场景设置绕过问题:

  • 固定相机旋转,通过旋转Sprite对象本身来实现视角变化;
  • 使用正交相机并保持其角度不变,通过移动Sprite的位置和旋转来模拟视角移动需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:14:59