Appearance
状态: 🟢 已修复
日期: 2026-07-10 严重程度: 🟠 P2 影响范围:
frontend/src/physics/(12 个文件,3000+ 行) 发现方式: 代码审核(ADR-081 决策分析) 修复方案: 删除 12 个 XPBD 文件,仅保留 physics-bridge.ts 和 wind-physics.ts;虚拟裙骨 + 风场适配 WASM Bullet
两套物理引擎并存,性能差 3-5 倍
日期: 2026-07-10 严重程度: P1(技术债务,维护成本翻倍,性能差距显著) 影响范围: src/physics/(12 个文件,3000+ 行) 发现方式: ADR-081 决策分析
问题描述
联邦有两套物理引擎:
- WASM Bullet — MMD 模型自带,运行在 C++ 层,性能优
- XPBD(TS) — 手写布料引擎,运行在 TypeScript 层,性能差
两套碰撞检测、两套步进逻辑、两套 UI 集成。维护成本是双倍的。
同样的布料,WASM Bullet 比 XPBD 快 3-5 倍。
XPBD 建于 MMD 自带物理 API 未完全暴露的时代——它是一个过渡方案。但过渡期太长了。
根因分析
babylon-mmd 的 public API 已经够用了:addRigidBody、addConstraint、removeRigidBody、removeConstraint——全 public,不需要 fork,不需要 hack。
但 XPBD 已经写了 3000 多行,12 个文件。删它,意味着承认"当时的决策已经过时了"。
承认过时的决策,是架构演进中最难的一步。
为什么没有暴露
XPBD 能用。能用就不是 bug。性能差是"优化项",不是"修复项"。
但优化项积累到一定程度,就变成了重构。
修复方案
删除 12 个 XPBD 文件。src/physics/ 只保留 physics-bridge.ts 和 wind-physics.ts。
虚拟裙骨(ADR-084):skirt-analyzer.ts + virtual-skirt.ts,从 mesh 顶点分析生成虚拟骨骼,注入 WASM Bullet。
风场注入:wind-physics.ts 适配 WASM Bullet 刚体,风力系数从 0.05 调到 0.15。
教训
- "能用"是技术债务的合法外衣 — 能用不是 bug,但能用不等于应该留着
- 承认过时的决策,比继续维护它更诚实 — XPBD 的删除不是失败,是成长