场景衔接工艺——场景间过渡的渲染前提条件
这是PLV场景间衔接的渲染正确性准则:使任何过渡都能正确合成的前提条件和主时间线机制,与具体选择哪个过渡无关。逐过渡目录(交叉淡变、推拉滑动、缩放穿越、曲线切割……)位于过渡注册表中——本页是支撑所有过渡的底层准则。
本准则管辖的过渡已准备好Tier-B:对两个场景的剪辑包装器(#el-<sid>)进行纯变换/透明度/滤镜操作,无需注入额外DOM,无需场景间协作。叠加系(交错块、百叶窗、漏光、网格溶解、翻页燃烧)和着色器过渡推迟到后续阶段。
舞台地面前提条件(白色闪烁防护)
多个模板存在一个窗口期,其中两个包装器的总透明度 < 1(曲线切割的中间窗口剪切、缩放穿越的0.15下限、普通交叉淡变的幂曲线凹陷)。包装器后面的内容在这段窗口期内会透出。如果组装后的index.html的#root没有不透明背景,渲染器会在凹陷处将默认白色页面合成进来 → 每个接缝处出现白色闪烁,在暗色影片上尤为刺眼(此问题在修复前于两次Spotify运行中观察到)。组装器必须绘制舞台: #root { background: var(--canvas-deep, var(--canvas, #000)) } —— assemble-index.mjs现在已发出此样式;这些模板的其他消费者也需要承担同样的保证。
注入器如何应用过渡
在场景_i_(from)与场景_i+1_(to)之间的break边界处,注入器:
- 将
#el-<from>包装器的data-duration延长duration_s(保持其最终帧——已验证:core/src/runtime/init.ts:1393-1410外部槽分支)。 - 将
#el-<to>包装器的data-start提前duration_s(创建重叠窗口)。 - 将所有剪辑的
data-track-index重新分配为0/1乒乓式,使两个重叠的包装器永远不会共享同一轨道(同一轨道重叠是非法的——core/src/lint/rules/composition.ts)。较高轨道的内容合成在顶部。 - 在
T = overlap-start处将gsap_template印刻到window.__timelines["main"]。
通过原型渲染验证(2026-05-31):主时间线包装器补间被寻址并渲染(不会与子合成自身的暂停时间线发生双重寻址——运行时独立驱动它们),扩展的包装器保持场景_i_的最终帧,较高轨道的传入包装器在传出包装器上方合成并与之混合。
模板占位符
注入器在每行gsap_template中替换以下标记:
| 标记 | 含义 |
|---|---|
__OLD__ | "#el-<from>" —— 传出剪辑包装器选择器(带引号) |
__NEW__ | "#el-<to>" —— 传入剪辑包装器选择器(带引号) |
__T__ | 重叠开始时间(秒,主时钟) |
__DUR__ | 此边界的duration_s |
__DX__ | 方向类型的水平移动距离:-1920(左)/ 1920(右) |
__DY__ | 垂直移动距离:-1080(上)/ 1080(下) |
__ORIGIN_OUT__ / __ORIGIN_IN__ | 用于squeeze的transformOrigin对 |
filter / scaleX / transformOrigin在主时间线上是lint干净的(已验证:core/src/lint/rules/gsap.ts没有按属性白名单,并将检查范围限定在data-composition-id区间;x/y/scale/rotation/opacity白名单仅是一个_场景工作器_的提示规则——它不约束index.html)。