在Unity 的通用渲染管线中LightMode标签的区别

在 Unity 的通用渲染管线(URP,Universal Render Pipeline)中,LightMode 标签决定了 Shader 中的一个 Pass 在管线的哪个阶段、为了什么目的被执行。不同的 LightMode 对应着不同的渲染逻辑。

以下是这些常用 LightMode 的核心区别:

1. UniversalForward

  • 全称:前向渲染路径

  • 用途:这是常规渲染通道。用于计算物体接收到的所有实时光照、阴影和主纹理颜色,最终输出到屏幕(或颜色缓冲区)。

  • 发生时机:在 ForwardRendering(前向渲染)或 Forward+ 的绘制调用中。

  • 关键特性

    • 处理多光源(在单Pass或额外的Add Pass中)。

    • 通常包含 "LightMode" = "UniversalForward" 的 Pass 用于主渲染(Main Light + 部分额外光源),也可能有 "LightMode" = "UniversalForwardOnly" 用于强制前向渲染。

2. ShadowCaster

  • 用途生成阴影贴图。这个 Pass 不计算颜色,只计算深度。

  • 发生时机:在渲染阴影贴图的阶段。

  • 关键特性

    • 顶点着色器通常将顶点转换到光源空间。

    • 片元着色器通常只输出深度(或者对于Alpha Test的物体,进行透明度裁剪)。

    • 如果一个物体没有这个 Pass,它将无法投射阴影(即使开启了 Cast Shadows)。

3. UniversalGBuffer

  • 用途延迟渲染路径。将物体的几何信息(漫反射颜色、法线、光滑度、深度等)写入多个渲染目标(MRT,Multiple Render Targets)。

  • 发生时机:在启用了延迟渲染(Deferred)的 URP 项目中。

  • 关键特性

    • 不计算最终光照,只存储数据到 GBuffer。

    • 随后在屏幕空间进行光照计算。

    • 不支持半透明物体(半透明通常需要回退到前向渲染)。

4. DepthOnly

  • 用途仅输出深度。用于生成相机的深度纹理(_CameraDepthTexture)或需要深度的特效。

  • 发生时机:当管线需要获取场景深度信息时(例如,开启了 Depth Texture 选项,或者后处理需要深度)。

  • 关键特性

    • 比 ShadowCaster 更简单,通常只将顶点转换到相机空间,输出深度。

    • 对于不透明物体,这是渲染深度的标准 Pass。

5. DepthNormals

  • 用途输出深度和法线。用于生成相机的深度法线纹理(_CameraDepthNormalsTexture)。

  • 发生时机:当管线需要深度+法线信息时(例如,某些后处理效果如 SSAO(屏幕空间环境光遮蔽)需要法线信息)。

  • 关键特性

    • 在一个纹理中同时编码深度和法线数据。

6. SceneSelectionPass

  • 用途编辑器专用。用于在 Unity 编辑器的 Scene 视图中,通过鼠标点击选中物体。

  • 发生时机:仅在编辑器中,当你点击或框选物体时。

  • 关键特性

    • 它利用物体在 GPU 端的 ID 来渲染,使得引擎能够识别你点击的是哪个物体。

    • 注意:通常不会在游戏构建中包含它。

7. Meta

  • 用途全局光照烘焙(Baked GI)。用于为光照贴图(Lightmap)或 Light Probe(光照探针)提供材质的发射(Emission)和反照率(Albedo)信息。

  • 发生时机:仅在离线烘焙光照贴图时(或者在 API 调用 Lightmapping.Bake 时)。

  • 关键特性

    • 不管场景里的实时灯光如何,它输出的是该物体“应该贡献给光照贴图的数据”。

    • 重要:运行时(Play 模式)默认情况下,这个 Pass 不被执行(除非为了调试)。


总结表格

LightMode 标签主要用途发生时机输出内容
UniversalForward正常渲染实时渲染(前向/Forward+)最终颜色(带光照)
ShadowCaster投射阴影渲染阴影贴图时深度(光源空间)
UniversalGBuffer延迟渲染几何体实时渲染(延迟)多张纹理(颜色、法线等)
DepthOnly生成相机深度纹理需要场景深度时深度(相机空间)
DepthNormals生成相机深度+法线需要深度法线时(如 SSAO)编码的深度和法线
SceneSelectionPass编辑器物体高亮/选中编辑器中点击物体时物体 ID 颜色
Meta光照贴图烘焙离线烘焙时Albedo 和 Emission 值

对于自定义 Shader 编写
为了让一个 Shader 在 URP 中正常工作(不透明物体),通常需要包含至少 UniversalForward 和 ShadowCaster。如果物体需要参与深度纹理,还需要 DepthOnly;如果需要参与 SSAO,则需要 DepthNormals。如果是用于编辑器,通常 Unity 内置的 Shader 已经处理好了 SceneSelectionPass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值