在Maya MEL脚本中评估节点

时间:2018-01-09 11:13:24

标签: maya mel

我有一个Maya MEL脚本,它插入了一些节点。评估似乎推迟到脚本完成。我想这来自于评估渲染器何时请求形状的管道,因此脏传播开始。

现在我想运行命令,如果插入的节点计算出如下的某个输出:

$node = `insertMyNode`;
dgdirty ($node+".outputAttr");
if(`getAttr ($node+".outputAttr")` == 1) {
    print("true");
} else {
    print("false");
}

这总是打印错误。当我插入节点然后在MEL编辑器中运行getAttr ($node+".outputAttr")时,计算节点并得到1

我也尝试了dgeval,但它也没有用。我认为原则上既不需要dgeval也不需要dgdirty,但getAttr应该开始脏传播。 但它总是返回节点的默认值,而不是评估的节点。

dgdirty $node对我有用,但我仍然只想弄脏我正在使用的输出(如果可能的话,自动,而不是用于记录用于调试目的的命令),因此节点不需要重新计算所有输出。

myNode定义了inputMesh参数,该参数在其C ++代码中使用outputAttr影响输出bool attributeAffects值。 insertMyNode命令连接输入网格。没有连接到输出插头就不计算节点是正确的,但是在读取插头时应该计算它。当我打开节点编辑器并将鼠标悬停在输出插件上时,会正确计算节点。我希望getAttr在上面的示例代码中也这样做。

1 个答案:

答案 0 :(得分:1)

如果您弄脏输入属性并请求输出属性,则脏传播通常有效。似乎你弄脏了一个输入属性并尝试获得相同的输入属性。通常在一个节点中,这是用"影响"例如:affects(attrA, attrB).如果请求了attrB,则调用compute()方法。 所以我想如果你试图获得一个输出属性它会更好。