首页 > 解决方案 > 链接程序创建的 2 个不同节点中的两个字段

问题描述

我正在创建一个 nuke 节点来轻松操纵节点中的不同灯光。我想对其进行编码,这样任何给定文件中有多少灯都无关紧要,代码可以弄清楚并显示修改它们的必要工具。为了实现这一点,我首先确定文件中有多少灯光并存储该值,然后将其馈送到“for”循环以创建与原始文件上的灯光一样多的节点和工具。“tempNumber”是分配给文件中原始灯光的编号,它有助于创建和管理所有工具,并标记为与他们正在修改的灯光相匹配。它变得复杂,因为生成的节点名称如下所示:

globals()['expoParent{}'.format(tempNumber)]

到目前为止,一切都运行良好,但我一直在尝试链接两个不同的 Exposure 节点以反映用户修改它们时的相同值。为此,我在单独的脚本中创建了此代码:

par = nuke.nodes.EXPTool(mode = 'Stops', name = 'Parent')

chi = nuke.nodes.EXPTool(mode = 'Stops', name = 'Child')

par.knob('knobChanged').setValue('chi["red"].setValue(par["red"].value())\nchi["green"].setValue(par["green"].value())\nchi["blue"].setValue(par["blue"].value())')

前面这段代码完美运行,它创建了 2 个 Exposure 节点,并将 Child 链接到 Parent,以便对 Parent 所做的任何更改都会立即自动传递给 Child。现在,当我尝试用parand替换变量时,问题就来了。此时代码停止工作,链接不成功。我读过很多人说不应该通过 for 循环创建变量,但我没有看到任何其他方法。chiglobals()['expoParent{}'.format(tempNumber)]globals()['expoChild{}'.format(tempNumber)]

标签: pythonnodeslightingnuke

解决方案


当您可以将节点字段与表达式链接时,为什么要使用knapChanged 函数呢?

这是一个链接两个成绩节点(Grade1 和 Grade2)的示例,其中 Grade1 作为父级。在运行代码之前,您需要在脚本中包含这些。尽管您也可以按程序创建它们。

parent = nuke.toNode('Grade1')
child = nuke.toNode('Grade2')

child['multiply'].setExpression('%s.multiply' % parent.name())

这更简洁,并且也可以在节点树中直观地表示。


推荐阅读