場景拼接 — 場景間過渡的渲染前提條件
這是 PLV 場景間拼接的渲染正確性原則:確保任何過渡都能正確合成的先決條件與主時間軸機械原理,與具體選擇哪種過渡無關。每個過渡的目錄(交叉淡入淡出、推拉滑動、縮放穿越、曲線剪輯……)存放在過渡註冊表中——本頁是位於所有過渡之下的基本原則。
本原則管轄的過渡已達到 Tier-B 準備就緒:僅對兩個場景的剪輯包裝器(#el-<sid>)進行 transform / opacity / filter 操作,無需注入額外 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-1410external-slot 分支)。 - 將
#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 行中的以下令牌:
| Token | 含義 |
|---|---|
__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)。