Nuke Python节点动画操作

节点动画操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 设置为可key帧状态
node = nuke.toNode("Blur1")
knob = node["size"]
knob.setAnimated()

# 给指定帧数key帧,第一个参数是数值,第二个参数是帧数
knob.setValueAt(55, 10)

# 比如size属性,有x和y两个值的时候,使用第三个参数来控制
knob.setValueAt(77, 100, 0)
knob.setValueAt(88, 100, 1)

# 判断一个属性是否有关键帧
print knob.isAnimated()

# 获取key帧动画
print knob.animations()

# 只获取size属性中,h的动画
print knob.animations(1)

# 获取size属性中,h的每一个关键帧和对应的数值
animation = knob.animation(1)
for key in animation.keys():
print key.x, key.y
# x为关键帧, y为对应的数值

# 获取非关键帧的数值
print animation.evaluate(60)

# 拷贝动画
nuke.toNode("Grade1")["white"].copyAnimations(knob.animations())

# 删除关键帧
for i in knob.animations():
i.clear()
knob.deleteAnimation(i)

表达式操作

1
2
3
4
5
6
7
8
# 属性是否存在表达式
knob2 = nuke.toNode("Blur2")["size"]
print knob2.hasExpression()

# 删除表达式
for i in knob2.animations():
knob2.deleteAnimation(i)

将表达式烘培成关键帧

1
2
3
4
5
6
7
8
9
10
11
12
13
node = nuke.selectedNode()
first = 1
last = 100

for k in node.knobs():
knob = node[k]
if knob.hasExpression():
curves = knob.animations()
for c in curves:
for f in range(first, last):
value = c.evaluate(f)
c.setKey(value, f)
c.setExpression("curve")