MMD 物理碰撞调优 — 解决头发穿模、裙摆卡住
穿模是什么
穿模(Clipping / Penetration)是指两个应该碰撞的物体穿过彼此——头发穿过头、裙子穿过腿、手穿过身体。在 MMD 里这几乎全是物理刚体设置的问题。
好消息是:大多数社区 PMX 模型已经配好物理,新手遇到穿模的概率很低。穿模通常出现在你做了以下操作后:
- 手动修改了模型(换了衣服、改了头发)
- 模型非常复杂(400+ 骨骼的精细模型)
- 做了极端姿势(头转到极限、腿踢到最高)
- 用了很老的模型(刚体设置粗糙)
穿模的三种根源
根源一:刚体体积过大
最常见原因。两个刚体的碰撞体积重叠了,Bullet 物理引擎不知道谁该让谁,结果就互相穿透。
典型表现:
- 头发根的刚体和头部刚体重叠 → 头发穿过头
- 裙摆上半段的刚体和躯干刚体重叠 → 裙子穿进身体
- 配饰(耳坠、项链)和身体刚体重叠 → 穿进肉里
修复:用 PMX Editor 打开模型,找到穿模的两个刚体,缩小其中一个的碰撞体积,让它们不再重叠。
根源二:碰撞组设置不当
Bullet 引擎用碰撞组(Collision Group) 控制"哪些刚体会互相碰撞"。默认设置是所有动力学刚体都在同一组,全互相碰撞。
问题场景:头发丝之间本来不应该碰撞(否则会卡住打结),但默认设置让它们互相碰撞 → 头发"粘在一起"而不是自然分开飘。
修复:PMX Editor 里把互相不该碰撞的刚体分到不同碰撞组。
根源三:关节约束太松
动力学刚体和它"挂着"的骨骼之间用关节约束(Spring/Damper)连接。如果弹簧强度太低:
- 头发会被重力拉着往下掉,穿过头
- 裙摆会垂得太低,穿过腿
- 整体物理"软塌塌"
修复:PMX Editor 里增大关节约束的弹簧系数。
PMX Editor 调优基础
你需要 PMX Editor(PME)——社区标配的 PMX 模型编辑器,免费且只有几 MB。
打开物理编辑器
- 打开 PMX Editor
- 载入
.pmx模型 - 右侧面板切到「刚体」标签
- 可以看到所有刚体的列表和属性
刚体关键属性
| 属性 | 说明 | 影响 |
|---|---|---|
| 关联骨骼 | 这个刚体跟随哪根骨骼 | 错误会导致刚体乱跑 |
| 形状 | 球体 / 长方体 / 胶囊体 | 胶囊体最适合头发丝 |
| 半径/尺寸 | 碰撞体积大小 | 最常调的参数 |
| 类型 | Dynamic / Kinematic | 大部分穿模只涉及 Dynamic |
| 碰撞组 | 属于哪个碰撞组 | 控制和谁碰撞 |
| 摩擦系数 | 碰撞时的滑动阻力 | 太低会滑穿 |
| 弹性系数 | 碰撞时的反弹 | 太低会粘住 |
约束关键属性
选中「约束」标签可以看到关节约束:
| 属性 | 说明 |
|---|---|
| 关联刚体 A | 约束连接的第一个刚体 |
| 关联刚体 B | 约束连接的第二个刚体 |
| 约束类型 | Fixed / Hinge / Spring 等 |
| 弹簧系数 | 抵抗变形的力(越大越"硬") |
| 阻尼 | 抑制振动的力(防止一直抖) |
快速修复清单
头发穿过头
1. PMX Editor → 刚体标签
2. 找到头部的运动学刚体 → 看它的碰撞体积是不是太大(把头发根包住了)
3. 缩小头部刚体的半径
4. 或找到头发根部的动力学刚体 → 把它移到头顶外面一点(关联骨骼微调)
5. 保存 → 回到 MMD 测试
裙子穿过腿
1. PMX Editor → 刚体标签
2. 找到腿部的运动学刚体 → 缩小碰撞体积
3. 或找到裙摆动力学刚体 → 增大碰撞组间距
4. 保存 → 测试
头发打结 / 互相卡住
1. PMX Editor → 刚体标签
2. 找到所有头发的动力学刚体
3. 把"头部组"刚体分成两组:头部本身 + 头发
4. 设置:头发刚体和头部碰撞组不碰撞
5. 保存 → 测试
物理抖动不停
1. PMX Editor → 约束标签
2. 找到抖动部位的约束
3. 增大阻尼系数(Damping)
4. 或增大弹簧系数(Stiffness)
5. 也可以增大刚体摩擦系数
MMD 全局参数调整
如果 PMX Editor 里调完还是穿模,试试 MMD 全局设置:
物理步进频率
MMD → 设置 → 物理演算 → 物理步进频率(Physics Step):
| 步进值 | 效果 |
|---|---|
| 3(默认) | 标准精度,普通模型没问题 |
| 5-6 | 更高精度,减少穿模 |
| 8+ | 最精确,但可能卡 |
高速动作(踢腿、大甩头)需要更高步进值。
物理子步(Substep)
部分版本支持:把一次物理模拟再分成多步计算。默认 1,有穿模时调 2 或 3。
重力
几乎不改。但如果头发总是掉下来穿模,可以稍微降低重力(比如从 9.8 降到 6-7)。副作用是头发飘得更厉害,可能需要配合增加空气阻力。
用 Blender 物理系统验证
PMX Editor 的物理预览有限。如果你有 Blender:
- 用 Blender MMD Tools 插件导入 PMX
- 切换到 Blender 的 Bullet 物理模拟
- 可以更直观地看到刚体碰撞情况
- Blender 的物理调试功能比 PMX Editor 强大得多
什么时候换模型
如果一个模型的物理怎么调都不对(比如头发根在几何上就在头内部),换模型比重建物理快得多。社区好模型太多了——找物理口碑好的(看配布说明里有没有提到"物理调整済み")。
调优顺序建议
- 先缩小碰撞体积(PMX Editor)
- 再调碰撞组(PMX Editor)
- 然后调约束弹簧(PMX Editor)
- 最后才考虑 MMD 全局参数
大多数穿模在第一二步就能解决。