切曲线——技术目录
五种接缝技术,一个原则:在峰值速度处剪切,并在剪切两侧匹配方向和速度——加上两种场景内技术(§6 进场,§7 滑动)。接缝法则——向量法则、流向、清单、接缝门——位于 motion-doctrine 中;请先阅读它。本技能提供参数和机制。
所有 GSAP 代码模板(工作器 + 注册表):examples/gsap-implementation.md。
目录
| # | 技术 | 范围 | 轴 | 用途 |
|---|---|---|---|---|
| 1 | 缩放穿越(正向) | 场景内文字交换 | Z,朝向观察者 | 深入同一想法的推进 |
| 2 | 反向缩放穿越 | 进场/高潮拍 | Z,远离观察者 | 更重大的内容落地 |
| 3 | 切曲线 | 场景间 | X / Y | 默认边界,影片的流向 |
| 4 | 瀑布切 | 文字到文字接缝 | X,逐字 | 大文字拍之间的逐字交接 |
| 5 | 移焦模糊切 | 同表面状态交换 | X / Y / Z | 你希望被看到的那个剪切——一种 DSLR 焦点拉动手法 |
| 6 | 瀑布进场 | 场景内进场(无接缝) | Y,从下方 | 标题卡、片段开场白、列表介绍 |
| 7 | 微移曲线 | 场景内组滑动(无接缝) | X / Y | 重定位已编排的组以腾出空间 |
Z 轴方向是一个符号
在 Z 轴上,“相同轴”是不够的——剪切两侧的 d(scale)/dt 符号必须匹配:
| Z 向量 | 退场缩放 | 进场缩放 | 变体 |
|---|---|---|---|
| 推(正向) | 增大 1 → 1.2 | 增大 0.75 → 1 | 缩放穿越 |
| 拉(反向) | 缩小 1 → 0.8 | 缩小 1.25 → 1 | 反向缩放穿越 |
禁止的镜像:退场缩小接进场从小放大(拉翻转为推——常见错误,因为从小放大是默认元素入场方式),以及推的退场接一个超大尺寸的收缩。这约束了进场场景在接缝窗口(剪切 + 约 0.5s)内的自身入场动画,而不仅仅是包装器补间:保持进场帧已编排好,或者将其入场动画设计为匹配符号。请根据接缝门规则 7 验证。
模糊逻辑(所有 Z 变体)
| 对象 | 峰值模糊 | 原因 |
|---|---|---|
| 文字缩放(标题、词组) | 10px | 20px 会模糊字形——剪切读起来像故障,而不是速度 |
| 全屏表面(窗口、卡片、截图) | 18–20px | 在大表面上的较轻模糊会读作渲染卡顿 |
在交换帧上,两侧使用相同的峰值模糊。模糊包装器,永远不要模糊子元素。
1. 缩放穿越(正向)
Z 轴速度匹配剪切;两段文本从不同时可见。 所有元素都在增大:退场文字向相机加速,在峰值模糊处进行硬交换,进场文字继续增长进入焦平面。仅用于标题和短句。总时长约 0.4s。
| 阶段 | 缩放 | 模糊 | 不透明度 | 缓动函数 | 时长 |
|---|---|---|---|---|---|
| 退场 | 1 → 1.2 | 0 → 10px | 1 → 0.15 | power3.in(不透明度:单独的 none 补间) | 0.2s |
剪切 (tl.set) | in: 0.75 | 10px | 退场: 0 / 进场: 0.15 | — | — |
| 进场 | 0.75 → 1 | 10 → 0px | 0.15 → 1 | expo.out | 0.5s |
退场不透明度必须使用自己的线性补间——power3.in 会让不透明度在接近 1 的状态保持太久。进场时,所有属性共享 expo.out。
2. 反向缩放穿越(反向)
后拉镜像:退场元素后退;进场元素过大(就像刚在相机后面)并收缩进入焦平面。所有元素都在缩小。用于进场/高潮拍——如高潮台词、巨大回应、最终状态——而不是普通边界。总时长约 0.7s(30% 退场 / 70% 进场)。
| 阶段 | 缩放 | 模糊 | 不透明度 | 缓动函数 | 时长 |
|---|---|---|---|---|---|
| 退场 | 1 → 0.8 | 0 → 10px | 1 → 0.15 | power3.in(不透明度:单独的 none 补间) | ~0.2s |
剪切 (tl.set) | in: 1.25 | 10px | 退场: 0 / 进场: 0.15 | — | — |
| 进场 | 1.25 → 1 | 10 → 0px | 0.15 → 1 | expo.out | ~0.5s |
模糊为 10px 文字缩放;仅当两侧都是全屏表面时才使用 18–20px。
符号纪律: 进场场景以已编排好的帧形式出现在收缩的包装器内——在接缝窗口中不得有从小放大的介绍。阶段性入场在收缩稳定后发生,或者从 ≥1 开始然后收缩。
3. 切曲线(默认场景边界)
X/Y 速度匹配剪切——所有场景到场景边界的默认方式,在影片的流向上,而不是强调效果。退场主角向一个方向加速,剪切在运动中途落下,进场主角继续相同方向并减速。总时长约 0.6s;方向 LEFT / RIGHT / UP / DOWN(默认 LEFT)。
局部移动: 约 12% 帧宽(在 1920 分辨率下约 230px)——永远不做全屏离场移动。
| 方向 | 退场 | 进场起始 → 结束 |
|---|---|---|
| 向左 | x: 0 → −230 | x: +230 → 0 |
| 向右 | x: 0 → +230 | x: −230 → 0 |
| 向上 | y: 0 → −230 | y: +230 → 0 |
| 向下 | y: 0 → +230 | y: −230 → 0 |
机制:
- 镜像缓动: 退场
power4.in+ 进场power4.out,相同距离和时长——它们是同一个power4.inOut的两半,因此在剪切处速度完全匹配。 - 淡出技巧: 退场不透明度在其行程的约 25–30% 处完成(淡出约 0.18–0.3s vs 运动 0.3–0.34s);进场在其路径中点处从不透明度约 0.35 开始。计时使最后一个淡出元素恰好在剪切处消失——如果出现没有任何东西移动的空隙,会显得死寂。
- 退场 0.2–0.4s;进场时长 ≥ 退场时长。可选模糊 8–10px。
- 舞台背景:
#root必须是不透明的(background: var(--canvas-deep, var(--canvas, #000)))——中间窗口剪切会打开一个总和不透明度 < 1 的窗口,否则会闪烁出白色(参见seam-craft)。
存在 push-slide,但它违反了局部移动和运动中途阶段;优先使用切曲线。
4. 瀑布切(逐字切曲线)
在单词粒度上的切曲线——用于文字到文字接缝的最强向左剪切。退场单词沿着各自的曲线加速离开;进场单词在半空中级联进入——形成一道眼睛跨过接缝时跟随的波浪。
范围: 由工作器在一个多拍合成(堆叠的全屏 .beat 层)内编写,不是注册表/注入器类型——它补间的是单词跨度,而不是剪辑包装器。进出文字拍块的边界仍然使用正常的注册表转场。不占用 2–3 个转场预算。
| 参数 | 值 | 原因 |
|---|---|---|
| 行程 | ±230px(约 12% 帧宽) | 局部移动 + 速度 > 全帧推动 |
| 退场 | 0.34s power4.in | 加速本身即是剪切 |
| 退场淡出 | 0.18s,与 x 同时开始 | 单词在约 25–30% 行程处消失——无拖影 |
| 退场交错 | 按阅读顺序 +0.022s | 行被剥离,而不是块状滑动 |
| 进场 | 0.3s power4.out | 复合的后半部分——速度匹配 |
| 进场起始不透明度 | 0.35 | 路径中点触发;二进制 0→1 会显得生硬 |
| 进场间隙 | 0.05s × 0.84 衰减 | 加速级联,最终编排完成 |
规则:
- 每个链条只有一个方向,顺应流向。仅当链条的进场拍时才使用反向缩放穿越。
- 在构建时将所有单词预设为
x: +230, opacity: 0——仅靠immediateRender: false会使未开始的单词在静止时可见。 - 较短的第一个拍可以整行退场:其淡出在剪切前约 0.02s 结束,这样当下一个单词触发时它仍在冲刺——不会出现死寂空隙。
- 仅使用变换/不透明度(查找安全);不透明舞台背景适用。
5. 移焦模糊切(可见剪切)
唯一一个剪切可见的变体:散焦模糊尖峰隐藏了一个单帧硬交换——类似手持 DSLR 的焦点拉动。偶尔用作同一个视觉主题内同表面状态交换的花式效果;永远不是默认边界。
与其他技术的区别:退场元素保持完全不透明直到剪切(模糊隐藏了交换——没有提前淡出);缓动函数 power2.in / power2.out(柔和光学效果,而非动量)。
规则:
- 仅在叙事节拍时触发,每约 8s 最多一次;决不在字幕中间或保持期间触发。
- 在峰值模糊处剪切(≥6px;峰值 8–12px,最大 ≤16–18px)——在模糊上升过程中交换会暴露剪切。
- 微弱的缩放(约 1.06 镜头呼吸感)使其看起来像光学效果。
- 两侧方向相同——向量法则仍然适用。进场时长 ≥ 退场时长。
- 模糊包装器;永远不要对一个元素进行模糊+不透明度合在一个补间中(无头合成错误);永远不要直接模糊
<video>(用包装器包裹它)。
6. 瀑布进场(场景内进场——不是接缝)
交错进场级联:单词/元素从下方(一个一致的方向)快速进入,每个在前一个稳定之前开始——形成一道加速的波浪,最终编排成一个静止布局。用于标题卡、片段开场白、列表/功能特性介绍。其接缝对应的是 §4;不要混淆它们的规则:
| §6 进场(到达) | §4 瀑布切(接缝) | |
|---|---|---|
| 不透明度 | 通过入场时的 tl.set 进行二进制 0→1——从不淡入 | 在路径中点以 0.35 触发——淡出本身就是速度技巧 |
| 默认轴 | Y,从下方 | X,顺应流向 |
| 退场方 | 无 | 单词在镜像的 power4.in 上加速离开 |
编排:
- 重叠,不要排队——下一个元素在前一个稳定后 ±2 帧内开始;间隙在级联中缩小;最后一个元素快速到位。
- 速度随重量变化——重/锚点元素行程更远、时长更长;轻单词/标点快速到位:
| 参数 | 锚点/重 | 正常单词 | 轻/标点 |
|---|---|---|---|
| Y 偏移 | 60–80px | 40–50px | 30–48px |
| 时长 | 0.16–0.20s | 0.13–0.16s | 0.10–0.13s |
| 重叠 | 0–2f 间隙 | 1f 重叠 | 1–2f 重叠 |
- 缓动
power4.out(使用 expo.out 以获得额外快速感);入场永远不要用.inOut。 - 每个级联只有一个方向。
- 将最后一个单词拆分为片段以延长高潮;片段行程更远。
- 稳定后,组合通常滑动以腾出空间给下一个拍——这是 §7。
7. 微移曲线(场景内组滑动——不是接缝)
慢-快-慢地重定位一个已编排的组合(单词行、卡片堆、列表)以揭示内容或腾出空间。没有内置的单一缓动函数能做到这一点——power4.inOut 会突然停止。在同一个属性上串联三个补间:
| 阶段 | 缓动 | 距离 | 时间 | 感觉 |
|---|---|---|---|---|
| 1 斜坡进入 | power3.in | 约 10% | 约 20% | 几乎不动——运动被感知,无冲击 |
| 2 爆发 | none(线性) | 约 65% | 约 18% | 约 2× 平均像素/帧——有目的性 |
| 3 尾部 | power4.out | 约 25% | 约 62% | 衰减至静止——消除冲击感 |
规则:
- 尾部时间 ≥ 斜坡进入时间的 3 倍。如果仍有冲击感:延长尾部的时间(而不是距离)或使用
power5.out。 - 阶段 2 保持线性——缓动它会导致失去爆发对比。
- 在阶段 2 期间揭示新内容——爆发掩盖其出现。
- 垂直方向保持相同比例;按比例缩放距离,保持时间比例。
选择变体
| 缩放穿越 | 反向缩放穿越 | 切曲线 | 瀑布切 | |
|---|---|---|---|---|
| 范围 | 场景内文字交换 | 进场/高潮拍 | 场景间 | 文字到文字接缝 |
| Z 符号/轴 | 增大(推) | 缩小(拉) | X / Y | X,逐字 |
| 行程/缩放 | 1→1.2, 然后 0.75→1 | 1→0.8, 然后 1.25→1 | ±230px | ±230px |
| 峰值模糊 | 10px 文字 / 18–20 全帧 | 10px 文字 / 18–20 全帧 | 8–10px 可选 | 无 |
| 缓动函数 | power3.in / expo.out | power3.in / expo.out | power4.in / power4.out | power4.in / power4.out |
| 感觉 | 深入探索 | 到达 | 被侧向带动 | 横跨接缝的波浪 |
反模式
| 不要这样做 | 为什么 |
|---|---|
| 混合接缝类型(例如,在同一剪切中使用缩放穿越和切曲线) | 破坏视觉流向,造成不连贯的节奏。 |
| 在场景内文字交换中使用全屏缩放穿越 | 会显得生硬且脱离上下文;优先使用切曲线或瀑布切。 |
对进场使用 power4.inOut | 使入场显得无力且无目标感;使用 power4.out 以获得自然减速。 |
| 为模糊而设置模糊,但不匹配速度 | 模糊必须支持速度错觉;否则只是一个花哨的屏幕效果。 |
| 在剪切后立即进行从小放大的入场 | 违反 Z 方向符号规则;造成运动冲突。 |
| 在一个元素上同时进行模糊+不透明度补间 | 导致无头合成错误;分别处理。 |
| 在两个不同方向上连续进行两次切曲线 | 在不自然的方向变化上浪费视觉预算;坚持一个流向。 |