首页 > Uncategorized > shader pass
2024
05-24

shader pass

在 Unity 的 URP 中,SubShader 中的不同 Pass 可以有不同的 Tags,例如 LightMode。这些 Tags 用于告诉渲染管线在何时使用该 Pass。不同 LightModePass 通常不会在同一渲染阶段全部执行,而是根据渲染管线和渲染阶段选择性地执行某一个或多个。

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 能够在不同的渲染阶段执行不同的渲染任务。

最后编辑:
作者:bono
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。