Q100136:如何利用程序化工作流程,通过 OpScript 在场景图位置之间复制属性

概括

本文介绍如何使用 OpScript 节点在场景图位置之间复制属性。

更多信息

Katana中,可以使用 SetAttribute 节点轻松设置位置属性。但是,如果您想将一个位置上设置的属性复制到另一个位置,则可以使用 OpScript 节点和几行代码来实现。

尽管名称暗示着类似的功能,但AttributeCopy节点不能用于此目的。

AttributeCopy 函数会遍历位于 fromRoot 位置的 copyFrom 场景和位于 toRoot 位置的输入场景。它期望从这些位置开始找到相同的层级结构和位置名称。
AttrCopySS.png
这意味着,要复制属性的两个位置的所有子节点必须具有相同的层级结构和相同的名称。这样才能确保 AttributeCopy 节点将正确的属性复制到正确的位置。
该节点之所以这样工作,是因为它被设计用来复制已修改的不同节点图中的场景之间的属性,但这些场景使用相同的资源,因此它们的场景图层次结构和位置名称是相同的。
要在同一场景图中的不同位置之间复制属性,可以使用调用CopyAttr()命令的 OpScript。具体操作如下:
1) 创建一个 OpScript 节点,并将其applyWhere参数设置为at locations matching CEL
2) 添加三个名为attrFromattrTosourceLocation的用户参数。有关如何向节点添加用户参数的说明,请参阅Katana 用户指南中的“添加用户参数”部分
3) sourceLocation参数的值应该是要从复制属性的场景图位置的路径。
4) CEL 语句应该是要将属性复制到的场景图位置的路径。
5) 在attrFrom文本字段中输入要从复制的属性的名称。
6) 将要复制的属性名称添加为attrTo参数值。
7) 在 OpScript 节点的Script参数中添加以下 lua 代码:
 local attrFrom = Interface.GetOpArg("user.attrFrom"):getValue()
local attrTo = Interface.GetOpArg("user.attrTo"):getValue()
local sourceLocation = Interface.GetOpArg("user.sourceLocation"):getValue()
Interface.CopyAttr(attrTo, attrFrom, true, sourceLocation)

请注意,此方法仅适用于引用本地属性。如果要复制的属性继承自父级位置,则需要将最后一行修改为:
 Interface.SetAttr(attrTo, Interface.GetGlobalAttr(attrFrom, sourceLocation))

    我们很遗憾听到

    请告诉我们