D-20261031-06|同材質地面節點合併切塊¶
背景與驅動力¶
D-20261021-01 把地面 region 依世界格切塊,並以鄰塊鬼三角讓塊邊界取得真鄰面擬法線。切塊與鬼三角 都以單一 solid region(一個 GLB 節點)為單位。三個公版場地的路面都由獨立節點拼成:雪地 132 個 10 m 方塊、都市 33 個路段、叢林 19 個路段,每個節點是封閉實體。節點與節點的接縫沒有鬼三角,頂面邊 在該節點的拓樸裡是 90° 真稜;公版 speed 車每跨一條縫就被頂起 1~6 cm、俯仰最大 37°、側傾最大 39°、 航向偏 2~15°(issue 001163)。玩家看到的是車在平路上週期性彈跳與偏移。
只合併 region 還不夠:相鄰封閉實體貼合的那一片面(各自一片、共面、法線反向)留在合併網格裡,讓接縫 邊成為三片以上共用的非流形邊,頂面邊仍是真稜;實測合併但不剔除時接縫抬升只從 40 mm 降到 18 mm。
考慮過的選項¶
- 甲:同材質地面 region 合併後再切塊,並剔除跨節點的埋藏面(採納)。 焊接、切塊與鬼三角都跨越 節點縫;埋藏面以「與另一節點的三角共面、法線反向、至少共用一個焊接後頂點、質心落在該三角內」判定, 只比對不同節點,同一節點內刻意的雙面零厚度面不受影響。
- 乙:只合併不剔除。 接縫抬升減半但未消失,棄。
- 丙:要求生成器輸出單一連續路面。 只修得到公版,UGC 場地仍會以多節點鋪路,棄。
- 丁:地面塊也用
BOUNDARY_EDGES_AS_INTERNAL。 D-20261021-01 已實測坡道與粗糙地形不通過,棄。
決定¶
採甲。
- runtime(
collectTrackMesh)與 admission/Stage 3 的 piece 計數(trackColliderPieceCount)都先把 同材質、非牆條帶、非單顆的 solid region 合併成一個 region,再焊接、切塊、推導鬼三角。 - 合併後
sourceNodeIndex取組內最小者;canonical key 與 piece group 隨之以材質為單位,damage、wear 與碰撞事件的聚合粒度由節點變為材質。 - 合併時剔除跨節點的埋藏面;合併結果仍是純函數,兩次呼叫逐位元相同。
- 牆條帶與單顆節點的處理不變。
後果與影響¶
- 三個公版場地的接縫事件歸零(雪地 8→0、都市 1→0、叢林 3→0);合併後 piece 數不增加。
- 地面接縫的冗餘求解約束也落入同一 piece group 的跨 pair clustering。
- 多節點同材質場地的碰撞事件由逐節點改為逐材質聚合;pre_launch 無既有快照或帳本需保。
定案紀錄¶
2026-10-31 使用者確認 001163 並授權修正;實作後以 node 物理探針逐幀驗證三場接縫事件歸零。