Keyframe 为什么不照搬 After Effects 的做法
设计札记
我们沿用了 After Effects 最好的部分,只在它被历史卡住的地方换了做法。
沿用的部分
合成、图层、关键帧、表达式和效果,用法和 AE 一样。

- 工具,如同 After Effects 的工具栏。
- 项目面板。
- 合成查看器。
- 时间轴,带关键帧。
- 属性与效果控件。
- Agent。
- 导出与渲染队列。
Keyframe 的核心照着 After Effects 的经典模型做:嵌套合成、图层的父子关系、带缓动的关键帧、图表编辑器,还有 AE 式的表达式。会用 AE 的人打开编辑器,面板和快捷键都认得。
下面讲的差异,都建在这个共同的地基上。
AE 的局限从哪来
三个原因:早年的模型只能往上加,闭源的核心只留了几个口子,套件里各有分工。
- 早年定下的模型属性的值只有关键帧和表达式两种来源;后来的能力都往上加,3D 就换过几代渲染器。
- 闭源的核心外部只能经表达式、脚本和 C++ 插件三个口子接进来,每个口子都有限制。
- 套件分工AE 只管合成:拆层在 Photoshop 里做,剪辑交给 Premiere。
AE 的核心(闭源)
- 表达式每帧都算,但一段只管一个属性,帧与帧之间不记事
- 脚本能改工程,但只在运行的那一刻
- 效果插件只画自己那一层的像素,渲染时改不了工程
- Photoshop:拆层
- After Effects:合成
- Premiere:剪辑
早年定下的模型。AE 里一个属性的值,要么来自关键帧,要么来自表达式。后来的能力只能往这个模型上加:3D 先后有 Classic 3D、后来退役的 Ray-traced 3D、2016 年加入的 Cinema 4D 渲染器,到 2023 年才有今天默认的 Advanced 3D。
闭源的核心。外部开发者改不了 AE 的核心,只能用 Adobe 开放的口子:表达式、ExtendScript 脚本和 C++ 插件。除了父子链接、轨道遮罩这类固定用途的联动,表达式是把一个属性逐帧绑到另一个属性上的唯一通用办法。
套件分工。AE 在 Adobe 的套件里负责合成:一张画要先在 Photoshop 或 Illustrator 里手工分好层,再导入 AE。放在套件里很合理,单独做动画时就多了来回。
这些都不是做错了。AE 的稳定和庞大的插件生态正是从这份历史里来的;只是当年的选择,今天成了改不掉的限制。
属性的值从哪来
AE 只有关键帧和表达式两种来源;Keyframe 把骨架、行为和程序做成了有类型的对象。
After Effects
- 关键帧
- 表达式骨骼 IK、联动、弹簧、约束都写在这里
Keyframe
- 关键帧
- 表达式只写属性自己的逻辑
- 行为摆动、朝向、IK、次级运动,带参数
- 骨架与网格蒙皮一种图层,由编辑器求解
- 程序效果着色器、模拟、画面程序,是项目数据
在 AE 里,骨骼、联动和弹簧都只能写成表达式,一段段挂在各个属性上,引擎看不出它们之间的关系。
Keyframe 的表达式照样能用,但骨架是一种图层,常用的运动规则是带参数的行为,程序是项目里的数据。它们之间的依赖在写入前就检查,Agent (在新标签页打开) 也能看懂结构,而不只是读一段文本。
我们换了做法的地方
每一项都从 AE 的一个限制出发。
不用表达式的骨骼:Keyframe 怎样绑定角色AE 里的骨骼由脚本用形状层和表达式拼出来;Keyframe 的骨架是一种图层,网格直接蒙皮到骨骼,带权重。
一张图怎样变成能动的图层:为什么拆层放在编辑器里AE 要先在 Photoshop 里手工拆好图层;Keyframe 在编辑器里把一张图拆成能动的图层,原图留着,随时能换回来。
写成代码的画面:为什么 Keyframe 的着色器是项目数据AE 自 CS6 起没有内置的自写着色器,要靠编译好的插件;Keyframe 的着色器、模拟和画面程序是项目数据,在沙箱里跑在你的显卡上。
Agent 为什么先给你草稿:AI 怎样参与 Keyframe 的编辑AE 的 AI 助手直接改工程,撤销时一步一步来;Keyframe 的 Agent 先做成草稿,你看过再应用。
不靠插件:为什么 Keyframe 把能力做进编辑器粒子、跟踪、抠像这些在 AE 里常靠第三方插件补的能力,Keyframe 都做在编辑器里。工程换一台电脑打开,不会出现缺失效果的占位。
AE 仍然领先的地方
更完整的效果库、更强的 3D 渲染和插件生态。
AE 还有很多 Keyframe 没有的东西:多得多的效果、Cinema 4D 渲染器、第三方插件,以及和 Premiere、Media Encoder 的配合。这些是差距,不是设计选择,我们会一项项补。