参数

参数将着色器图中的常数值公开为一个具名的 GLSL Uniform,您可以在 Kanzi Studio 中调整它。如果不使用参数,常数节点的值会作为字面量烘培到生成的着色器中。要更改该值,您必须编辑图并重新生成着色器。将常数提升为参数后,生成的着色器会将其声明为 uniform,并且 Kanzi Studio 会在使用该着色器图的材质的 Properties 面板中显示它,这样设计师和集成人员无需重新打开 Shader Graph Editor 即可在运行时调整该值。

备注

参数是实验性着色器图编辑器的一部分。要启用该编辑器,请参阅 启用着色器图编辑器。

将常数提升为参数

要提升常数节点:

  1. 在 Shader Graph Editor 中,右键单击您要公开的常数节点。

  2. 选择 Promote to Parameter。

    ../../_images/promote-to-parameter.gif

Kanzi Studio 会从该节点创建一个参数,将其添加到 Parameters 面板,并将该节点绑定到新参数。下次生成着色器时,Kanzi Studio 会为该值生成 uniform 声明,而不是内联字面量。

您可以提升以下类型的常数节点:

常数节点

参数类型

Scalar

float

Int

int

Vec2

vec2

Vec3

vec3

Vec4

vec4

Color (RGB)

color(alpha 固定为 1)

Color (RGBA)

颜色

Texture

texture

数学节点、内置节点和输出节点无法提升。

使用 Parameters 面板

Parameters 面板列出图中的所有参数。每一行显示参数名称以及一个根据类型适配的默认值编辑器。

../../_images/parameters-panel.gif

编辑器会根据参数类型进行调整:

  • float 和 int:数值输入框。

  • vec2、vec3、vec4:一行带标签(X/Y/Z/W)的输入框。

  • color:颜色选择器,当源节点具有 alpha 通道时还带有 alpha 滑块。

  • texture:纹理选择器。

编辑默认值

在 Parameters 面板中编辑值字段。Kanzi Studio 会将新的默认值应用到绑定到该参数的每个节点。下次生成着色器时,新的默认值将作为 uniform 的初始值输出。

../../_images/editing-parameter-default.gif

重命名参数

编辑参数行的名称字段。新名称会显示在 Parameters 面板中,并在下次生成着色器后显示在使用该着色器图的材质的 Properties 面板中。

选择绑定的节点

要查找参数驱动的节点,请点击参数行上的 Select instances。Kanzi Studio 会在画布上选中绑定到该参数的每个节点。

../../_images/selecting-bound-nodes.gif

添加更多绑定的节点

将参数行拖动到画布上。Kanzi Studio 会创建一个绑定到该参数的新常数节点。所有绑定的节点共享该参数的默认值。编辑默认值时,每个绑定的节点都会随之更新。

../../_images/adding-bound-node.gif

取消提升(删除参数)

取消提升有两种方式,作用范围不同:

  • 解除单个节点的绑定: 右键单击绑定的常数节点,然后选择 Unpromote from Parameter。Kanzi Studio 仅移除该节点的绑定。在下次生成的着色器中,该节点会将其当前值保留为内联字面量。该参数仍保留在 Parameters 面板中,并继续驱动仍绑定到它的其他节点。

    ../../_images/unpromote-from-parameter.gif
  • 删除参数: 点击参数行上的垃圾桶图标。Kanzi Studio 会询问您是:

    • 仅删除参数。绑定的常数节点保留在画布上,并将其最后的值作为内联字面量。

    • 删除参数以及绑定到它的每个节点。

    ../../_images/delete-parameter.gif

移除参数的最后一个绑定后(无论是逐个解除节点绑定还是删除参数),下次生成的着色器会重新内联常数值,而不再声明 uniform。

在 Kanzi Studio 中调整参数

图中的每个参数都会成为使用该着色器图的材质上的一个属性。生成着色器,然后在 Kanzi Studio 中:

  1. 在 Library > Materials and Textures > Shader Graphs 中,选择包含参数的着色器图。

  2. 在 Properties 中,找到名称与该参数匹配的属性。

  3. 像编辑任何内置材质属性一样编辑该属性。

    ../../_images/studio-properties-panel.png

您在 Properties 面板中所做的更改会回传到 Shader Graph Editor:新值成为参数的默认值,并且绑定到该参数的每个节点都会相应更新。

../../_images/tuning-parameter-in-studio.gif

借助这种双向同步,着色器图作者可以发布一组精选的可调值,设计师和集成人员无需改动着色器图本身即可调整这些值。

生成的 GLSL:Uniform 与字面量

提升常数会使生成的 GLSL 从内联字面量变为 uniform 声明。

提升前: 值为 (0.8, 0.2, 0.5) 的 Vec3 常数直接内联到着色器中:

void main() {
    vec3 baseColor = vec3(0.8, 0.2, 0.5);
    /* ... */
}

提升之后: 同一个值会成为 Kanzi Studio 在着色器顶部声明的 uniform,其余代码读取该 uniform:

uniform vec3 u_MyMaterial_param_1;

void main() {
    vec3 baseColor = u_MyMaterial_param_1;
    /* ... */
}

Kanzi Studio 只为 Output 节点通过着色器图可以到达的参数声明 Uniform。绑定节点未连接的参数不会出现在生成的着色器中。

对于纹理参数,Kanzi Studio 还会生成一个小型包装函数,用于对纹理采样并公开 RGBA 通道,使着色器图的其余部分能够像读取 Texture 节点一样读取该纹理。

另请参阅

着色器图(实验性)

创建着色器图

材质类型和材质