跳轉到

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=5000VISUAL_FRAGMENT_FADE_MS=1000 屬 client presentation config,不進 protocol、SavedState、runtime hash 或賽果驗證。
  • SavedState v12 以 per-part broken/breakFrame 與 vehicle physicsRetired/retirementFrame 為權威;質量屬性與 enabled 狀態由 immutable manifest 加旗標重建並與 Rapier snapshot 驗證。

後果與影響

輪組舊有「保留碰撞再設零摩擦/制動」條款由本決策取代。損毀會真實改變整車質量、重心與慣量, 但不增加任何碎片剛體或網路自述質量;觀戰與 rollback 只需保存穩定破壞幀即可重建同一呈現。