【URP】Unity渲染层Rendering Layers

【从UnityURP开始探索游戏渲染】专栏-直达

Unity URP 的 Rendering Layers(渲染层)功能是一种精细控制光照影响的机制,允许开发者通过层掩码(Layer Mask)将特定光源与特定 GameObject 关联,实现选择性照明。

‌功能定义与发展历史‌

  • 定义‌:Rendering Layers 是 URP 基于 HDRP 的 Light Layers 功能演化而来的轻量化实现,通过位掩码(32 位)控制光源与物体的匹配关系。
  • 发展‌:
    • HDRP 起源‌:最初在 HDRP 中引入,用于影视级光照控制(如仅让特定灯光影响角色)。
    • URP 适配‌:URP 12.0+ 版本整合此功能,简化了实现逻辑,更适合移动端和跨平台项目。

‌核心作用‌

  • 性能优化‌:避免不必要的灯光计算(如场景中大量灯光仅需影响少数物体)。
  • 艺术控制‌:实现局部光照效果(如角色高光与环境光分离)。
  • 动态交互‌:实时切换灯光影响目标(如开关谜题中的灯光区域)。

‌实现流程与参数详解‌

‌启用功能‌

  • URP Asset 配置‌:在 URP 资源中勾选 Light Layers 选项。
  • 光源设置‌:为光源指定 Rendering Layer Mask(如 Layer1)。
  • 物体设置‌:在 Mesh Renderer 的 Rendering Layer Mask 中选择匹配层(如 Layer1)。

‌参数含义‌

参数 作用 用例
Light Layer Mask 光源影响的层 聚光灯仅照亮 "Enemy" 层
Renderer Layer Mask 物体受光层 角色材质仅响应 "PlayerLight" 层
Additional Lights Per Object 每物体最大受光数 限制移动端每物体最多 4 盏灯

‌底层原理‌

  • 渲染阶段‌:URP 在 RenderingOpaquesRenderingTransparents 阶段,根据 Layer Mask 筛选光源与物体匹配关系。
  • Shader 处理‌:在着色器中,通过 _LightLayerMask 变量与物体层掩码进行位运算,剔除不匹配的光照计算。
  • 性能优化‌:通过 Culling Mask 减少 GPU 提交的灯光数据量。

‌原理示例‌

假设光源掩码为 0010(Layer2),物体掩码为 0101(Layer1+Layer3):

  • 位与运算‌:0010 & 0101 = 0000 → 无匹配,物体不受光。
  • 若物体掩码改为 0010,则运算结果为 0010 → 受光。

此机制通过 GPU 的逐像素计算实现高效筛选,避免 CPU 端遍历所有光源


‌完整示例‌

以下代码演示如何通过脚本动态修改 Rendering Layers:

  • 功能说明‌:

    • 使用 Light2DUniversalAdditionalLightData 组件配置光源层。
    • 通过位运算(1 << n)快速切换层掩码。
  • LightLayerController.cs

    using UnityEngine;
    using UnityEngine.Rendering.Universal;
    
    public class LightLayerController : MonoBehaviour
    {
        public Light2D lightSource;
        public MeshRenderer targetRenderer;
    
        void Start()
        {
            // 设置光源仅影响 Layer 2
            lightSource.renderingLayerMask = 1 << 2;
    
            // 设置物体仅接受 Layer 2 的光照
            targetRenderer.renderingLayerMask = 1 << 2;
        }
    }
    

‌实际用例‌

  • 解密游戏‌:火把仅照亮可交互物体(Layer3),环境物体(Layer1)不受影响。
  • 角色特效‌:技能光源(Layer4)仅作用于自身和敌人,避免干扰场景光照。
  • 性能敏感场景‌:动态禁用远处灯光的渲染层,减少 Shader 计算量。

【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

posted @ 2025-11-21 08:26  SmalBox  阅读(5)  评论(0)    收藏  举报