docs.unity3d.com
    显示 / 隐藏目录

    关键字

    描述

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

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

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

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

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

    通用参数

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

    名称 类型 描述
    Display Name 字符串 关键字的显示名称。Unity 会在引用相应关键字的节点的标题栏中显示此名称,如果暴露该关键字,也会在材质检视面板中显示此名称。
    Exposed 布尔值 (Boolean) 如果将其设置为 true,Unity 在材质检视面板中显示相应的关键字。如果将其设置为 false,关键字不会出现在材质检视面板中。
    Reference Name 字符串 关键字在着色器中的内部名称。

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

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

    • Global Keywords:为整个项目定义关键字,并计入全局关键字限制。
    • Local Keywords:只为一个着色器定义关键字,它有自己的本地关键字限制。

    当您使用预定义关键字时,Unity 会禁用此字段。

    布尔关键字

    布尔关键字:打开或者关闭。这会产生两个着色器变体。Shader Graph 使用 **Reference ** 名称字段的值用于打开状态,并自动将关闭状态定义为下划线 ( _ )。

    要在材质检视面板中暴露布尔关键字,其 Reference 名称必须包含 _ON 后缀。例如:BOOLEAN_A506A032_ON。

    特定于类型的参数

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

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

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

    枚举关键字

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

    定义枚举关键字时,Shader Graph 会将一个经过清理的 Entry Name 版本附加到主 Reference 名称来定义每个状态。您可以在 Reference Suffix 下方右侧看到经过清理的 Entry Name 版本。Shader Graph 使用 {Reference}_{ReferenceSuffix} 模式来定义大多数条目,但要注意它使用 else 语句来选择最后一个条目,它将其视为关闭状态。

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

    特定于类型的参数

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

    名称 类型 描述
    Default 枚举 从下拉菜单中选择一个条目,以确定在 Shader Graph 生成预览时要为关键字使用的值。当您使用此着色器创建新材质时,它还定义了关键字的默认值。当您编辑 Entries 列表时,Shader Graph 会自动更新此下拉菜单中的选项。
    Entries 可重新排序的列表 此列表定义了关键字的所有状态。每个状态都有独立的 Display Name 和 Reference Suffix。

    •** Display Name:在Internal Inspector 和材质检视面板中,显示在关键字的下拉菜单中。Shader Graph 也将此名称用于引用关键字的节点上的端口标签。
    •
    Reference Suffix**:Shader Graph 使用此后缀在着色器中生成关键字状态。

    内置关键字

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

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

    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)