Nuke 常用表达式应用:函数详解与实战代码

1. abs(x)
目的:返回浮点数 x 的绝对值。
参数:x(任意数值)
示例

abs(-5)  # 返回5  
abs(3.14)  # 返回3.14  

2. acos(x)
目的:计算 x 的反余弦值(余弦为 x 的角度),x 超出 [-1,1] 时返回 nan。
参数:x(需满足 – 1≤x≤1)
示例

acos(0)  # 返回1.5708(π/2弧度)  
acos(2)  # 返回nan  

3. asin(x)
目的:计算 x 的反正弦值(正弦为 x 的角度),x 超出 [-1,1] 时返回 nan。
参数:x(需满足 – 1≤x≤1)
示例

asin(0.5)  # 返回0.5236(π/6弧度)  
asin(2)  # 返回nan  

4. atan(x)
目的:计算 x 的反正切值,返回值范围为 [-π/2, π/2]。
参数:x(任意数值)
示例

atan(1)  # 返回0.7854(π/4弧度)  
atan(0)  # 返回0  

5. atan2(x, y)
目的:计算向量 (x,y) 与 x 轴的夹角,常用于角度计算。
参数:x(横向分量),y(纵向分量)
示例

atan2(1, 1)  # 返回0.7854(π/4弧度)  
atan2(0, 1)  # 返回1.5708(π/2弧度)  

6. ceil(x)
目的:将 x 向上舍入到最接近的整数。
参数:x(任意数值)
示例

ceil(3.2)  # 返回4  
ceil(-2.8)  # 返回-2  

7. clamp(x, min, max)
目的:将 x 限制在 [min, max] 范围内。
参数:x(目标值),min(最小值),max(最大值)
示例

clamp(5, 0, 3)  # 返回3  
clamp(-1, 0, 1)  # 返回0  

8. clamp(x)
目的:将 x 限制在 [0.0, 1.0] 范围内。
参数:x(目标值)
示例

clamp(1.5)  # 返回1  
clamp(-0.3)  # 返回0  

9. cos(x)
目的:计算弧度 x 的余弦值。
参数:x(弧度值)
示例

cos(0)  # 返回1  
cos(pi/2)  # 返回0  

10. curve(frame)
目的:返回指定帧的动画曲线 y 值(默认当前帧)。
参数:frame(可选,默认当前帧)
示例

curve(100)  # 获取第100帧曲线值  
curve()  # 获取当前帧曲线值  

11. degrees(x)
目的:将弧度 x 转换为角度。
参数:x(弧度值)
示例

degrees(pi)  # 返回180  
degrees(pi/2)  # 返回90  

12. exp(x)
目的:计算自然常数 e 的 x 次幂(e^x)。
参数:x(任意数值)
示例

exp(0)  # 返回1  
exp(1)  # 返回2.7183  

13. fBm(x, y, z, octaves, lacunarity, gain)
目的:生成多层分形布朗运动噪波,常用于自然纹理。
参数

    • x,y,z:坐标

    • octaves:叠加层数(≥2)

    • lacunarity:频率倍增(>1)

    • gain:振幅衰减(<1)

    • 示例

fBm(frame*0.1, 0, 0, 3, 2, 0.5)  

14. fabs(x)
目的:返回浮点数 x 的绝对值(同 abs,更适用于浮点数)。
参数:x(任意浮点数)
示例

fabs(-5.5)  # 返回5.5  
fabs(3)  # 返回3  

15. floor(x)
目的:将 x 向下舍入到最接近的整数。
参数:x(任意数值)
示例

floor(3.9)  # 返回3  
floor(-2.1)  # 返回-3  

16. frame()
目的:返回当前帧号。
参数:无
示例

frame()  # 若当前为第50帧,返回50  

17. from_sRGB(color_component)
目的:将 sRGB 值转换为线性光值。
参数:color_component(sRGB 值 0-1)
示例

from_sRGB(0.7416)  # 返回0.5(线性值)  

18. hypot(x, y)
目的:计算直角三角形斜边长度(√(x²+y²))。
参数:x(直角边 1),y(直角边 2)
示例

hypot(3, 4)  # 返回5  
hypot(0, 5)  # 返回5  

19. int(x)
目的:将 x 截断取整(向零取整)。
参数:x(任意数值)
示例

int(3.8)  # 返回3  
int(-2.3)  # 返回-2  

20. lerp(a, b, x)
目的:在 a 和 b 之间线性插值,x=0 时返回 a,x=1 时返回 b。
参数:a(起始值),b(结束值),x(系数 0-1)
示例

lerp(10, 20, 0.5)  # 返回15  
lerp(0, 1, frame/24)  # 24帧内从0过渡到1  

21. log(x)
目的:计算 x 的自然对数(ln (x))。
参数:x(正数)
示例

log(exp(1))  # 返回1  
log(10)  # 返回2.3026  

22. max(x, y, …)
目的:返回多个数值中的最大值。
参数:多个数值
示例

max(5, 10, 3)  # 返回10  
max(-2, 0)  # 返回0  

23. min(x, y, …)
目的:返回多个数值中的最小值。
参数:多个数值
示例

min(5, 10, 3)  # 返回3  
min(-2, 0)  # 返回-2  

24. mix(a, b, x)
目的:同 lerp (a, b, x),在 a 和 b 之间线性插值。
参数:a(起始值),b(结束值),x(系数 0-1)
示例

mix(0, 100, 0.3)  # 返回30  

25. noise(x, y, z)
目的:生成 3D Perlin 噪波,值范围 [-1,1],整数坐标处为 0。
参数:x(必填),y,z(可选)
示例

noise(frame*0.2)  # 随帧变化的一维噪波  
noise(0, 0, 0)  # 返回0(整数坐标)  

26. pi()
目的:返回圆周率 π(3.141592654…)。
参数:无
示例

pi()  # 返回3.14159...  

27. pow(x, y)
目的:计算 x 的 y 次幂(x^y)。
参数:x(底数),y(指数)
示例

pow(2, 3)  # 返回8  
pow(10, 0.5)  # 返回3.1623(√10)  

28. radians(x)
目的:将角度 x 转换为弧度。
参数:x(角度值)
示例

radians(180)  # 返回pi  
radians(90)  # 返回pi/2  

29. random(x, y, z)
目的:生成 [0,1] 伪随机数,相同参数返回相同值,无参数时随机变化。
参数:x,y,z(可选,用于固定随机种子)
示例

random()  # 生成0-1随机数  
random(frame)  # 每帧固定随机数  

30. sin(x)
目的:计算弧度 x 的正弦值。
参数:x(弧度值)
示例

sin(0)  # 返回0  
sin(pi/2)  # 返回1  

31. sqrt(x)
目的:计算 x 的非负平方根。
参数:x(非负数)
示例

sqrt(25)  # 返回5  
sqrt(2)  # 返回1.4142  

32. tan(x)
目的:计算弧度 x 的正切值。
参数:x(弧度值)
示例

tan(pi/4)  # 返回1  
tan(pi/2)  # 返回无穷大  

33. to_sRGB(color_component)
目的:将线性光值转换为 sRGB 值。
参数:color_component(线性值 0-1)
示例

to_sRGB(0.5)  # 返回0.7416(sRGB值)  

34. true()
目的:始终返回 1。
参数:无
示例

true()  # 返回1  

35. value(frame)
目的:获取指定帧的参数 y 值(默认当前帧)。
参数:frame(可选,默认当前帧)
示例

value(200)  # 获取第200帧参数值  
value()  # 获取当前帧参数值  

36. x()
目的:返回当前帧号(同 frame ())。
参数:无
示例

x()  # 返回当前帧号  

37. y(frame)
目的:获取指定帧的动画 y 值(默认当前帧)。
参数:frame(可选,默认当前帧)
示例

y(50)  # 获取第50帧y值  
y()  # 获取当前帧y值  

案例:

一、椭圆运动与淡入淡出表达式

1. 位置动画(Translate 属性)

    • sin()cos()函数的相位差为 90 度,形成圆形轨迹

    • 若 X/Y 轴振幅不同(如 X 轴 150,Y 轴 100),则形成椭圆形

X 轴表达式

nuke.root().format().width()/2 + 100 * sin(frame*0.1)

Y 轴表达式

nuke.root().format().height()/2 + 100 * cos(frame*0.1)

2. 淡入淡出动画(Opacity 属性)

min(frame/50, 1) * 100

二、表达式分解与参数调整

1. 椭圆运动参数

    • frame/50:前 50 帧从 0 线性增长到 1

    • min()函数确保值不超过 1(防止透明度溢出)

    • *100:将 0-1 的系数转换为 0-100 的百分比

参数作用调整建议
100椭圆半径(振幅)增大值使运动范围更广
0.1运动频率(速度)增大值使运动更快
sin()/cos()控制 X/Y 轴相位差(椭圆形状)可替换为cos()改变方向

2. 淡入淡出参数

参数作用调整建议
50淡入持续帧数修改为 100 则延长至 100 帧
100最终透明度(百分比)改为 50 则最终半透明

三、实际应用步骤

    1. 选择节点:右键点击需要添加动画的节点(如 Transform、Position 等)

    1. 打开表达式编辑器
        • 对于 Translate 属性:右键点击Translate → Edit Expression

        • 对于 Opacity(value) 属性:右键点击value → Edit Expression

    1. 粘贴表达式
        • Translate.X输入框粘贴 X 轴表达式

        • Translate.Y输入框粘贴 Y 轴表达式

        • value输入框粘贴淡入淡出表达式

    1. 调整参数:根据需要修改振幅、频率、淡入时间等数值

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容