通道是 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表 对象的基本元素。它包含设置 GPU 状态的指令,以及在 GPU 上运行的着色器程序。
简单的着色器对象可能只包含单个通道,但更复杂的着色器可以包含多个通道。您可以使用不同的通道来定义工作方式不同的 着色器对象着色器类的实例,着色器对象是着色器程序和 GPU 指令的容器,以及告知 Unity 如何使用它们的 信息。将它们与材质一起使用以确定场景的外观。 更多信息
参见 词汇表 部分;例如,需要更改渲染状态、不同的着色器程序或不同的 LightMode
通道标签的部分。
注意:在基于可脚本化 渲染管线一系列操作,将场景内容显示在屏幕上。Unity 允许您选择预构建的渲染管线,或编写自己的渲染管线。 更多信息
参见 词汇表 的渲染管线中,您可以使用 RenderStateBlock 来更改 GPU 上的渲染状态,而无需使用单独的通道。
要在 ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
参见 词汇表 中定义常规通道,您需要将 Pass
块放在 SubShader
块中。
您还可以使用 UsePass
或 GrabPass
命令定义两种特殊的通道类型。有关这些命令的信息,请参见 ShaderLab 命令:UsePass 或 ShaderLab 命令:GrabPass。
通道可以有一个名称。您需要在 UsePass
命令中以及在一些 C# API 中通过名称引用通道。通道的名称在 帧调试器 工具中可见。
要为 ShaderLab 中的通道指定名称,您需要将 Name
块放在 Pass
块中。
在内部,Unity 将名称转换为大写。当您在 ShaderLab 代码中引用名称时,必须使用大写变体;例如,如果值为“example”,则必须将其引用为 EXAMPLE。
如果同一个 SubShader 中的多个通道具有相同的名称,Unity 将使用代码中的第一个通道。
要从 C# 脚本一段代码,允许您创建自己的组件、触发游戏事件、随着时间的推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见 词汇表 中访问通道名称,可以使用 API,例如 Material.FindPass、Material.GetPassName 或 ShaderData.Pass.Name。
注意:Material.GetShaderPassEnabled 和 Material.SetShaderPassEnabled 不按名称引用通道;而是使用 LightMode 标签 的值引用通道。
此示例代码演示了创建包含单个 SubShader 的着色器对象的语法,该 SubShader 又包含单个通道。
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab commands go here.
// HLSL code goes here.
}
}
}