Composer无原生齿轮传动功能,angle仅是旋转别名,不包含齿数等物理参数;真实啮合需θ₁×z₁=θ₂×z₂关系,须用loopOut+累计角度计算,复杂结构应改用脚本预生成关键帧。

Composer 里没有“角度链接功能”或“齿轮传动动画”的原生支持——这是常见误解。它本质是 Adobe After Effects 的插件,不处理机械运动学计算,所有所谓“精密齿轮传动”都得靠手动表达式或第三方脚本模拟。
为什么 angle 链接不能直接驱动齿轮啮合
Composer 中的 angle 参数只是旋转属性的别名,它本身不携带方向、模数、齿数或相位信息。两个图层用 angle 简单相乘(比如 layerA.angle * -2)看似能实现 2:1 传动比,但实际会跳齿、相位错乱、无法处理奇数齿/变位齿轮等真实约束。
- 齿轮啮合要求角位移严格满足
θ₁ × z₁ = θ₂ × z₂(z 为齿数),必须基于累计转角而非瞬时角度 - AE 时间轴采样是非连续的(默认 30fps),直接用
time做输入会导致微小积分误差,几秒后就明显滑齿 - Composer 不暴露图层的上一帧值,无法做差分或累积,
valueAtTime()在表达式里调用开销大且不准
用 loopOut("continue") + 手动积分逼近真实传动
真正可行的做法是:把驱动齿轮的旋转做成线性关键帧(非表达式),再用表达式读取其累计角度,按齿数比换算从动轮角度,并用 loopOut("continue") 保证运动连贯。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
示例(驱动层叫 Driver,齿数 24;从动层叫 Driven,齿数 48):
driverLayer = thisComp.layer("Driver");
baseAngle = driverLayer.transform.rotation;
// 累计角度需绕过重置,用 loopOut 模拟持续转动
cumulative = baseAngle.valueAtTime(0) + (baseAngle.speedAtTime(time) * time);
(-cumulative * 24 / 48) % 360- 必须给
Driver的rotation打至少两个线性关键帧(如 0°→360°),否则speedAtTime()返回 0 -
% 360是为了视觉归零,不影响物理关系;若需多圈记录,去掉取模 - 该写法在 AE 2022+ 兼容性好,旧版建议改用
valueAtTime()差分近似
复杂传动链必须用 eval() 或外部 JS 脚本
三个及以上齿轮、惰轮、行星架结构,Composer 表达式会迅速失控。这时应放弃纯表达式,改用 AE 脚本预计算角度序列:
- 用 Python 写个简短脚本,按时间步长(如 0.01s)解算各齿轮累计角度,导出 CSV
- 在 AE 中用
$.evalFile()加载 JS,把 CSV 解析成数组,再用linear()插值查表 - 关键点:脚本输出的角度必须是绝对累计值(非每帧增量),否则误差会指数放大
- 不要尝试在 Composer 表达式里嵌套循环或递归——AE 会卡死或报
Maximum call stack size exceeded
齿轮动画的精度瓶颈从来不在表达式写法,而在 AE 时间采样机制和插值模型本身。哪怕公式完全正确,12fps 预览下也看不出滑齿,但渲染成 60fps 视频时,0.001° 的相位偏移就会让齿面反光跳变。真要“精密”,得接受用脚本生成逐帧关键帧,而不是指望一个表达式实时扛住所有约束。

















