子图形
描述
子图形是一种特殊类型的 Shader Graph,可从其他图形内部引用。希望在一个图形中或多个图形之间多次执行相同的操作时,这非常有用。子图形在 3 个方面不同于 Shader Graph:
- 当子图形在另一个图形中被引用时,子图形的 Blackboard 中的 Properties 定义 Sub Graph 节点的输入端口。
- 子图形具有其自身的资源类型。如需了解更多信息,包括如何创建新的子图形的操作,请参阅子图形资源。
- 子图形没有主栈。但是,有一个称为 Output 的节点。
有关子图形组件的信息,请参见子图形资源。
Output 节点
当子图形在另一个图形中被引用时,Output 节点定义 Sub Graph 节点的输出端口。要添加和删除端口,单击 Sub Graph Output 节点,使用 Graph Inspector 的 Node Settings 选项卡中的 Custom Port Menu 进行操作。
用于子图形的预览由其 Output 节点的第一个端口决定。第一个端口有效的数据类型是 Float
、Vector 2
、Vector 3
、Vector 4
、Matrix2
、Matrix3
、Matrix4
和 Boolean
。任何其他数据类型在预览着色器和子图形中都会产生错误。
子图形和着色器阶段
如果子图形中的节点指定了一个着色器阶段(例如,Sample Texture 2D 节点如何指定片元着色器阶段),则编辑器将整个子图形锁定到该阶段。任何指定了不同着色器阶段的节点都无法连接到 Sub Graph Output 节点,并且编辑器将引用该图形的任何 Sub Graph 节点也将锁定到该着色器阶段。
从 10.3 开始,子图形的 Texture 和 SamplerState 类型输入和输出受益于改进的数据结构。详细解释见自定义函数节点。
子图形和关键字
子图形中的 Blackboard 上定义的关键字行为类似于常规 Shader Graph 中的行为。将 Sub Graph 节点添加到 Shader Graph 中时,Unity 还会在 Shader Graph 中定义该子图形中的所有关键字,以便子图形按预期工作。
要在 Shader Graph 中使用 Sub Graph 关键字,或在材质检视面板中显示该关键字,请将其从子图形复制到 Shader Graph 的 Blackboard 上。