跳轉到

D-20260814-03|逐 Collider 六向衝撞接觸面積

背景與驅動力

衝撞 stress 需要 contact_area_m²,但車輛曾取整顆零件 AABB 最小面、場地 entity 另取點雲 AABB 最小面;兩者都與撞擊方向無關,也無法和實際接觸 sub-mesh 材質保持同粒度。

考慮過的選項

  • 保留兩套 AABB 近似:簡單但規格分裂,棄。
  • 依最大法線軸硬選一面:方向邊界不連續,棄。
  • 逐實際 collider 烘焙六向面積,以量化 local normal 平滑加權(採納)。

決定

  • PhysicsManifest v9 對每個 vehicle、weapon 與 Track Entity intact collider proxy 必填 front/back/left/right/top/bottom 六向正投影面積,納入 digest;缺值、非有限或非正即拒載。
  • contact pair 依 canonical collider key 固定 A/B。A 使用朝向 B 的 manifold normal,B 使用反向 normal,各自以 collider world rotation 的逆旋轉轉回 local,再按 protocol 固定尺度量化。
  • 有效面積固定 X→Y→Z 計算: abs(nx)×A(signX)+abs(ny)×A(signY)+abs(nz)×A(signZ);+X/+Y/+Z 對應 right/top/back,負向對應 left/bottom/front。不採最大軸,也不做 L1 再正規化。
  • 結果以 IMPACT_CONTACT_AREA_MIN_M2 鉗制。車輛與場地共用同式,材質和面積必須來自同一 實際 collider;固定賽道本體不可損毀,因此不需要接觸面積。
  • 專案處於 pre-launch,直接升 open4wd_version、PhysicsManifest 與 builtin assets 至 v9, 重烘所有公版資產;不保留 AABB、點雲 AABB、v7 雙讀或 migration。

後果與影響

斜撞會在相鄰方向間連續變化,特殊造型與多材質小 proxy 不再借用整顆資產面積。每次接觸只做 固定數量的 quaternion 逆旋轉、量化與六項加權,不在賽中重跑 mesh;immutable manifest 無須新增 SavedState 欄位。