零件與場景¶
本檔角色:8 類零件 + 3 類場景 entity 的定位、必填、特殊規則。 詳細物理算式見 算式表.md;GLB 欄位見 建模參數.md;材質見 材質表.md;組裝規則見 車輛組裝.md。
1. 零件 8 類總表¶
| 類別 | 必要 | 數量 | 必裝晶片 | 主要用途 |
|---|---|---|---|---|
| chassis | ✅ | 1 | — | 底盤;承載所有 mount |
| body | ✅ | 1 | — | 車殼;空氣動力 + 視覺 |
| tire | ✅ | 4(固定不放寬) | — | 抓地 / 滾動 |
| motor | ✅ | 1 | — | 駕駛動力;扭力 vs 速度由 torque_ratio 決定 |
| battery | ✅ | 1 | — | 供能;駕駛 + 技能 + 武器全部從此扣電 |
| roller | ❌ | 0–6 | — | 過彎導輪;可選 6 位置 |
| chip(晶片) | ❌ | 0–1 | — | 技能模組;不裝 = 純物理車(無技能、無武器) |
| weapon | ❌ | 0–1 | ✅ | 武器;passive / active 皆需晶片才能裝 |
整車約束:數值與檢核語意只由 零件與共用介面.md §7.1 定義。
物理退役:只有
chassisbroken 會令整車physicsRetired並自動切觀戰。battery/motorbroken 只停止供能/驅動,車體仍以慣性、環境力或碰撞繼續物理並可合法通過終點;其餘零件只失去自身功能。
2. chassis(底盤)¶
承載 18 個 Mount(9 canonical 固定 + 9 自訂位置)。
2.1 Mount 配置¶
| 類別 | 位置 | 玩家編輯 |
|---|---|---|
| Body × 4(F / RL / RC / RR) | canonical 固定 | 🔒 |
| Battery × 1 | canonical 固定 | 🔒 |
| Tire × 4(FL / FR / RL / RR) | canonical 固定 | 🔒 |
| Motor × 1 | 自訂 | ✏️ Stage 2 拖放 |
| Chip × 1 | 自訂 | ✏️ Stage 2 拖放 |
| Roller × 6(FL / FR / CL / CR / RL / RR) | 自訂 | ✏️ Stage 2 拖放 |
| Weapon × 1 | 自訂 | ✏️ Stage 2 拖放 |
Canonical 位置採單一 96mm 軸距 mount 模板,不依 chassis 外形分成標準/寬軌/短軸距類型;canonical 9 個鎖定、custom 9 個只提供初始 offset 並可依規則編輯。完整權威見 零件與共用介面.md §6 與 protocol.md §3 CHASSIS_MOUNT_TEMPLATES。
2.2 設計含意¶
- body 4 接點(F + RL/RC/RR)用戶明確指定,不對稱的物理意義由 chassis 創作者自行處理
- 馬達 / 晶片位置由 chassis 創作者決定(影響重心 / 散熱對外環境)
- 全車最多 1 個 weapon Mount,但武器零件內部可建模複合 mesh 做多部位武器
3. body(車殼)¶
- 4 個 part-side mount(
Mount_Body_F/_RL/_RC/_RR)必須與 chassis canonical 嚴格相符 - 主要影響:六軸迎風面積/各向壓力中心與 lift factor 的相對氣流空氣動力 + 視覺
- 不參與駕駛動力傳遞
4. tire(輪胎)¶
- part-side 通用名
Mount_Tire,由前綴匹配對應 chassis 4 個Mount_Tire_FL/FR/RL/RR - 與 chassis mount 軸建立
Revolutehinge constraint(auto_hinge: true) - 4 個必填,不開放放寬(無三輪車 / 缺輪設計)
- 摩擦磨耗(算式表.md §9):相對環境至熱限的比例以
1 + K_TIRE_THERMAL_WEAR_MAX × r²放大,合法範圍 1→3;積分後超過熱限會 broken - 與 solid surface 依實際 normal impulse 導熱,實際 tangential impulse × slip speed 形成滑移熱;HUD 只顯示全車最熱 tire 的環境相對狀態
- broken 後該輪 collider、獨立 body 與 Revolute 退出物理;主車體在幀末依其餘完好零件的 canonical 有效質量重算質量、local COM 與慣量,線速度與角速度保持不變。驅動份額不重分配,視覺碎片由 manifest 描述重建但不生成物理 body
- 軸向檢核:
HINGE_AXIS_REJECT_SIN拒收、HINGE_AXIS_WARN_SIN起軟警告;值見 protocol.md §3
5. motor(馬達)¶
- 玩家宣告
torque_ratio: 0–100%(拆分扭力 vs 速度) auto_input_mw = round(volume_m3 × K_MOTOR_INPUT_W_M3 × 1000)(80,000,000 W/m³;系統算)- 駕駛功率:
drive_input_mw = min(motor.auto_input_mw, battery.available_output_mw);available_output_mw隨 SOC 全域線性下降,見 算式表.md §2 - 武器/技能不過 motor;motor 僅供駕駛
- 駕駛發熱:
heat_power_w = K_MOTOR_HEAT × actual_power_w,進單一能量 ledger - 過熱直接 broken(無 graceful degradation)
6. battery(電池)¶
- 玩家宣告
configured_output_w ≤ volume_m3 × K_BATTERY_OUTPUT_W_M3(80,000,000 W/m³) auto_energy_capacity_mj = round(volume_m3 × K_BATTERY_ENERGY_MJ_M3)(90,000,000,000,000 mJ/m³)- 駕駛耗電:固定 60Hz 下實際供應
P mW一幀扣P個1/60 mJquantum;到極速、失去牽引或卡牆仍照實際供應扣除 - 技能 / 武器耗電:依
skill_power_budget_mw × cost_frames從同一 quantum 帳結算;餘量不足同比例縮放,禁止透支 - 駕駛連帶發熱:
K_BATTERY_PASSIVE × actual_supply_power_w(W) - 技能連帶發熱:
battery_cost_j × K_BATTERY_SKILL_WASTE_HEAT(J)
7. roller(導輪)¶
- 可選 0–6 個
- part-side 通用名
Mount_Roller,前綴匹配 chassis 6 個位置 - 與輪胎類似 hinge constraint;同樣接入 solid surface 導熱與滑移熱,但不套 tire fatigue 溫度倍率
- broken 後 collider、獨立 body 與 joint 退出物理,剩餘主車體於同一幀末交易重算質量屬性;碎片純視覺
- 軸向檢核同 tire,使用相同 hinge 具名門檻
8. chip(晶片)¶
顯示文字統一稱「晶片」;技術識別符用
chip/Chip。
8.1 Slot 數量¶
由 chip volume_m3 算出,1–4 個(玩家不可宣告 slot 數);階梯門檻 CHIP_SLOT_VOLUME_THRESHOLDS_M3(初估 [0.0000015, 0.000003, 0.000006] m³,等同 [1.5, 3, 6] cm³;protocol.md §3)。
8.2 Skill Slot 結構¶
"skill_slots": [
{ "skill": "boost", "allocation_pct": 40 },
{ "skill": "brake", "allocation_pct": 10 },
{ "skill": "weapon", "allocation_pct": 50 }
]
skill_slots[]長度 ≤ auto slot 數- 內容禁止重複(除非全部空著)
- 上傳時玩家選定 skill + allocation_pct(bake 進 chip extras,上鏈後全部 immutable)
- 每 slot
allocation_pct: 1–100,全 chip 總和 ≤ 100 - 組裝階段不調整任何參數,純粹組合零件(車輛組裝.md)
8.3 Skill Enum(8 種)¶
詳見 遊戲機制.md § 技能:
boost / brake / swerve_left / swerve_right / jump / slam / stabilize / weapon
8.4 過熱破壞¶
- per-chip
thermalLimitC(由 current PhysicsManifest hydrate;pre-bake 取多材質 weakest non-null sub-mesh) - 觸發熱能:
battery_cost_j × K_CHIP_SKILL_WASTE_HEAT(J)進 ledger,禁止直接加溫 - 殺手鐧:投影溫度跨過
thermalLimitC時該次仍以正常強度執行,統一熱解算後 broken - broken 後所有技能立即失效但能基本駕駛;HUD/輸入/音效消費同一份每幀權威
skillDisableReasons投影,停用邊沿立即釋放 hold 並清除 active,不另存可漂移 latch
9. weapon(武器)¶
9.1 通用規則¶
- 全車最多 1 個(不分 passive / active)
- 裝任何武器都需晶片:晶片缺席 = 武器自動失效;不用 runtime 額外判斷
- passive 武器(純物理)占 chassis Mount_Weapon slot,並占一個 chip
weapon槽(同 active;設定如此):差別僅在 passive 常駐物理生效、不主動觸發 - active 武器占 chip
weapon槽,由該槽主動觸發 - passive 占用的
weapon槽allocation_pct= 被動武器加持的外層總量(schema 同 active 1–100、計入全 chip 總和 ≤ 100):runtime 不消耗電池能量(純物理動能來自碰撞),此值改作加持係數;僅 active 武器以 allocation_pct 計算 applied_energy
被動武器加持(補償「不耗能、不可主動操控」的取捨價值;公式權威 算式表.md §3):
- 三因子 =
allocation_pct(chip 上鏈鎖死)×passive_weight_split_pct(組裝層分配 0–100,車輛組裝.md §3.5)×K_PASSIVE_EFFECT_MAX_PCT(30、初估待 playtest) - 兩效果同預算競爭:重量減輕(撞角流——更輕快、但撞擊動量自然變小)vs 損壞抗性含耐熱(裝甲流——fatigue 與武器自身 burn 正熱量打折、freeze 負熱量不打折、
thermal_limit不變、但維持重量) - 僅及 passive 武器零件自身:chip / motor / battery 熱模型與其他零件耐久零改動(chip 閾值殺手鐧不稀釋);抗性只改自身承受、不改對外輸出(熔岩刃塗層等攻擊性材質照舊)
- 靜態係數:組裝 / 實例化時套用、非 runtime 變動;整車質量以加持後有效質量檢核,界限見 零件與共用介面.md §7.1
9.2 機制設定(active)¶
GLB extras(扁平化,無容器):weapon_mechanism / weapon_main_mesh_node / weapon_actuators[](general 多驅動單元、每項含 weapon_max_angle_deg 等,見 零件與共用介面.md §3.7)。
| weapon_mechanism | weapon_main_mesh_node 解釋 | 必要欄位 |
|---|---|---|
general |
不轉本體 / 基座(actuator 掛其上) | Axis empty 必填;weapon_actuators[] 有項 = general_actuated(每項一個 Pivot + 剛體 / 鏈條 payload、各需 weapon_max_angle_deg),無項 = general_push |
magnet |
磁場原點(mesh 中心) | Axis empty 必填(決定 N 極方向);強度由 battery.available_output_w × allocation_pct / 100 動態決定(磁力公式見 算式表.md §5) |
launch |
launcher_body;子彈 = weapon_main_mesh_node 子節點 mesh(≤ 8 顆、Hold 每 250ms 連發 1 顆、打完即空、下一回合新車即滿彈;零件與共用介面.md §3.7.3) |
Axis empty 必填(決定發射方向) |
Axis / Pivot empty node 命名見 零件與共用介面.md §5.2。
9.3 武器反作用力¶
詳見 算式表.md §4:reaction_impulse = -action_direction × applied_energy × K_REACTION,加到 chassis 質心。magnet 不需此函數(Rapier 物理自然處理)。
9.4 part-side Mount_Weapon 編輯權限¶
weapon 外觀無法預知(揮鎚 / 刺槍 / 磁鐵盤 / 發射筒),因此 part-side Mount_Weapon 位置
玩家可在 Stage 2 拖放;其他 part-side mount 不可改。
9.5 鏈條 / 鞭 / 雙節¶
獨立機制:Chain_Segment_1...Chain_Segment_N(全武器剛體轉子 + 鏈段總數 ≤ MAX_WEAPON_DRIVEN_BODIES 16,protocol.md §3);convert script 自動建立相鄰 segment 的 Revolute / Spherical joint。
10. 場景 Entity 3 類¶
Entity = 場地 GLB 內帶
entity_typeextras 標記的子節點(場地僅單一 GLB)。RoutePoint(起終點)/ Checkpoint 不是 entity,而是場地設定(用 Empty Node 標記,見 零件與共用介面.md §5.4)。
10.1 通用規則¶
可破壞性決策與破壞行為見 材質表.md §10。本節僅列各 entity 類別的驅動行為差異(destructible 觸發後 entity 類別獨有的後續處理)。
Canonical finalizer 必須把 entity 轉為 current PhysicsManifest typed entry:依 scene traversal 給連續穩定 entityIndex,並固定初始 pose、visual/collider node 分組、各 collider 材質、motion/conveyor、intact 質量/慣量、entity-local magnets 與完整純視覺 fragment descriptor。admission 對實際 GLB 幾何獨立重建並核對 digest;race runtime 禁止讀 raw node/root extras。physics: visual_only 不建立 body、collider、sensor 或磁源,其 mesh 也不進 collider triangle budget;default decoration 建 fixed body,兩種 kinematic 建 position-based kinematic body。
磁場 entity 取代方案:任意 entity 只要含
magnetism_role: source材質的 sub-mesh + node-level 宣告magnet_source_strength_n > 0,即自動成為磁鐵物件。配合destructible可實現可破壞磁陷阱、配合kinematic_move可實現動態磁陷阱。詳見 材質表.md §8.2。
10.2 decoration¶
physics: "visual_only"(無 collider,純裝飾)或"default"(有 collider,可碰撞)- 純裝飾 mesh 可不指派材質(Stage 2 checkbox)
10.2.1 視覺水體(湖、河流、瀑布)設計指南¶
「實際佔體積的液體」不採用 3D 液體體積 entity,改用組合做法:
| 元素 | 做法 |
|---|---|
| 湖底 / 河床 | 跑道 mesh 從地面延伸到水體底部位置(rigid body collider,車輛物理上「連續跑」進去) |
| 水面 | 獨立 mesh 標 physics: "visual_only"(無 collider,純視覺) |
| 水面 shader | 模擬波浪、折射、反射等視覺效果(美術自由發揮) |
| 水下體驗 | 車輛進入水體後加 underwater post-processing(藍綠色調 + 模糊) |
為什麼不用 3D 液體 entity:
- 真實液體模擬效能極差(不適合 60Hz P2P 物理)
- 開放式設計:創作者用 mesh + shader 自由表達水體視覺,runtime 只需處理車輛接觸 collider 邊界
- 物理一致:車輛在「水中」其實還是在 collider mesh 上跑,避免浮力 / 阻力等複雜模擬
對比 fluid deploy zone(fluid 材質見 材質表.md §2 共 5 種;deploy 行為見 §3):
- fluid deploy = 平面 sensor + deploy_behavior 觸發特殊效果(油坑 / 熔岩池)
- 視覺水體 = 體積感的湖泊 / 河流(純視覺 + 跑道 collider)
- 兩者職責分明
10.3 kinematic_move¶
- 動態位移:旋轉門 / 推板 / 升降平台 / 兩階段瞬移
- body type = Kinematic(時間驅動)
motion_curve:sin(連續往返、平滑)/step(兩階段瞬移)/linear(等速三角波)- 參數:
period_ms/phase_offset_ms/amplitude_m(平移,entity local)/rotation_axis+rotation_amplitude_deg(旋轉:360 = 連旋、< 360 = 往返;與平移至少填一、可並用)/open_duration_ratio(step 用);schema 見 場地.md §9.2 - runtime 先把 ms 轉為固定 60Hz frame 整數,以 simulation frame 推導下一 pose;不得使用 wall clock。
sin與旋轉四元數只用版本固定的 deterministic 近似,不直接呼叫平台超越函數。 - destructible 觸發後:往返驅動停止(沿用 §10.1 通用流程)
10.4 kinematic_conveyor¶
- 輸送帶(表面速度推動接觸物)
- body type = Kinematic + surface velocity
conveyor_velocity_m_s:沿 entity 自身 −Z(forward)的表面速度(絕對值 ≤CONVEYOR_VELOCITY_M_S_MAX(10)、負值反向)- 只處理 Rapier 本幀實際 contact manifold;對接觸動態 body 施加沿 entity local −Z 的切向衝量,大小不得超過該接觸的
friction × normal impulse,不以 trigger/AABB 鄰近推動。 - destructible 觸發後:表面速度歸零(沿用 §10.1 通用流程)
10.5 Destructible runtime¶
每個 destructible 在 world 只建立 intact body/colliders。破壞當幀停用 intact collider/visual、move/conveyor/magnet,且不建立或啟用任何 fragment body/collider;碎片不產生碰撞、推力、傷害、磁力或路障。current PhysicsManifest 只保存完整版本化純視覺 descriptor,presentation 以 entityIndex + breakFrame + descriptor version 重建,並與車輛碎片共用 VISUAL_FRAGMENT_LIFETIME_MS/VISUAL_FRAGMENT_FADE_MS。current SavedState 與 checksum 對此區塊只保存 entity fatigue/broken/breakFrame,不保存逐片 active、pose、velocity 或期限;未破壞 kinematic pose 可由固定 frame 重建。詳見 D-20260814-06。
11. 場地 schema 核心欄位¶
完整 schema 見 場地.md §8。摘要:
| 區塊 | 內容 |
|---|---|
| 識別 marker | open4wd_version + type: "track" Root Extras(零件與場地共用,見 版本規範.md §15) |
track |
type: open / fixed + lap_mode: linear / loop + route[](lap_count 為房間設定,不在 GLB) |
weather |
normal / rain / snow + 溫度 + 風速向 + 雨雪 patch 參數 |
physics |
gravity_direction + gravity_strength_m_s2(支援低重力 / 反重力 / 橫向重力) |
material / materials[] |
Root material 是必填 fallback;materials[] 只列需要覆寫的 sub-mesh,可為空 |
| Entity nodes | 帶 node-level entity_type extras 的子節點,合計 ≤ 100、3 類 (§10);Root 沒有 entities[] 陣列 |
| Empty Node | RoutePoint_<n> 序列(RP1 = 起點、RPn = 終點;open 恰 2 點 / fixed ≥ 2 點)+ Checkpoint_N / KillZone_N / RespawnPoint_N(可選);順序語義由 track.route[] / track.checkpoints[] 陣列承載、名稱僅需唯一(零件與共用介面.md §5.4) |
11.1 跑道兩種模式¶
| 模式 | 結構 | 玩法 |
|---|---|---|
open(全場地跑道) |
route 恰 2 點(走廊關)、無寬度約束 | 起點 → 終點純物理 + 場地設計引導;無圈數概念(強制 lap_mode: linear);可加 Checkpoint(有序防抄近路關卡,須依序通過;checkpoint 間可走最短直線) |
fixed(固定跑道) |
RoutePoint 序列 ≥ 2 點(每點 width_m 全寬,走廊開) |
線性 (起≠終) 或環形 (起=終,圈數由房間設定 1–10);車在表面時偏離 spline 中心線 > width/2 → 觸發 b-soft 處罰流程(空中段不檢核,見 遊戲機制.md §場地系統) |
open 零實作成本(純物理 + 三層 fall-out 兜底);fixed 需 route spline 預採樣折線 BVH 查詢。
11.2 場地約束摘要¶
完整見 零件與共用介面.md §7.2:AABB ≤ 500×500×100m、GLB ≤ 80 MiB(強制 Draco + KTX2)、visual ≤ 3M tri、entity ≤ 100、destructible ≤ 50、patch ≤ 50。
12. 破壞模型分工¶
詳見 材質表.md §10.3 三種破壞機制分工(車內部件 / 場地物件 / Fluid deploy)+ §9 耐受度因子族 公式。
過熱破壞為獨立路徑:per-part temperature > manifest hydrate 的 thermalLimitC → 直接 broken(無 graceful degradation),見 算式表.md §6 + 遊戲機制.md §4。