Nuke节点动画操作

zhangly 2022-01-08 23:16:35
Categories: > Tags:

节点动画操作

# 设置为可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)

表达式操作

# 属性是否存在表达式
knob2 = nuke.toNode("Blur2")["size"]
print knob2.hasExpression()

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

将表达式烘培成关键帧

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")