【问题标题】:Force compute when transform node changes (Maya Plugin)变换节点更改时强制计算(Maya 插件)
【发布时间】:2012-08-09 03:24:25
【问题描述】:

使用attributeAffects 函数可以链接Maya 节点的两个属性。例如,输入属性x 可以链接到输出属性y。这意味着当x 发生更改时,Maya 将在给定节点上运行compute() 回调函数,以计算y

但是,据我所知,只有节点本身的属性才能像这样从插件内部连接。

在我的插件中,我扩展了一个MPxLocator,并设置了输出属性out。我想做以下事情:

# replace <...> with transform node name.
attributeAffects(CustomNode.out, <custom node's tranform node>.translateX)
attributeAffects(CustomNode.out, <custom node's tranform node>.translateZ)

我根本找不到任何有关如何执行此操作的文档!有人做过/知道怎么做吗?有一种方法可以通过在脚本编辑器 (python) 中执行以下操作来破解:

import maya.cmds as cmds

# Creates CustomNode1, which is linked to transform1 in the DG.
cmds.createNode("CustomNode") 
cmds.connectAttr("transform1.translateX", "CustomNode.out")
cmds.connectAttr("transform1.translateZ", "CustomNode.out")

【问题讨论】:

    标签: python plugins maya


    【解决方案1】:

    一个节点按设计不应该知道其他节点。也就是说,如果节点有一些它需要的数据,那么这些数据需要是内部的,或者在创建时或由用户连接。这就是使 Maya 高效的原因。并不是 Maya 实际强制执行此操作,而是忽略此设计理念会让您非常不高兴,因为您一直在与 Maya 作斗争(加上它更多,极易出错,需要维护的代码)。

    因此,您有 2 个选择:

    • 创建 2 个输入属性并读取它们(在您使用时创建 3 个,然后您可以连接所有翻译)。这种方法的好处是,现在任何 Maya 用户都可以使用您的节点做一些您没想到的事情。这就是所有其他 Maya 节点的工作方式。大多数工厂节点都提供了创建节点的命令,因此它们可以将预期的连接连接到其余节点。希望做其他事情的用户总是可以使用 createNode。所以不,如果你不连接到 out 属性,这并不是真正的黑客攻击。
    • 碰巧 locator 节点已经知道其父节点的变换,形式为 DAG 节点继承属性 parentMatrix ,现在这不是局部坐标父级的,但它在世界空间坐标中。现在这也是 Maya 建立的连接,但它是一种隐藏的连接类型。*

    这些是您唯一明智的选择。但是,如果您真的必须这样做,您也可以按照您的要求进行操作,但是您将在免费的性能优化 Maya 用品的基础上进行自己的事件监控。它需要一些额外的代码和更多的调试,而且它在各方面都会逊色。

    PS:您的 hack 起作用的原因是 Maya 以相反的方式评估连接,因此如果您将输出弄脏并且要求 Maya 评估输出,那么 Maya 将触发计算

    *就像时间一样,如果您创建一个名为时间类型的属性,那么 Maya 会在不询问和显示的情况下为您连接它,除非您将它连接到其他东西。着色主要基于这些连接。

    【讨论】:

    • 很好的答案。我不太了解 Maya 节点背后的语义,但这对我来说现在更清楚了——你说的很有意义。谢谢!
    • 还有一件事可以让您从了解中受益。如果你组织你的代码正确,那就是你只计算每个请求的最小数量的插槽,即使是内部的输入和输出。这意味着您检查 Maya 的请求。然后,您可以创建一个节点来缓存结果而无需您这样做,并且它始终以正确的顺序进行评估。它允许您在节点内部计算之间注入不同的节点。您可以使用许多 Maya 工厂节点来执行此操作,例如运动路径方位计算,甚至所有计算都在节点内部进行。所以在节点中的方式节点。
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 2020-09-02
    • 2011-04-21
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多