URP中光照/阴影显示的总结

URP中光照/阴影显示的总结
最新回答
漫妙幽离

2023-05-25 20:03:26

在URP(通用渲染管线)中,光照与阴影的显示效果受渲染路径(Forward/Forward+/Deferred)、光照类型(实时/混合/烘焙)、物体静态属性及Culling Mask/Rendering Layers配置的影响,静态物体烘焙后Culling Mask不生效可能是Unity特性或已知问题,动态光照行为则符合预期。 以下是具体总结:

一、核心结论
  • 静态物体烘焙后:Culling Mask的包含/排除不影响光照与阴影结果(始终显示),可能是Unity特性或已知Bug(REF2/REF3)。
  • 动态物体(非Static):Culling Mask生效,光照/阴影随掩码变化而隐藏/显示。
  • 渲染路径差异

    Forward/Forward+:Culling Mask同时影响光照与阴影(Forward+仅阴影变化需验证)。

    Deferred:Culling Mask影响光照与阴影,但静态烘焙物体仍不受影响。

  • 光照类型影响

    实时光(Non-Baked):动态物体行为正常,静态物体需烘焙。

    混合光(Mixed):阴影与光照效果与实时/烘焙模式差异显著。

    烘焙光(Baked):静态物体光照/阴影固定,不受Culling Mask影响。

二、分项解析1. Rendering Layers(光照层)
  • 作用:控制光照影响哪些渲染层(需在URP Global Settings中启用3D Light Layer)。
  • 表现

    所有渲染路径(Forward/Forward+/Deferred)下,Rendering Layers均影响光照(符合预期)。

    阴影层(Custom Shadow Layer)在所有路径下均影响阴影,但无选项时可能继承默认行为。

2. Culling Mask(剔除掩码)
  • 动态物体(非Static)

    所有路径下,Culling Mask生效,光照/阴影随掩码变化隐藏/显示。

    例外:Forward+路径下,用户观察到“仅阴影变化”,需进一步验证是否为配置差异。

  • 静态物体(Static)

    烘焙后,Culling Mask不生效(光照/阴影始终显示),可能是Unity优化策略或Bug(REF2/REF3提及)。

    未烘焙时,行为与动态物体一致(但静态物体通常用于烘焙场景)。

3. 渲染路径对比
  • Forward

    Culling Mask同时影响光照与阴影。

    适合简单场景,对动态物体支持完善。

  • Forward+

    用户反馈Culling Mask仅影响阴影,需确认是否为配置差异(如阴影层单独设置)。

    优化了大量光源的性能,但行为可能因版本而异。

  • Deferred

    Culling Mask影响光照与阴影,静态烘焙物体仍不受影响。

    适合复杂光照场景,但开销较高。

4. 光照类型与静态属性
  • Directional Light(平行光)

    非Baked模式:动态物体行为正常,静态物体需烘焙。

    Baked模式:静态物体光照/阴影固定,动态物体不受影响。

  • Mixed Light(混合光)

    阴影与光照效果介于实时与烘焙之间,需注意混合模式配置(如Shadowmask)。

  • 静态物体烘焙

    光照/阴影结果存储在光图(Lightmap)中,运行时不受Culling Mask影响(设计如此或Bug)。

三、已知问题与建议
  1. Culling Mask在烘焙模式下无效

    可能是Unity特性(优化静态物体渲染)或已知Bug(REF2/REF3)。

    建议:若需动态控制静态物体光照,可尝试:

    使用Light Layers替代Culling Mask。

    将物体标记为非Static,但会失去烘焙优化。

  2. Forward+路径行为差异

    需验证是否因阴影层配置或版本差异导致“仅阴影变化”。

    建议:检查Light组件的Shadow Type和Custom Shadow Layer设置。

  3. Light Layers启用

    确保在URP Global Settings中添加Rendering Layer(3D),否则配置不生效。

四、操作验证步骤
  1. 测试动态物体

    创建非Static物体,调整Culling Mask,观察光照/阴影是否隐藏。

  2. 测试静态物体

    标记物体为Static,烘焙光照后修改Culling Mask,确认光照/阴影是否变化。

  3. 切换渲染路径

    在URP Asset中切换Forward/Forward+/Deferred,重复上述测试。

  4. 检查Light Layers

    确保Light组件和Camera的Rendering Layers配置一致。

总结:URP中光照/阴影的行为受物体静态属性、渲染路径及光照类型共同影响。静态物体烘焙后Culling Mask不生效可能是预期行为或Bug,动态物体则符合配置逻辑。建议根据场景需求选择渲染路径,并利用Light Layers实现更灵活的光照控制。