跳轉到

D-20261026-01|鉸接輪組被包覆內件只承載質量

背景與驅動力

公版八車同場的 world step 遠超即時需求(001074)。成本主體是八車成團時大量「AABB 重疊但從未接觸」的 車對車配對,以及隨配對數成長的 CCD TOI 與 narrow phase。每車 45–54 顆 collider 中,胎與導輪占 51–59%: 胎=Tire 圓柱+Hub,導輪=OuterRace 圓柱+InnerSleeve+BearingHousing+SealRings。這些內件完全包在外圈 滾動圓柱內(徑向內縮 1.4–4.1 mm),幾何上碰不到外界。

D-20261021-02 只決定被包覆內件不烘 cylinder、維持凸 hull, 並否決「移除被包覆內件 collider」。當時的理由是不得改變質量分布與記帳,而且尚無成本與行為量測。 本次研究補齊了這兩項(.superpowers/triage/2026-10-25-proxy、2026-10-25-v2h、2026-10-26-roller-inner、 2026-10-26-hub-anomaly):

  • 成本:內件只承載質量、質量性質精確保留時,八車 world step P50 約 0.52×、P95 約 0.51×(17 格全部 <1)。
  • 完賽率:heavy 三場 × 30 起跑,各變體與基線都無顯著差。先前「拿掉 Hub 會掉頭」的反常經擴大樣本確認是 偶然;掉頭的成因是所有變體共有的輪地接觸衝量爆衝(001050 族)。
  • 接觸:胎 Hub 實接觸與預測接觸皆為 0。導輪內件從不實接觸,但在 Rapier 約 2 mm 的預測距離內會產生 speculative manifold,像一層墊子把車彈離牆面(航向撥 8–22°)。移除後,導輪改為約 0.2° 貼牆滑行、切向速度 保留約 1.0。貼牆滑行才是導輪應有的行為;原本的反彈是求解器對隱藏幾何的數值副作用。
  • 損毀:broken 時整個 part 的 collider 與 hinge body 同時停用(D-20260814-05),不會出現外圈失效、內件外露。
  • 磨耗:只是 per-part 標量,不改幾何;內部輪轂不得替胎面增加容量(算式表)。

考慮過的選項

  • 維持現狀,所有 proxy 都建 collider:成本高,導輪撞牆行為受隱藏幾何影響,否決。
  • 把整顆輪組壓成單一 collider:會改質量分布、材質與記帳,否決(沿用 D-20261021-02 的理由)。
  • 只對導輪套用:規則較特殊;胎 Hub 拿或不拿,完賽率中性,否決。
  • 內件保留但加 2 mm 以上 margin:公版沒有任何件符合,無收益;而且只要內件不建 collider,撞牆動態就是貼牆 滑行,margin 保不住反彈,否決。
  • 被包覆內件一律只承載質量、不建 collider,質量性質精確併入 hinge body(採納)。

決定

  • 判定(manifest 推導,烘焙期一次決定):同一 tire/roller 部件內,若有帶 cylinder shape 的 proxy C, 另一 proxy P 的每個 admitted pointsM 點 q 都滿足以下兩條,P 即為「被包覆質量件」:
  • q 到 C 軸線的距離 ≤ C.radiusM + ε;
  • q 沿 C 軸、相對 C.centerM 的投影絕對值 ≤ C.halfHeightM + ε。

其中 ε=ENCLOSED_PROXY_TOLERANCE_M(初值 10 µm,與 D-20261021-02 的包含容差一致)。 - P 若帶 shape,另需依 D-20261021-02 被 C 包覆。 - 有多個候選 C 時,取包住 P、且 sourceNodeIndex 最小者。 - 判定以 f64 加減乘除與平方根計算;runtime 不依幾何重算。 - manifest:P 保留材質、質量、centroid、質量性質、熱與 wearCapacityJ,並由 derive 烘入 contact: "none"。admission 驗證這個標記與判定一致;不一致即拒收。 - runtime: - 不為 contact: "none" 的 proxy 建 collider。 - 它的質量性質換算到 hinge body frame(依 001078 的 frame 規則)後計入該 body。總質量、質心、慣量張量 與全部建 collider 時相同。 - 碰撞拓樸記錄、SavedState 與 rollback 驗證以「應建 collider 集合」為準。 - 記帳: - P 的 wearCapacityJ 不併入 C,也不消費(P 永不接觸)。 - 熱以 part 為單位,仍計入 P 的熱容。 - 磁力:P 若為磁性材質,不再各自成為磁靶。磁力衝量的分配改以「建了 collider 的磁性 proxy」計數, 並在 canon 明文化。 - 損毀:沿用 D-20260814-05,broken 時整個 part 停用,不另訂規則。 - 範圍:只適用 tire/roller 鉸接部件。武器 rotor 與其他零件不在本決策內。 - UGC 與編輯器: - 作者照樣可以建模內件、指派材質,質量與手感照算。 - 凸出外圈的件不算被包覆,仍保留碰撞。 - 編輯器物理檢視標示「被外圈包覆,只計質量」,並列出因擦邊而保留碰撞的件。

後果與影響

  • 八車 world step 約減半;同車輪組間的 broad-phase pair 與 CCD 候選也隨之減少。
  • 導輪撞牆行為由「反彈」改為「貼牆滑行」,屬於手感改變;公版場地的導引面規範(GENERATOR.md)不受影響。
  • 鉸接 body 的 ccd_thickness 改由外圈決定,CCD 觸發門檻提高(胎約 2.7→8.0 mm/子步)。這是行為差異來源 之一,已納入上述完賽率量測。
  • PhysicsManifest proxy 新增 contact 欄位,公版 tire-01~03、roller-01~03 的嵌入 manifest digest 會改變, 與 D-20261025-01 同批重烘。determinism golden 場景的胎只有單一 proxy、沒有導輪,所以本決策不改 golden。
  • 修正 D-20261021-02 後果段已過時的「tire/roller 各只 1 個 proxy」敘述(現行公版:胎 2、導輪 4)。
  • canon 同步:
  • 程式架構/physics-engine.md:世界組成、tire/roller 段刪除「collider 照建」「不得把整顆輪組壓成單一 collider」中與本決策衝突的部分,以及 SavedState 段;
  • D-20261020-01 第 37 行「不合併 collider」補註;
  • 建模參數/零件與共用介面.md 第 4.2.1 節;
  • 算式表.md:補「質量件不記磨耗」與磁靶計數;
  • 程式架構/interfaces.md PartPhysicsProxy;
  • 程式參數/protocol.md 新常數;
  • 編輯器操作.md 物理檢視。
  • 需補的驗證:
  • rolling-shape 與 physics-manifest 判定的單元測試,含擦邊、凸出與多候選;
  • 讀回 body 質量性質與全建 collider 時一致的測試;
  • 兩趟逐幀 hash 一致;
  • 八車成本回歸案例。