跳轉到

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 物理探針逐幀驗證三場接縫事件歸零。