Nuke tcl脚本

TCL 帮助文档

http://www.nukepedia.com/reference/Tcl/

basic表达式

pi: 圆周率pi
x, y: x和y的坐标
width, height: 长和宽
frame: 当前帧
first_frame, last_frame: 工程的第一帧,和最后一帧

?: 判断表达式,例子 frame<50?1:0, 当帧数为50的时候,
值为1,否则为0。

它也可以进行多层嵌套:frame<50?(frame>25?0.5:1):0

math

sqrt(a) 开根号

hypot(a, b) 先把a和b平方结果相加,再开根号

pow(a, b) 幂函数,返回a的b次方a

bs(a) 取绝对值

min(a, b), max(a, b) 返回参数的最小,最大值

clamp(a, x, y) 将a的值限制在x和y之间
if a<x, a==x;if a>y, a==y
如果不传参,x和y的默认值为0和1。

取整

int(a) 直接去小数点取整

ceil(a) 向上取整

floor(a) 向下取整

角度弧度计算

degrees(pi) 返回180 (公式为:180 * 弧度 / pi)
radians(180) 返回3.14159

sin cos tan asin acos atan 三角函数

noise random 噪波和随机函数

curve 关键帧
默认的给动画key了关键帧,右键打开表达式,都会显示一个curve的函数

可以对其进行修改(修改后,虚线为之前的实线为修改后的):curve(1) 将所有关键帧都改为第一帧的数值
curve(frame) 没有任何更改,曲线为每一帧本身的数值
curve(frame+10) 向前偏移10帧
curve(frame+TimeOffset2.time_offset) 关联节点”TimeOffset2”的time_offset参数

一个例子: transform节点位移的时候指针始终指向位移的方向。
degrees(atan(translate.y.derivative/translate.x.derivative))

判断像素是否正常
有时候会遇到rgb的数值,为inf或者为nan
为素材添加一个Expression节点(这里的例子是红通道为inf,绿通道为nan)
isinf(r)?0:r isnan(r)?0:g

input
一个节点的input端口
可以用在继承节点input端口的某个属性
input0.white (这里是创建了两个Grade节点为例子)

topnode
一套节点的最上一个节点
[topnode].boxsize (这里继承的是一个CheckerBoard节点的boxsize参数)

parent
父节点,比如将两个节点打包,整个包就是被打包节点的父节点。
用法:
可以在group上添加一个knob,比如名为test_a
然后在group里选择一个节点属性,添加表达式
parent.test_a

value
返回指定参数的值
比如创建一个Blur节点
在节点Node标签,Label里写
[value size]

或者使用[python int(5.0)] (这里显示的是python运行这行代码的输出结果)

inrange(a, x, y)
数值a是否在x到y的范围内,
如果a在x到y的范围内,返回1
反之,则返回0.

这里的一个例子是,后台渲染的时候,开启defocus节点,
当nuke以Gui打开的时候,禁用defocus节点。

这里会用到nuke的一个变量,$gui
当nuke以窗口打开的时候 $gui 为1,以后台打开则为0

在defocus节点的disable属性添加一个表达式
$gui