gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:06 25 4
gpt4 key购买 nike

使用 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")

最佳答案

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

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

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

这些是您唯一明智的选择。但是,如果您确实需要,您也可以按照您的要求进行操作,但是您将在免费的性能优化 one Maya 提供的基础上进行您自己的事件监控。它有一些额外的代码,并且您需要进行更多的调试,而且它在所有方面都会逊色。

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

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

关于python - 变换节点更改时强制计算(Maya 插件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com