我们沿用了 After Effects 的模型,只在五个地方分道扬镳
设计札记
一款用了三十年的工具,最大的长处是从不让旧东西失效;最重的包袱,也是这一点。
After Effects 做动效已经三十多年了。设计师信任它,很大程度上是因为它一直替用户守着过去:旧工程在新版本里照样打开,表达式的意思不变,庞大的插件和脚本生态始终建在同一个核心上。
这份忠实是有代价的。每个新想法都得塞进一个很早就定型的模型里,还不能碰坏上面已经建好的任何东西。我们做 Keyframe,一个内置 Agent 的浏览器动画工作室,核心是从零写的。这一回,可以重新选一次。
结果大部分还是选了一样的。合成、图层、关键帧不是 AE 的毛病,恰恰是它好用的原因。我们只在五个地方和它分开走,每一处卡住 AE 的都是它的历史,而不是模型本身。这篇是整个系列的总览:我们留下了什么,AE 的局限从哪来,这五处怎么改,改了要付出什么,以及 AE 仍然明显领先的地方。
一个三十年前的模型,为什么还要留着?

- 工具,如同 After Effects 的工具栏。
- 项目面板。
- 合成查看器。
- 时间轴,带关键帧。
- 属性与效果控件。
- Agent。
- 导出与渲染队列。
因为它是这一行的通用语言。合成是一块有尺寸、帧率和时长的舞台,里面放图层;图层可以叠放、跟随父级、嵌套进别的合成;每个属性都用关键帧 (外部网站,在新标签页打开)做动画,沿曲线缓动。随便找一位动效设计师讲讲一个镜头怎么做,他用的就是这套词。
Keyframe 紧跟这套模型:嵌套合成、父子图层、带缓动的关键帧、图表编辑器,表达式的名字也照着 Adobe 的表达式语言 (外部网站,在新标签页打开)来。编辑器的布局是你熟悉的样子:项目面板、查看器、时间轴、属性面板。新添的只有两块,Agent 面板和导出,因为这两件事都得在浏览器标签页里完成。会用 AE 的人打开就知道东西在哪,大多数快捷键也是手已经记住的那些。
留着它的理由很朴素:换一套思路,每个用户都要花上几个月去适应,而拖住 AE 的从来不是这套模型。另起炉灶只会让 Keyframe 更难学,却不会让它更好。下面所有的不同,都建在这块共同的地基上。
那 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。
闭源的核心,只留几个口子。外部开发者改不了核心,只能走 Adobe 开的门:表达式、ExtendScript 脚本和 C++ 插件。每扇门都有自己的形状。除了父子链接、轨道遮罩这类固定用途的联动,表达式是把一个属性逐帧绑到另一个属性上的唯一通用办法,于是凡是讲关系的东西,最后都写进了表达式。
套件分工,各管一段。在 Adobe 的套件里,AE 负责合成:一张画先在 Photoshop 或 Illustrator 里手工分好层再导入,剪辑交给 Premiere。放在套件里这很合理;一个人做动画,就成了来回折腾。
这些都不是做错了。AE 的稳定和庞大的插件生态,正是从这段历史里长出来的。只是当年的选择今天很难再改,而晚起步的工具不必背着它们。
最根本的一处:关系成了对象
最老的那个原因,影响也最深。属性的值既然只能来自关键帧或表达式,凡是把两样东西连起来的,就都成了表达式:骨骼、跟随、弹簧、约束。开源绑定工具 Duik (外部网站,在新标签页打开) 用普通的形状层当骨骼,IK 靠一个控制层加表达式来算;操控点工具 (外部网站,在新标签页打开)的钉子再经表达式跟着骨骼走,弯折画面时没有逐顶点的权重。
这套办法能用,也有人用它做出了很美的片子。可这样搭出来的绑定,是一段段分散的文本,各挂在一个属性上,引擎看不出它们之间的关系:运行前没法检查,也没法把这套绑定讲给任何人听,不管是人还是模型。Duik 自己的性能说明 (外部网站,在新标签页打开)就提醒过,IK 和跟随类表达式会明显拖慢预览。
After Effects
- 关键帧
- 表达式骨骼 IK、联动、弹簧、约束都写在这里
Keyframe
- 关键帧
- 表达式只写属性自己的逻辑
- 行为摆动、朝向、IK、次级运动,带参数
- 骨架与网格蒙皮一种图层,由编辑器求解
- 程序效果着色器、模拟、画面程序,是项目数据
Keyframe 在关键帧和表达式之外又加了三种来源。骨架是一种图层,FK、IK 和网格蒙皮由编辑器自己求解,带权重,和专门做绑定的软件一个思路。常用的运动规则是带参数的行为。着色器、模拟和画面程序是项目里的数据。表达式还在,只写属性自己的逻辑。
每种关系都是一个对象,依赖就能在写入前检查:引用的目标不存在、彼此绕成了环,当场就被拒绝,不会拖到渲染时才冒出来。Agent 看到的骨架也是骨架,而不是一段文本。使用文档里的骨骼绑定 (在新标签页打开)一篇,能看到它在编辑器里的样子。
另外四处,各自对着一个原因
剩下四处没那么大,每一处都回应上面的一个原因。
在做动画的地方拆层。AE 在套件里只管合成,一张画进来时已经在别的软件里手工拆好了,想改哪一块就得回去改。在 Keyframe 里,选中一个图层就能在编辑器里分离。先由你设备上的模型来做,不花钱;免费结果不够好时,付费的图像模型是你在审核卡片上自己选的升级。拆出的部件和其他候选一样进审核,原图留作隐藏的母版,随时能换回来(把画面拆成图层 (在新标签页打开))。
写成代码的画面,存在工程里。AE 曾经能直接把 Pixel Bender 着色器当效果加载:CS4 加入,CS6 移除。从那以后,想自己写 GPU 效果,就得编译 C++ 插件,或者借第三方的桥接插件。在 Keyframe 里,着色器 (外部网站,在新标签页打开)、模拟乃至整段画面程序都是工程的一部分:跟着工程保存,像其他改动一样过审核,在沙箱里跑在你的显卡上;也可以让 Agent 替你写(着色器、模拟与画面程序 (在新标签页打开))。
能力做在里面,而不是外挂。核心闭源,AE 的回答是一个庞大的插件市场,这确实是它的长处。代价出现在工程换地方的时候:换到一台缺某个插件的电脑上,缺的效果只剩一个带着参数的占位,图层渲染时把它跳过。Keyframe 把粒子、跟踪、抠像做进编辑器,有成熟开源库的就用现成的,所以一个工程只要有支持 WebGPU (外部网站,在新标签页打开) 的浏览器,到哪儿打开都一个样。
Agent 先交草稿。AE 的脚本一运行就改工程。Adobe 的 AI 助手 (外部网站,在新标签页打开)自 2026 年 8 月起出现在测试版里,同样直接写进工程,撤销时一步一步来。Keyframe 的 Agent 和你的点击用的是同一套注册操作,但它的结果先成为草稿:你预览过,再决定应用还是丢弃,应用的内容和你自己做的所有改动在同一条历史里(草稿与审核 (在新标签页打开))。

- 这份草稿改了什么
- 先在查看器里看效果
- 应用到工程
- 或者直接丢掉
换了做法,付出了什么?
每一处改动,都关上了一扇 AE 还开着的门。Keyframe 没有插件 SDK,没有 ExtendScript 或 UXP 脚本,没有 MOGRT 模板,也没有 Dynamic Link。外来的代码只能作为工程数据在沙箱里运行,不能作为原生插件加载。如果你的工作离不开某个第三方插件,或者团队打磨了多年的一段脚本,Keyframe 加载不了,我们也不打算开这个口子。
住在浏览器里也有代价。工程存在你的浏览器里,就在你自己的电脑上。导出只能用浏览器编码得了的格式,ProRes、EXR 这类目前做不到。
对一个要在每台机器上打开都一样、又要让 Agent 安全地在旁边干活的工作室来说,我们觉得这些取舍是对的。但取舍终归是取舍,选之前你应该知道。
AE 还在哪些地方领先?
有些差距根本谈不上选择。AE 的效果多得多,有 Cinema 4D 渲染器和光线追踪 3D,同一图层里能逐字符设样式,有做平面跟踪的 Mocha,有积累了几十年的插件生态,还有它在 Premiere、Media Encoder 旁边的位置。这些是差距,不是设计,我们把它们一项项老实记了下来。
问题从来不在模型
一款工具用得久了,人们很容易把它的局限当成思路过时的证据。AE 恰好说明了相反的事:合成、图层、关键帧今天和当初一样站得住,老去的是工具在它们之上答应过要一直守住的那些东西。
从头写,让我们得以留下这些思路,放下不需要的承诺。会用 AE 的人,已经会用 Keyframe 的大半;它不一样的地方,都是有意为之,五处改动各有一篇专文。