Nuke Gizmo制作

zhangly 2021-11-05 23:16:35
Categories: > Tags:

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

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

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()
''')