Nuke python开发基础

Nuke开发相关的文档

Nuke官方的一个技术支持论坛:https://support.foundry.com/hc/zh-cn

Python开发文档:https://learn.foundry.com/nuke/developers/11.2/pythondevguide/

Python API文档:https://learn.foundry.com/nuke/developers/11.2/pythonreference/

Nuke TCL教程:https://www.yiibai.com/tcl

节点操作

获取节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 已知节点的名称,使用toNode函数获取,返回一个节点对象。
nuke.toNode('Text1')

# 获取当前选择的单个节点,返回一个节点对象。
nuke.selectedNode()

# 获取当前选择的多个节点,返回一个列表。
nuke.selectedNodes()

# 获取工程所有节点
all_nodes = nuke.allNodes()

# 获取工程所有指定类型的节点
all_dot_nodes = nuke.allNodes("Dot")

这里我们选择的是Text类型的节点,为何这里返回的是Text2。
是因为Nuke经过多年的发展,少部分的节点分为第一代和第二代。
在新版本中,默认我们创建的是第二代节点。

root相关操作

1
2
3
4
5
# 获取nuke文件路径
nuke.root().name()

# 获取项目设置的起始帧
nuke.root().firstFrame()

获取或设置节点某个属性

1
2
3
4
5
6
7
8
9
10
11

# 获取cliptype的值
t = nuke.toNode('Text1')
print t['cliptype'].value()
>>> format

# 改变cliptype的值
t['cliptype'].setValue('bbox')

# 因为这个值是一个下拉菜单,所以可以传index参数
t['cliptype'].setValue(4)

创建一个节点

1
2
3
4
5
6
7
8
9
10
11
# 这种方式适合nuke界面打开的时候,代码执行后会跳转到节点的属性编辑窗。
nuke.createNode('Write')

# 这种方法适合没有打开nuke,在后台的一些操作。
nuke.nodes.Write()

# 创建节点,忽略弹出属性窗口
nuke.createNode("Blur", inpanel=False)

# 创建节点的时候,设置节点属性
nuke.nodes.Dot(xpos=100, ypos=100)

删除节点

1
2
3
4
5
6
# 删除节点
nuke.delete(node)

# 删除工程中,所有dot节点
for i in nuke.allNodes("Dot"):
nuke.delete(i)

连接一个节点

1
2
3
4
5
6
7
8
9
10
t = nuke.toNode('Text1')
w = nuke.toNode('Write1')

# setInput的第一个参数是输入编号
# 第二个参数是需要连接的上游节点
w.setInput(0, t)

# 得到节点的input关系
w.input(0)
>>> Result: <Text1 at 0x000000001073FF30>

渲染一个Write节点

1
2
3
# 参数分别是Write节点名,渲染起始帧,渲染结束帧,步长。

nuke.execute('Write1', 1001, 1010, 1)

使一个节点被选择

1
2
3
# 使一个节点被选择状态
node = nuke.toNode("Grade1")
node.setSelected(True)

获取,设置节点坐标位置

1
2
3
4
5
6
7
node = nuke.toNode("Grade1")
print node.xpos()
print node.ypos()

node.setXpos(0)
node.setYpos(20)
node.setXYpos(0, 20)