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 的每個 admittedpointsM點 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.mdPartPhysicsProxy;程式參數/protocol.md新常數;編輯器操作.md物理檢視。- 需補的驗證:
- rolling-shape 與 physics-manifest 判定的單元測試,含擦邊、凸出與多候選;
- 讀回 body 質量性質與全建 collider 時一致的測試;
- 兩趟逐幀 hash 一致;
- 八車成本回歸案例。