D-20260808-05|GLB 匯出為可編輯衍生檔¶
背景與驅動力¶
D-20260730-01 將本機儲存、 檔案匯出與上鏈都收斂到同一 canonical finalizer,並要求三者使用相同 Draco/KTX2 bytes。 這對物理一致性與 CID 是正確的,但把供機器保存/執行的壓縮成品直接當成人用交換檔,會使部分 通用 DCC/線上 GLB 編輯器無法開啟。另建第四種出口只會讓使用者在兩種 GLB 間猜選,且鏈上作品 仍需要同一種可編輯下載。
考慮過的選項¶
- 維持 canonical GLB 原樣下載:保留位元一致,但不能滿足通用外部編輯需求,否決。
- 新增「canonical GLB」與「editable GLB」兩個下載鈕:暴露內部格式差異,增加誤用與維護面,否決。
- 既有 GLB 匯出改為由 canonical 成品產生可編輯衍生檔;精確保存另由 CAR 承擔(採納)。
決定¶
- 本機測試資產與上鏈作品仍保存 canonical GLB:
open4wd_version=1、衍生物理欄位、Draco、 KTX2 與 strict validation 都不變。上鏈 CID 只指向這份 canonical bytes。 - Editor 既有「匯出 GLB」先執行相同 canonical finalizer,再產生單一自包含的 editable derivative; 本機 canonical 資產與鏈上詳情頁也走同一轉換埠,不新增第四個出口。
- 鏈上匯出先以所選 CID 經既有
editorSource(cid)取得並驗證完整 canonical bytes,再轉換;不得 以預覽、metadata 或未驗 provider 回應代替內容。 - editable derivative 展開 Draco,將 KTX2 轉為內嵌 PNG,保留 scene hierarchy、mesh、material、
authored transform、Mount/Pivot/Axis 與 authored extras;移除
open4wd_version及所有auto_*衍生快取欄位,避免外部改模後仍冒充 canonical 計算結果。 - editable derivative 不承諾 byte identity、CID 或重新匯入後 CID 相同。再次匯入一律走正常 Stage 1–3,重新 sanitize、計算、驗證、標記與壓縮。
- CAR v1 保存包維持另一條 exact-CID 路徑:包含 canonical UnixFS 完整 block set,用於離線備份與 本機補回,不是 DCC 編輯格式,也不經 editable 轉換。
- KTX2 解碼在本機 Worker 內使用既有 vendored libktx;轉換或驗證失敗時不下載部分結果。
後果與影響¶
創作者只需理解一個 GLB 下載動作,拿到可由通用工具繼續編輯的自包含檔;遊戲端的 canonical 物理真相、鏈上 CID 與本機測試內容仍一致。需要精確保存/補回原 CID 的使用者改用 CAR。 此決策只修正 D-20260730-01 的「檔案匯出 bytes 必須相同」部分,不改變公尺世界、共用 canonical finalizer、上鏈 immutable 或收件端重驗規則。