D-20260814-05|車輛零件損毀交易與純視覺碎片¶
背景與驅動力¶
舊規則把 tire/roller broken 實作成保留質量與碰撞的係數切換,也把 chassis、battery、motor
一律視為致命件;另一方面,所有零件雖烘焙 auto_fragments,canonical manifest 只保存摘要,
無法讓重播或晚進觀戰者重建相同碎裂呈現。這與「損毀零件退出物理、剩餘結構重算」的產品裁決不符。
考慮過的選項¶
- 維持 broken collider/質量並只切功能:與質量/重心/慣量重算裁決不符,棄。
- 生成具物理的零件碎片:增加 solver、snapshot 與跨 peer 驗證成本,棄。
- broken 零件退出物理、碎片只作版本化呈現(採納)。
決定¶
- 每固定幀先完成碰撞、熱、磨耗與 fatigue;依穩定
partIndex收集首次 broken,幀末對每車只提交一次損毀交易。新質量屬性自下一幀生效。 - 一般零件 broken 後停用自身 collider、獨立 body、joint 與附屬活動機構。primary body 直接以仍啟用的 canonical collider 質量貢獻重算總質量、local COM、主慣量與慣量框;保留當下線速度與角速度,不額外強制守恆動量。
- 只有 chassis broken 令整車
physicsRetired:幀末原子停用仍附著的 body、collider、sensor 與主動能力,完整視覺殘骸保留至回合結束。solver 同幀形成的有效 swept finish 必須先承認。 - battery/motor broken 只停止供能/驅動,車體仍參與物理且可由慣性、環境力或撞擊通過終點。weapon broken 會連帶停用未發射彈藥與活動機構;已發射 projectile/deploy zone 保持原生命週期。
CHASSIS_SOLVER_SAFETY_LIMITS集中保存 1 g 質量與三軸1e-9 kg·m²主慣量地板。只檢查最終烘焙結果,不限制材質種類、直接體積或加入幽靈質量。- PhysicsManifest 保存版本化逐片 index、seed 與 volume 描述。所有零件碎片純視覺,無 mass、collider、sensor、damage、magnet 或 checkpoint 能力;以
vehicleId + partIndex + breakFrame + descriptor version重建。 VISUAL_FRAGMENT_LIFETIME_MS=5000、VISUAL_FRAGMENT_FADE_MS=1000屬 client presentation config,不進 protocol、SavedState、runtime hash 或賽果驗證。- SavedState v12 以 per-part
broken/breakFrame與 vehiclephysicsRetired/retirementFrame為權威;質量屬性與 enabled 狀態由 immutable manifest 加旗標重建並與 Rapier snapshot 驗證。
後果與影響¶
輪組舊有「保留碰撞再設零摩擦/制動」條款由本決策取代。損毀會真實改變整車質量、重心與慣量, 但不增加任何碎片剛體或網路自述質量;觀戰與 rollback 只需保存穩定破壞幀即可重建同一呈現。