Unity3D:ShaderLab-定义子着色器

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

ShaderLab:定义子着色器

要使用 ShaderLab 定义子着色器,可以使用 SubShader 代码块。本页面包含有关使用 SubShader 代码块的信息。

有关 Shader 对象的工作原理以及 Shader 对象、子着色器与通道之间关系的信息,请参阅 Shader 对象简介。

概述

Shader 对象包含一个或多个 SubShader。通过 SubShader 您可以为不同的硬件、渲染管线和运行时设置定义不同的 GPU 设置和着色器程序。某些 Shader 对象只包含一个 SubShader;另一些包含多个 SubShader 以支持一系列不同的配置。

渲染管线兼容性

功能名称内置渲染管线通用渲染管线 (URP)高清渲染管线 (HDRP)自定义 SRP
ShaderLab:SubShader 代码块

使用 SubShader 代码块

在 ShaderLab 中,通过将 SubShader 代码块置于 Shader 代码块中,可以定义子着色器。

SubShader 代码块中,可以:

  • 使用 LOD 代码块为 SubShader 分配 LOD(细节级别)值。参阅向 SubShader 分配 LOD 值。
  • 使用 Tags 代码块将数据的键值对分配给子着色器。参阅 ShaderLab:向子着色器分配标签。
  • 使用 ShaderLab 命令将 GPU 指令或着色器代码添加到 SubShader。请参阅 ShaderLab:使用命令。
  • 使用 Pass 代码块定义一个或多个通道。参阅 ShaderLab:定义通道。
  • 使用块指定包要求。这使得 Unity 仅在安装了所需的包时运行子着色器。请参阅着色器实验室:指定包要求。PackageRequirements
签名功能
SubShader
{
    <optional: LOD>
    <optional: tags>
    <optional: commands>
    <One or more Pass definitions>
}
定义子着色器。

您可以在子着色器中定义任意数量的通道。

示例

此示例代码演示了用于创建包含单个子着色器的 Shader 对象的语法,而每个子着色器又包含一个通道。

Shader "Examples/SinglePass"
{
    SubShader
    {
        Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
        LOD 100

         // 此处是应用于整个子着色器的 ShaderLab 命令。

        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExamplePassTagKey" = "ExamplePassTagValue" }

              // 此处是应用于此通道的 ShaderLab 命令。

              // 此处是 HLSL 代码。
        }
    }
}


3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:ShaderLab-指定自定义编辑器 (mvrlink.com)

下一篇:Unity3D:ShaderLab-向子着色器分配标签 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号