变换节点更改时强制计算(Maya插件)

2024-05-28 22:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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)中执行以下操作来解决此问题:

^{pr2}$

Tags: 函数插件node属性节点链接customout
1条回答
网友
1楼 · 发布于 2024-05-28 22:43:02

按设计,一个节点不应该知道其他节点。也就是说,如果节点有一些它需要的数据,那么这些数据需要是内部的,或者在创建或由用户创建时连接进来。这使得Maya变得高效。并不是说Maya实际上执行了这一点,但是忽略了这个设计思想会让您非常不高兴,因为您一直在与Maya抗争(加上它更容易出错,需要维护的代码)。在

所以这给你留下了两个选择:

  • 创建2个输入属性并读取这些属性(当你使用3个属性时,你就可以连接所有的翻译了)。这种方法的好处是,现在任何Maya用户都可以对节点执行意想不到的操作。这是所有其他Maya节点的工作方式。大多数工厂节点都提供一个生成节点的命令,这样它们就可以将预期的连接连接到其他节点。希望执行其他操作的用户可以始终使用createNode。所以不,如果你不连接到out属性,这并不是真正的黑客攻击。在
  • 碰巧定位器节点已经知道其父节点的变换,以DAG节点继承的属性parentMatrix的形式,现在这不是父节点的局部坐标,而是它的世界空间坐标。现在,这也是Maya创建的连接,但它是隐藏的连接类型。*

这些是你唯一明智的选择。但如果你真的必须这样做,你也可以做你所要求的,但你将做你自己的事件监测之上的免费性能优化一个玛雅提供。这是一个额外的代码和更多的调试部分,它将在所有方面都是低劣的。在

注:你的破解之所以奏效,是因为Maya对连接的求值方式与它们的生成方式相反,因此如果你使输出变脏,并且要求Maya评估输出,则Maya将启动计算

*与时间一样,如果创建名为time of time type的属性,则Maya将在不询问和显示的情况下为您连接该属性,除非您将其连接到其他对象。着色主要基于这些连接。在

相关问题 更多 >

    热门问题