节点闭包

闭包 允许将自定义功能传递到节点组中。它就像函数的输入,使用户定义的行为能够在另一个节点树中进行评估。

通过允许用户将节点网络的一部分注入到另一个节点网络中,闭包使节点组更加灵活和可复用。这允许构建更高层次的工具,其中过程的特定部分可以在不修改组本身的情况下进行定制。

../../../../../../_images/nodes_closure_example_scatter_functions.png

使用闭包来自定义地形生成器中的树木散布。

概览

闭包是一种表示可调用节点图的接口类型。它们定义了一组输入和输出,这些输入和输出可以通过解算闭包节点在另一个节点组中进行评估。

当闭包连接时,其内部节点图会被 注入 到使用该闭包的节点组的解算过程中。这使得程序化系统在保持灵活性的同时,也能提供清晰且可定制的控制点。

闭包可视为节点组的函数参数。它们允许用户在父节点树定义的受控环境中执行操作。

节点

闭包可通过以下节点进行创建和解算:

接口同步

闭包使用接口名称来匹配其输入和输出。如果两个闭包节点已连接但签名不匹配,Blender 可自动提供同步功能。

  • 节点首次连接时,同步会自动进行。

  • 现有接口不会自动更新,以避免覆盖用户数据。

  • 当检测到数据不匹配时,节点标题栏会显示一个 按钮(同步接口),允许手动执行同步操作。

例子

当需要用户自定义节点组的逻辑时,闭包非常实用。例如,地形生成器可以使用闭包来定义树木的摆放位置:

  • 解算闭包节点被放置在树木实例分布的位置。

  • 组界面会显示一个闭包输入端。

  • 闭包节点已连接,定义任何自定义放置逻辑。

在解算闭包时,连接节点图的内容会在地形生成器的上下文中执行。这使得生成器能够提供稳定的基础结构(例如散布、遮罩、属性),同时用户可以提供自己的功能行为。

../../../../../../_images/nodes_closure_example.png

地形生成器节点组,通过闭包实现自定义树木放置。