关于 after-effects
面向 After Effects 动效设计的实用技能,使用关键帧、表达式和合成技巧实现迪士尼 12 条动画原则。适用于制作动画素材,并导出为 Lottie、GIF、视频或精灵图集。
主要功能
- 01用表达式实现挤压与拉伸
- 02关键帧和图表编辑器工作流
- 03运动路径与图层错位
- 04时序和夸张表现技巧
- 05导出 Lottie、GIF、视频和精灵图集
适用场景
- 01用表达式制作挤压与拉伸
- 02构建分阶段的关键帧序列
- 03为分层动作添加跟随效果
- 04导出为所列动画格式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill after-effects安装后在 Claude Code 中输入/after-effects确认已加载。
详细介绍
After Effects 动画原理
使用 After Effects 强大的动画工具实现迪士尼的全部 12 条动画原理。
1. 挤压与拉伸
// Expression for automatic squash/stretch
s = transform.scale[1];
x = 100 + (100 - s) * 0.5;
[x, s]
或手动操作:
- 反向设置 X 和 Y 缩放的关键帧
- Y 轴压缩时,X 轴扩展
- 保持体积(X * Y ≈ 常量)
2. 预备动作
时间线结构:
- 0-10f:蓄势(下蹲、后拉)
- 10-12f:过渡
- 12-30f:主要动作
- 30-40f:收势
对预备动作的关键帧应用 Easy Ease,让蓄势动作更流畅。
3. 演出布局
技巧:
- 使用景深(Camera > Depth of Field)
- 对背景图层应用模糊
- 使用暗角引导视觉焦点
- 调整次要元素的不透明度
- 让主角更明亮
4. 直线动作与姿势到姿势
姿势到姿势(推荐):
- 在关键姿势处设置关键帧
- 补充过渡姿势
- 使用 Graph Editor 调整时序
直线动作:
- 逐帧制作动画
- 使用 Onion Skin(Layer > Onion Skin)
5. 跟随动作与重叠动作
// Delay expression for child layers
thisComp.layer("Parent").transform.position.valueAtTime(time - 0.05)
或:
- 将子级关键帧错开 2-5 帧
- 使用带延迟 wiggle 的父子级关系
- 对结束值应用弹簧表达式
6. 慢入与慢出
- 选择关键帧 > F9(Easy Ease)
- Graph Editor > 调整贝塞尔手柄
- 曲线越陡,运动越快
- 曲线越平缓,运动越慢
// Custom ease expression
ease(time, inPoint, outPoint, startValue, endValue)
7. 弧线运动
技巧:
- 使用 Pen 工具绘制运动路径
- 使用 Position 属性的贝塞尔手柄
- Layer > Transform > Auto-Orient
- 将形状图层的路径应用到位置属性
8. 次要动作
- 先制作主要动作
- 在单独的图层或属性上添加次要动作
- 适当错开时序
- 次要动作应起到衬托作用,而非喧宾夺主
示例:角色挥手 → 头发跟随摆动 → 衣物晃动
9. 时序
| 帧数 | 感觉 |
|---|---|
| 2-4 | 干脆、瞬间完成 |
| 6-8 | 快速、有活力 |
| 12-15 | 正常节奏 |
| 20-30 | 缓慢、沉重 |
| 40+ | 戏剧化、有分量 |
调整合成帧率来控制整体感觉(24fps 电影感,30fps 更流畅)。
10. 夸张
// Overshoot expression
amp = 15;
freq = 3;
decay = 5;
t = time - key(numKeys).time;
if (t > 0) {
value + amp * Math.sin(t * freq * Math.PI * 2) / Math.exp(t * decay);
} else {
value;
}
让数值比现实效果夸张 20-50%:
- 更大的缩放
- 更大的旋转角度
- 更戏剧化的时序
11. 扎实绘制
- 使用 3D 图层表现景深
- 使用带透视效果的摄像机
- 为 Z 位置添加动画
- 使用光照和阴影
- 在所有姿势中考虑体积感
12. 吸引力
设计原则:
- 每个姿势都要有清晰的轮廓
- 使用流畅曲线,避免尖锐角度
- 保持角色比例一致
- 设计悦目的时序节奏
- 运动路径要简洁、易读
必备表达式
// Wiggle
wiggle(frequency, amplitude)
// Loop
loopOut("cycle")
// Time remap
timeRemap = linear(time, 0, duration, 0, 1)
// Bounce
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n == 0) t = 0;
else t = time - key(n).time;
amp = 80; freq = 3; decay = 8;
value + amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
导出选项
- Lottie:Bodymovin 插件 → JSON
- GIF:Media Encoder
- 视频:H.264、ProRes
- 精灵图集:Scripts > Render Sprite Sheet
评论
支持 Markdown