場景銜接工藝——場景過渡的渲染前置條件
這是 PLV 場景之間過渡的渲染正確性原則: 無論選擇哪個特定轉場,都能正確實作合成所需的 前置條件與主時間軸機制。各別轉場目錄(交叉淡變、推滑、縮放穿越、切曲線……) 位於轉場註冊表——本頁面是作為所有轉場基礎的原則。
此原則所管轄的轉場屬於第二級就緒:僅對兩個場景的剪輯包裝器(#el-<sid>)
進行 pure 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-1410外部插槽分支)。 - 將
#el-<to>包裝器的data-start提前duration_s(建立 重疊視窗)。 - 將所有剪輯的
data-track-index重新分配為 0/1 乒乓模式,使兩個 重疊的包裝器永遠不會共用同一條軌道(相同軌道重疊是非法的——core/src/lint/rules/composition.ts)。較高的軌道會合成在上方。 - 將
gsap_template印刻到window.__timelines["main"]中,時間點為T = overlap-start。
已通過原型渲染驗證(2026-05-31):主時間軸包裝器的 tween 被 搜尋並渲染(不會與子合成的暫停時間軸發生雙重搜尋—— 執行時間軸獨立驅動它們),延長的包裝器保持場景 i 的 最終影格,而較高軌道的傳入包裝器則覆蓋 + 混合在 傳出包裝器之上。
模板佔位符
注入器會在每個 gsap_template 行中替換這些代號:
| 代號 | 含義 |
|---|---|
__OLD__ | "#el-<from>"——傳出剪輯包裝器選擇器(帶引號) |
__NEW__ | "#el-<to>"——傳入剪輯包裝器選擇器(帶引號) |
__T__ | 重疊開始時間(秒,主時鐘) |
__DUR__ | 此邊界的 duration_s |
__DX__ | 方向類型的水平移動:-1920(LEFT)/ 1920(RIGHT) |
__DY__ | 垂直移動:-1080(UP)/ 1080(DOWN) |
__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)。