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

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

一、表达式基础

表达式是基于JavaScript语法的脚本代码,通过动态计算属性值实现自动化动画效果。
启用方式:按住 Alt 点击图层属性前的⏱️秒表图标,输入代码。


二、常用表达式函数与参数详解

1. wiggle() 随机抖动

  • 作用:为属性添加随机抖动效果
  • 参数
  • freq :每秒抖动次数(频率)
  • amp :抖动幅度
  • octaves (可选):噪波细节层级,默认1
  • ampMult (可选):振幅衰减系数,默认0.5
  • t (可选):时间偏移,默认当前时间
// 位置属性:每秒抖动2次,幅度50像素
wiggle(2, 50);

// 旋转属性:高频小幅度抖动
wiggle(10, 5);

2. time 时间驱动

  • 作用:用时间轴控制属性变化
  • 典型应用:旋转、透明度、比例
// 旋转速度:每秒旋转90度
time * 90;

// 闪烁效果:每0.5秒切换一次透明度
Math.sin(time * 10) > 0 ? 100 : 0;

3. loopOut() 循环动画

  • 作用:循环播放关键帧动画
  • 参数
  • type :循环类型 ("cycle", "pingpong", "offset", "continue")
  • numKeyframes (可选):循环段的关键帧数,默认0(全部)
// 无限循环关键帧动画(默认cycle模式)
loopOut();

// 乒乓循环:往返运动
loopOut("pingpong");

4. linear() 线性映射

  • 作用:将输入值映射到指定输出范围
  • 参数
  • value :输入值
  • inMin, inMax :输入范围
  • outMin, outMax :输出范围
// 用滑块控制透明度:0-100映射到0%-100%
linear(thisComp.layer("Control").effect("Slider")("Slider"), 0, 100, 0, 100);

5. valueAtTime() 时间取样

  • 作用:获取指定时间的属性值
  • 参数
  • t :目标时间(秒)
// 延迟0.5秒跟随另一个图层的位置
thisComp.layer("Leader").position.valueAtTime(time - 0.5);

三、进阶函数组合案例

案例1:弹性拖尾效果

// 位置属性:延迟+弹性
n = 3; // 延迟帧数
delay = time - n*thisComp.frameDuration;
thisComp.layer("Master").position.valueAtTime(delay) + [0, Math.sin(time*5)*10];

案例2:自动朝向运动方向

// 旋转属性:根据运动方向自动转向
velocity = (position.valueAtTime(time) - position.valueAtTime(time - thisComp.frameDuration));
radiansToDegrees(Math.atan2(velocity[1], velocity[0]));

案例3:三维空间随机运动

// 3D位置属性:XYZ独立控制
x = wiggle(1, 50)[0];
y = wiggle(2, 30)[1];
z = wiggle(0.5, 100)[2];
[x, y, z]

四、注意事项

  1. 表达式错误时属性会变红色,点击 ▶️ 查看错误详情
  2. 使用 // 添加注释说明代码逻辑
  3. 通过 Pick Whip 工具可快速关联属性

掌握这些核心函数即可实现90%的AE自动化效果,建议收藏本文作为速查手册。如需深度定制动画逻辑,可结合JavaScript条件语句和数学函数进行扩展。

五、高级数学函数库

1. Math.sin() / Math.cos() 波形控制

// 位置Y轴正弦波动
y = 540 + Math.sin(time * 3) * 100;
[960, y]

// 颜色通道周期变化
freq = 2; // 波动频率
Math.abs(Math.cos(time * freq)) * 255

2. random() 随机生成器

// 生成固定种子随机数
seedRandom(123, true); 
random(0, 100); // 始终生成相同随机序列

// 区间随机整数
Math.floor(random(5, 15))

3. smooth() 曲线平滑

// 平滑位置移动(0.5秒窗口)
smooth(.5, 100);

六、物理模拟表达式

1. 弹性动画

// 弹性位置追随
amp = 0.5; // 弹性强度
freq = 3; // 震动频率
decay = 4; // 衰减速度

x = thisComp.layer("目标").position[0];
y = thisComp.layer("目标").position[1];
dx = x - position[0];
dy = y - position[1];
springForce = Math.exp(-decay * time) * Math.sin(freq * time);
[position[0] + dx * springForce * amp, position[1] + dy * springForce * amp]

2. 抛物线运动

// 初速度与重力模拟
v0 = 500; // 初始速度
angle = 45; // 发射角度
g = 1500; // 重力加速度

rad = angle * Math.PI/180;
x = v0 * time * Math.cos(rad);
y = v0 * time * Math.sin(rad) - 0.5 * g * time * time;
[x + 960, 540 - y] // 以合成中心为原点

七、高级属性控制

1. 时间重映射

// 根据音频振幅驱动播放速度
audioLevel = thisComp.layer("Audio").audio.audioLevels;
linear(audioLevel, -30, 0, 0, 2); // 音量越大播放越快

2. 自动匹配文字内容长度

// 文字图层宽度自适应
text.sourceRectAtTime().width;

3. 3D摄像机跟踪

// 自动保持朝向摄像机
C = thisComp.activeCamera.toWorld([0,0,0]);
lookAt(C, position)

八、表达式模板系统

1. 通用进度控制器

// 用滑块控制多属性动画
progress = effect("全局控制")("滑块");
linear(progress, 0, 100, 起始值, 结束值);

2. 数据可视化模板

// 动态生成柱状图高度
data = thisComp.layer("数据").effect("数据表")("数值");
maxHeight = 500;
(data / 100) * maxHeight;

九、调试技巧

1. 实时数值监控

// 创建调试文本层
text.sourceText = "当前速度:" + velocity.toFixed(2);

2. 帧率同步优化

// 消除60FPS与30FPS差异
framesToSeconds = 1 / thisComp.frameDuration;
time * framesToSeconds;

十、扩展资源库

  1. 表达式速查表
  • 色彩转换:rgbToHsl() / hslToRgb()
  • 空间转换:fromWorld() / toWorld()
  • 图层探测:nearestKey() / key()
  1. 推荐插件
  • Motion Tools 2(表达式增强工具包)
  • Flow(曲线优化插件)

举个例子

// 随时间抖动并平滑停止,可自定义停止时间
freq = 5; // 抖动频率
amp = 50; // 抖动幅度
stopTime = 2; // 停止抖动的时间(秒)
fadeLen = 1; // 衰减时长(秒),越大越平滑
// 使用ease函数让wiggle平滑淡出
fade = ease(time, stopTime - fadeLen, stopTime, 1, 0);
wiggle(freq, amp) * fade + value * (1 - fade);

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

请登录后发表评论

    暂无评论内容