跳轉到

D-20260903-01|編輯器共同變形與匯出新基線

背景與驅動力

Editor 原本同時存在兩條縮放路徑:整體相對倍率把差量烘焙進目前 GLB,一般工具列則把單一 節點 TRS 寫入工作階段。為避免這兩條路徑互相衝突,D-20260830-01 禁止一般零件節點使用 scale gizmo,並以 author_scale_factor 保存倍率血緣;但零件實際上需要分別調整胎框/外胎、 刀柄/刀刃等同檔節點,也需要同選後作整體變形。倍率血緣反而使「目前匯出的 GLB 是否已是 完整新模型」變得不清楚。

考慮過的選項

  • 保留相對倍率,另為個別 Mesh 增加第二套縮放:兩個尺寸權威仍會衝突,否決。
  • 將所有節點 TRS 烘焙進頂點並清成 identity:會破壞 pivot、階層與後續逐節點編輯,否決。
  • 統一以標準 glTF Node TRS 編輯,匯出狀態直接成為新基線(採納)。

決定

  • 零件與場地共用 Node selection 與位移、旋轉、各軸縮放工具;不再提供獨立的「相對縮放 倍率/套用並重算」,也不保存 author_scale_factor。
  • 桌面以點擊單選、Shift + 點擊增減多選;Mobile 以長按進入多選模式。最後選取者是 active node。父節點與後代同選時只對最上層被選祖先直接套用一次世界變形,避免雙重變形。
  • 多選預設以共同世界包圍盒中心為 pivot,另可切換各自中心。一次拖曳或數值提交是單一 undo transaction。
  • Mesh Node 可位移、旋轉與各軸縮放;體積節點同樣可變形,scale 表示範圍尺寸。
  • 純位置 Empty 單選只可位移。帶方向 Empty 單選可位移並沿其語意允許的軸旋轉,不可改自身 scale;例如 RoutePoint、RespawnPoint、weapon Axis 與 roller mount 的方向各沿既有軸向規格。
  • 多選共同旋轉時,純位置 Empty 只繞 pivot 改位置;帶方向 Empty 同時改位置與方向。多選 共同縮放時兩者都只改相對 pivot 的位置,自身 scale 保持 [1,1,1]。各自中心模式下,純位置 Empty 的旋轉/縮放停用,帶方向 Empty 只保留旋轉。
  • 固定 canonical 掛載點仍是唯讀介面,不由工具直接變形;祖先 Mesh 變形時以反向 local 補償維持既有 world transform,無法精確表示為 glTF TRS 時整批取消。可編輯掛載點依上述 Empty 規則。
  • 可編輯 GLB 的當前 node hierarchy、TRS、幾何、材質、分類與掛載資訊就是匯出後的新基線。 重匯入從該狀態開始,不恢復匯出前倍率、逐節點 baseline TRS、原始幾何或 undo history。
  • open4wd_editor 只保存格式版本與 normalized_meters=true,讓重匯入跳過來源單位換算與 provisional fit;欄位存在但格式不合法時封閉式拒絕。
  • canonical finalizer 仍移除 open4wd_editor,並從當前世界幾何重算尺寸、體積、質量、 PhysicsManifest 與驗證結果。

後果與影響

匯出的 editable GLB 可直接由通用 glTF 工具正確顯示,重新匯入後得到相同的世界尺寸、位置與 方向;但它不再能回到更早匯入來源的「倍率 1」狀態。若作者需要保留舊版本,應自行保存先前 匯出的 GLB。專案仍處於 pre-launch,因此舊版 editor metadata 與本機工作階段直接失效,不提供 dual-read 或 migration。