Keyframe 为什么不照搬 After Effects 的做法

设计札记

我们沿用了 After Effects 最好的部分,只在它被历史卡住的地方换了做法。

沿用的部分

合成、图层、关键帧、表达式和效果,用法和 AE 一样。

Keyframe 编辑器:工具栏、项目面板、查看器、时间轴和属性面板
  1. 工具,如同 After Effects 的工具栏。
  2. 项目面板。
  3. 合成查看器。
  4. 时间轴,带关键帧。
  5. 属性与效果控件。
  6. Agent。
  7. 导出与渲染队列。

Keyframe 的核心照着 After Effects 的经典模型做:嵌套合成、图层的父子关系、带缓动的关键帧、图表编辑器,还有 AE 式的表达式。会用 AE 的人打开编辑器,面板和快捷键都认得。

下面讲的差异,都建在这个共同的地基上。

AE 的局限从哪来

三个原因:早年的模型只能往上加,闭源的核心只留了几个口子,套件里各有分工。

  1. 早年定下的模型属性的值只有关键帧和表达式两种来源;后来的能力都往上加,3D 就换过几代渲染器。
  2. 闭源的核心外部只能经表达式、脚本和 C++ 插件三个口子接进来,每个口子都有限制。
  3. 套件分工AE 只管合成:拆层在 Photoshop 里做,剪辑交给 Premiere。

AE 的核心(闭源)

  • 表达式每帧都算,但一段只管一个属性,帧与帧之间不记事
  • 脚本能改工程,但只在运行的那一刻
  • 效果插件只画自己那一层的像素,渲染时改不了工程
  1. Photoshop:拆层
  2. After Effects:合成
  3. 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 的一个限制出发。

AE 仍然领先的地方

更完整的效果库、更强的 3D 渲染和插件生态。

AE 还有很多 Keyframe 没有的东西:多得多的效果、Cinema 4D 渲染器、第三方插件,以及和 Premiere、Media Encoder 的配合。这些是差距,不是设计选择,我们会一项项补。

看对比页里仍落后的完整清单

接着看