在 Unity 的 URP 中,SubShader
中的不同 Pass
可以有不同的 Tags
,例如 LightMode
。这些 Tags
用于告诉渲染管线在何时使用该 Pass
。不同 LightMode
的 Pass
通常不会在同一渲染阶段全部执行,而是根据渲染管线和渲染阶段选择性地执行某一个或多个。
LightMode
Tags
以下是一些常见的 LightMode
标签及其含义:
ForwardBase
: 用于处理正向渲染的主要光源(通常是最亮的方向光)。ForwardAdd
: 用于处理正向渲染中的额外光源。Deferred
: 用于延迟渲染路径的几何阶段。ShadowCaster
: 用于处理阴影投射阶段。Meta
: 用于光照贴图生成和光照探针渲染。
Pass
的执行
基于 LightMode
标签,不同的 Pass
会在不同的渲染阶段被执行。举个例子:
Shader "Example/LightModePasses"
{
SubShader
{
Tags { "RenderType" = "Opaque" }
Pass
{
Name "ForwardBase"
Tags { "LightMode" = "ForwardBase" }
// 设置用于主要光源的渲染状态和着色器程序
}
Pass
{
Name "ForwardAdd"
Tags { "LightMode" = "ForwardAdd" }
// 设置用于附加光源的渲染状态和着色器程序
}
Pass
{
Name "ShadowCaster"
Tags { "LightMode" = "ShadowCaster" }
// 设置用于阴影投射的渲染状态和着色器程序
}
}
}
在这个示例中:
ForwardBase
Pass
会在处理主要光源时被执行。ForwardAdd
Pass
会在处理额外光源时被执行。ShadowCaster
Pass
会在计算阴影时被执行。
渲染阶段的选择
渲染管线会根据当前的渲染阶段和光照情况选择合适的 Pass
执行。例如:
- 在正向渲染过程中,首先会执行带有
ForwardBase
标签的Pass
,然后对于每个额外的光源,执行带有ForwardAdd
标签的Pass
。 - 在阴影渲染过程中,只会执行带有
ShadowCaster
标签的Pass
。
因此,不同的 Pass
不会在同一渲染阶段全部执行,而是根据 LightMode
标签在特定的渲染阶段选择性地执行相应的 Pass
。这种机制使得同一个 SubShader
能够在不同的渲染阶段执行不同的渲染任务。
- 本文固定链接: https://bonostallone.com/?p=165
- 转载请注明: bono 于 bonoStallone 明天的烟火 发表