D-20260811-06|輪組二元損壞與固定驅動份額¶
2026-08-14 關聯追補:broken 輪組保留 collider/joint 與零摩擦/制動的條款已由 D-20260814-05 取代;固定驅動份額與
broken單一狀態來源仍有效。
背景與驅動力¶
舊實作只把 broken tire 從驅動集合移除,碰撞摩擦不變;驅動又除以剩餘完好輪數,使總推力 幾乎不隨損壞下降。結果是 fatigue、撞擊與過熱雖可把輪胎標成 broken,實際 Grip 與動力懲罰 卻沒有完整成立。專案仍在開發期,不保留錯誤行為或舊 snapshot 相容層。
考慮過的選項¶
- 只從驅動集合移除:仍有完整側向摩擦,且剩餘輪會取得全部推力,棄。
- 損壞後刪除 wheel body/joint:會改 Rapier topology、增加回滾與 presentation 複雜度,棄。
- 以二元
broken派生完整係數、固定原始驅動份額並保留拓撲(採納)。
決定¶
broken是輪組唯一狀態來源,疲勞、撞擊與過熱只會把它由 false 改 true;respawn 不修復, 新回合建立全新 world 時才回 false。tire/roller 都保留 mass、rigid body、collider 與 Revolute。- broken tire 的所有 collider 改為
friction=0、friction combine=Min,restitution 仍為Min; 解析牽引上限同步為零,法向支撐保留。滾阻乘以K_BROKEN_TIRE_ROLLING_MULTIPLIER=2。 - 驅動以安裝時原始 driven tire 數固定分母,失效份額不重分配;標準四輪的總驅動依序為 100/75/50/25/0%,各完好輪仍受實際 manifold normal impulse 與地表材質上限約束。
- broken roller 每 fixed frame 把軸向角速度向零削減至多
K_BROKEN_ROLLER_BRAKE_RAD_S_PER_FRAME=4 rad/s,形成拖行/貼牆阻力且不反轉。 - state-dependent friction/combine 不屬 immutable topology;SavedState v7 仍把它們納入 mutable
runtime hash,並以 envelope
broken雙向驗證。restore 成功後從broken重建係數,任何不一致 原子拒絕,rollback 重播保持 bit-exact。 - HUD 對自車新增一次性
PartBroken文字提示,使用 PartInstance 的 canonical mount slot;同幀 多件聚合數量。既有保留音效仍由破壞邊沿觸發;提示只用文字、無位移動畫,不能只靠顏色。 - 2 與 4 都是 synthetic reference 初值;半成品 builtin 只驗接線與拓撲,最終數值由正式 Editor GLB playtest 校準,不重開狀態或公式設計。
後果與影響¶
輪胎破壞現在同時損失該輪 Grip 與固定動力份額,導輪破壞也有可感知阻力;所有路徑共用同一 不可逆狀態,沒有第二份 damage flag。代價是每幀須同步少量 collider 係數並對 broken roller 施一次有界制動,snapshot 驗證也多一層 derived-state 檢查;輪組數受既有上限限制,成本有界。