要在 ShaderLab 中定义通道,请使用 Pass
代码块。本页面包含有关使用 Pass
代码块的信息。有关 Shader 对象的工作原理以及 Shader 对象、子着色器与通道之间关系的信息,请参阅 Shader 对象基础。
通道是 Shader 对象的基本元素。它包含设置 GPU 状态的指令,以及在 GPU 上运行的着色器程序。
Simple Shader objects might contain only a single Pass, but more complex shaders can contain multiple Passes. You can use separate Passes to define parts of your Shader object that work differently; for example, parts that require a change to the render state, different shader programs, or a different LightMode
Pass tag.
注意:在基于可编程渲染管线的渲染管线中,您可以使用 RenderStateBlock 来更改 GPU 上的渲染状态,而无需单独的通道。
功能名称 | 内置渲染管线 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP |
---|---|---|---|---|
ShaderLab:Pass 代码块 | 是 | 是 | 是 | 是 |
要在 ShaderLab 中定义一个常规的通道,您需要在一个 SubShader
代码块中放置一个 Pass
代码块。
在 Pass
代码块中,您可以:
您还可以使用 UsePass
或 GrabPass
命令定义两种特殊类型的通道。有关这些命令的信息,请参阅 ShaderLab 命令:UsePass 或者 ShaderLab 命令:GrabPass。
签名 | 功能 |
---|---|
Pass { <optional: name> <optional: tags> <optional: commands> <optional: shader code> }
|
定义一个通道。 |
此示例代码演示了用于创建包含单个子着色器的 Shader 对象的语法,而每个子着色器又包含一个通道。
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// 此处是 ShaderLab 命令。
// 此处是 HLSL 代码。
}
}
}