Nuke Gizmo制作

gizmo制作

在nuke中选中一些节点,按ctrl+g打包组,一个gizmo节点就做好了。

ctrl+回车键,进入组

两种方法进行组和组内节点的关联
1.在gizmo组节点上右键Manage User Knobs,再点击pick
找到组内节点的属性添加进来。

2.在gizmo组上添加一个knob (例: Floating Point Slider),real_name名为size
再进入组内,在比如Blur节点上,给size属性右键添加表达式
parent.size

关联组内的switch节点,添加一个下拉框的knob名为switch:
在switch节点上添加表达式 parent.switch

关联组内一个节点的激活状态,添加一个checkbox knob,名为premulut
在组内找到节点的disable属性,添加表达式:
1-parent.premulut

两个例子

给这个gizmo节点添加knobChangedScript,
实现激活名为test勾选框的时候,test_value属性变为可控。
Add - Python Custom

1
2
3
4
5
6
7
8
9
10
nuke.thisNode()["knobChanged"].setValue('''
tn = nuke.thisNode()
tk = nuke.thisKnob()
if tk.name() == "test":
if tk.value() == 1:
tn.knob("test_value").setenabled(True)
else:
tn.knob("test_value").setenabled(False)
''')

让gizmo节点实现一个功能,每添加一个输入端,则添加一个额外的输入端。
同样写在Python Custom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
nuke.thisNode().knob("knobChanged").setValue('''
tn = nuke.thisNode()
tk = nuke.thisKnob()
curInputs = tn.inputs()

# 进入这个节点
tn.begin()
pos1x = nuke.toNode("Input1")["xpos"].value()
pos1y = nuke.toNode("Input1")["ypos"].value()
existInputs = len(nuke.allNodes("Input"))
if existInputs == curInputs:
nuke.nodes.Input(name="Input%s" % str(existInputs + 1),
xpos=pos1x + 100*existInputs,
ypos=pos1y)
extraInputs = existInputs - curInputs
if extraInputs > 1:
inputNodes = nuke.allNodes("Input")
for node in inputNodes:
if int(node.knob("name").value().split("Input")[1]) > curInputs + 1:
nuke.delete(node)
tn.end()
''')