docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    关键字

    描述

    您可以使用关键字(Keywords) 为 Shader Graph 创建不同的变体(variants)。根据关键字的设置和编辑器中的设置,构建管线可能会剥离这些变体。

    关键字的用途很多,例如:

    • 创建具有可为每个材质实例打开或关闭的功能的着色器。
    • 创建具有在某些平台上表现不同的功能的着色器。
    • 创建可根据各种条件扩展复杂度的着色器。

    关键字分为三种类型:布尔(Boolean)、枚举(Enum)和内置(Built-in)。根据其类型,团结引擎在图形、着色器以及材质检视面板(可选)中定义了一个关键字。有关关键字类型的更多信息,请参阅布尔关键字、枚举关键字和内置关键字。有关这些关键字如何影响最终着色器的更多信息,请参阅有关编写多个着色器程序变体文档。

    在 Shader Graph 中,首先在 Blackboard 上定义一个关键字,然后使用一个 Keyword 节点在图形中创建一个分支。

    编辑器能够在需要时按需编译变体,以便渲染内容。如果声明了许多不同的变体,可能会出现数百万甚至数万亿种可能性。然而,Player 在构建时需要确定哪些变体会被使用,并在预编译着色器时包含这些变体。为了有效管理内存,Player 会根据关键词和编辑器设置剥离未使用的变体。请参阅下一节 通用参数,了解如何提示 Player 哪些内容需要编译,哪些可以忽略。如果在构建过程中 Player 剥离了某个变体,则会显示粉色的错误着色器。

    通用参数

    尽管特定类型的关键字有其特定的字段,但所有关键字都具有以下参数。

    名称 类型 描述
    Display Name 字符串 关键字的显示名称。团结引擎会在引用相应关键字的节点的标题栏中显示此名称,如果显示(expose)该关键字,也会在材质检视面板中显示此名称。
    Exposed 布尔值(Boolean) 如果将其设置为 true,团结引擎在材质检视面板(Material Inspector)中显示相应的关键字。如果将其设置为 false,关键字不会出现在材质检视面板中。

    如果您打算访问全局(GLOBAL)着色器变量,请像添加输入变量一样将其添加,但取消勾选 Exposed 选项。
    Reference Name 字符串 关键字在着色器中的内部名称。

    如果您覆盖了 Reference Name 参数,请注意以下几点:
    • 关键字 Reference Name 始终为全大写,因此团结引擎将所有小写字母转换为大写字母。
    • 如果 Reference Name 包含任何 HLSL 不支持的字符,团结引擎将用下划线替换这些字符。
    • 右键单击 Reference Name,然后选择 Reset Reference 可恢复为默认的 Reference Name。
    Definition 枚举 设置如何在着色器中定义关键字。

    有三个可用选项。
    • Shader Feature:团结引擎在构建时剥离未使用的着色器变体。
    • Multi Compile:团结引擎从不剥离任何着色器变体。
    • Predefined:表示活动的渲染管线已经定义了这个关键字,所以 Shader Graph 在它生成的代码中不再对其进行定义。
    Scope 枚举 设置定义关键字的范围。

    有以下几个可选项
    • Global Keywords:为整个项目定义关键字,并计入全局关键字限制。
    • Local Keywords:只为一个着色器定义关键字,它有自己的本地关键字限制。
    当您使用预定义关键字时,团结引擎会禁用此字段。
    Stages 设置关键词应用的阶段。

    可用的选项如下:
    • All:将该关键词应用于所有着色器阶段。
    • Vertex:将该关键词应用于顶点阶段。
    • Fragment:将该关键词应用于片段阶段。

    布尔关键字

    布尔关键字(Boolean Keywords) 有开启或关闭两种状态。这会产生两种着色器变体。如果 Exposed 参数设置为 true,团结引擎会在材质检视器中显示布尔关键字。要从脚本中启用该关键字,可以使用关键字的引用名称调用 EnableKeyword。DisableKeyword 方法用于禁用该关键字。要了解更多关于布尔关键字的信息,请参阅着色器变体和关键字。

    特定于类型的参数

    除了上面列出的常用参数,布尔关键字还有以下附加参数。

    名称 类型 描述
    Default 布尔值 (Boolean) 启用复选框将关键字的默认状态设置为打开,禁用复选框将其默认状态设置为关闭。

    此复选框确定 Shader Graph 生成预览时要用于关键字的值。当您使用此着色器创建新材质时,它还定义了关键字的默认值。

    枚举关键字

    枚举关键字(Enum Keywords) 可以有两个或多个状态,这些状态可在 Entries 列表中定义。如果暴露枚举关键字,其 Entries 列表中的 Display Names 将出现在材质检视面板中的下拉菜单中。

    特殊字符,如 ( ) 或 !@ 在枚举关键字的 Entry Name 中是无效字符。Shader Graph 将无效字符转换为下划线 ( _ )。

    定义枚举关键字时,Shader Graph 会将一个经过清理的 Entry Name 版本附加到主 Reference 名称来定义每个状态。通过脚本控制关键字时,使用 Material.EnableKeyword 或 Shader.EnableKeyword 函数,可以按照格式 {REFERENCE}_{REFERENCESUFFIX} 输入状态标签。例如,如果你的引用名称是 MYENUM,所需的条目是 OPTION1,那么你应该调用 Material.EnableKeyword("MYENUM_OPTION1")。当选择一个选项时,这会禁用其他选项。

    特定于类型的参数

    除了上面列出的常用参数,枚举关键字还有以下附加参数。

    名称 类型 描述
    Default 枚举 从下拉菜单中选择一个条目,以确定在 Shader Graph 生成预览时要为关键字使用的值。当您使用此着色器创建新材质时,它还定义了关键字的默认值。当您编辑 Entries 列表时,Shader Graph 会自动更新此下拉菜单中的选项。
    Entries 可重新排序的列表 此列表定义了关键字的所有状态。每个状态都有独立的 Display Name 和 Reference Suffix。
    • Display Name:在Graph Inspector 和材质检视面板中,显示在关键字的下拉菜单中。Shader Graph 也将此名称用于引用关键字的节点上的端口标签。
    • Reference Suffix:Shader Graph 使用此后缀在着色器中生成关键字状态。

    内置关键字

    内置关键字(Built-in Keywords) 始终是布尔关键字或枚举关键字,但它们的行为略有不同。内置关键字的值由 Editor 或活动的渲染管线设置,无法编辑。

    在 Graph Inspector 的 Node Settings 选项卡中,所有内置关键字字段均显示为灰色,但 Default 字段除外,您可以启用或禁用该字段,使其在 Shader Graph 预览中的显示有所差异)。内置关键字也无法在材质检视面板中暴露。

    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)