Unity3D Shader Graph帮助文档 8:Custom function node

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

原文地址

8 Custom Function Node

8.1 Description

Shader Graph使您可以在Unity中轻松编写自定义着色器。但是,由于我们的默认节点无法覆盖您要制作的所有内容,因此该软件包,现在在节点库中带有 Custom Function(自定义功能) 节点。

通过 Custom Function 节点,可以将 【Custom Port】 菜单,在节点本身上定义自己的输入和输出端口。

8.2 How to Use

使用 【Create Node】 菜单创建 Custom Function 节点。 默认情况下,新的 Custom Function 节点没有任何输入或输出端口。

使用节点右上角的齿轮图标打开 【Custom Port】 菜单和 【Custom Function】 菜单。

8.3 Custom Function Menu

Menu Item Description
Inputs 【Custom Port】 菜单,用于定义节点的输入端口。
Outputs 【Custom Port】 菜单,用于定义节点的输出端口。
Type 可以在其中设置功能类型的下拉菜单。 选择【File】以引用外部文件,或选择【string】以直接向节点输入功能。
Name 最终生成的代码中的自定义函数的名称。
Source 引用外部HLSL包含文件的asset字段。 仅在 File 模式下可用。
Body 您在其中输入HLSL代码的文本框。 仅在 string 模式下可用。

8.4 Defining the Function via String

如果选择 String 模式,则SG图将生成着色器功能。 Name 字段定义了所生成函数的名称,而 Body 字段定义了所生成函数的内容。参数,花括号和缩进范围会自动处理。在 String 模式下,填写 Body 字段时,可以使用标记$precision而不是halffloat。 处理该节点时,将根据该节点的精度将其替换为正确的类型。

上面的示例生成以下函数::

8.5 Defining the Function via File

如果选择 File 模式,则图形不会自动生成着色器功能函数。 File 模式将在最终生成的着色器中插入一个包含引用,并使用引用文件中的功能。 Name 字段必须与您要调用的函数的名称匹配。 Source 字段指定了对包含该函数的HLSL文件的引用。

Custom Function 节点上使用 File 模式时,必须手动正确格式化函数。 为SG图创建自定义函数时要注意的一件事是精度后缀。 生成的代码在函数名称后附加一个精确的后缀。您的包含文件函数还必须附加所需的精度后缀(如下面的_float所示),或包含带有_float和_half后缀的多个函数,但您的 Name 字段不得包含精度后缀。

File 模式通过图形中的自定义功能提供了更大的灵活性。 您可以在函数范围之外定义uniform变量,如此处所示的矩阵。

您可以在同一文件中定义多个函数,然后从引用的函数中调用它们。 或者,您可以引用相同的文件,但使用来自不同 Custom Function 节点的不同功能。您甚至可以包括包含其他函数的其他文件。

8.6 Reusing Custom Function Nodes

Custom Function 节点本身就是一个单节点实例。如果希望在不重新创建输入,输出和函数引用的情况下重复使用相同的自定义函数,请使用子SG图。 子图显示在 【Create Node】 菜单中,它们允许您共享或重复使用自定义功能。

直接在子SG图中创建您的自定义函数,或者右键单击现有的 Custom Function 节点,然后选择 【Convert to Sub Graph】 。 使用 Blackboard【Custom Port】 菜单添加适当的输入和输出端口。此后,即使在其他子SG图中,您也可以根据需要多次重复使用自定义函数。