MMD 物理穿模调优 — 从头发飞天到身体穿插
穿模的四种类型
| 类型 | 表现 | 常见位置 |
|---|---|---|
| 头发穿过头 | 头发根部分穿进头部 | 头顶、后脑勺 |
| 头发/裙摆粘在一起 | 多根头发互相卡住不分开 | 长发、多层裙摆 |
| 裙摆穿过腿 | 裙摆材质穿进腿内部 | 大腿前后 |
| 物理飞天 | 头发/裙摆飞上天不回来 | 甩头、大动作后 |
先做最快的检查
别直接就去调刚体——先做这几个最简单的检查,能解决一半问题:
检查一:模型原点对齐
角色是不是"飘"起来了或"埋"进地板了?
- 如果是 → 平移调整模型位置,让脚底刚好踩在 Y=0 平面上
- 物理引擎假设模型站在原点,原点不对物理当然算错
检查二:物理开关状态
播放控制条上的物理开关是不是开着的?开着时才会物理模拟。
检查三:MMD 物理参数全局值
菜单 → 设置 → 物理演算:
| 参数 | 正常值 |
|---|---|
| 重力 | 9.8(地球标准) |
| 空气阻力 | 0.002 |
| 物理步进 | 3(普通)或 5-6(高速) |
| 物理子步 | 1(默认) |
如果这些值被意外改动了 → 物理就会乱。
PMX Editor 里调刚体(核心)
打开 PMX Editor
- 下载 PMX Editor(社区标配,几 MB)
- 打开有穿模问题的
.pmx模型 - 切到右侧「刚体」标签
刚体关键属性
| 属性 | 类型 | 对穿模的影响 |
|---|---|---|
| 关联骨骼 | -- | 刚体跟随哪根骨骼——错了刚体就乱跑 |
| 形状 | 球/方块/胶囊 | 胶囊体适合头发,方块适合裙摆 |
| 半径/尺寸 | 数值 | 最关键——太大就重叠,太小就挡不住 |
| 类型 | Dynamic/Kinematic | 穿模问题几乎只在 Dynamic 之间 |
| 碰撞组 | 数字 | 控制哪些刚体互相碰撞 |
| 摩擦 | 0-1 | 太低会滑穿 |
| 弹性 | 0-1 | 太高会反弹导致穿模 |
碰撞组设置规则
Bullet 物理引擎用碰撞组控制碰撞关系:
- 刚体 A 和刚体 B 在不同碰撞组 → 不碰撞
- 刚体 A 和刚体 B 在同一碰撞组 → 碰撞
常用碰撞组分配建议
| 碰撞组 | 内容 | 碰撞行为 |
|---|---|---|
| 0 | 身体(头/躯干/四肢) | 和所有组碰撞 |
| 1 | 头部刚体 | 和身体、头发碰撞 |
| 2 | 头发根 | 和头碰撞 |
| 3 | 头发中段/梢 | 不和其他头发碰撞(丝之间不该卡) |
| 4 | 裙摆上半 | 和腿碰撞 |
| 5 | 裙摆下半 | 和腿碰撞,和上半碰撞 |
| 6 | 配饰 | 和身体碰撞 |
关键:头发丝之间不要互相碰撞——否则头发会"粘在一起"像一坨钢丝。每根头发的动力学刚体和相邻头发分在不同碰撞组。
四种穿模的针对性修复
问题一:头发穿过头
原因:头发根部的动力学刚体体积太大,和头部运动学刚体重叠。
修复:
1. PMX Editor → 找到所有头发根刚体
2. 缩小它们的半径/尺寸(从比如 0.1 缩到 0.05)
3. 如果还穿 → 找到头部运动学刚体,也缩小一点
4. 保存 → 回到 MMD 测试
更彻底的修复:把头发根刚体设为运动学(和头部骨骼直接绑定,不参与物理),只有头发中段和梢用动力学。
问题二:头发互相卡住
原因:所有头发刚体在同一碰撞组,互相碰撞。
修复:
1. PMX Editor → 刚体标签
2. 把头发刚体分成两组(奇数编号和偶数编号)
3. 设置碰撞组:头发组1和头发组2 → 不互相碰撞
4. 头发组都和头、身体碰撞(防止头发穿进身体)
问题三:裙摆穿过腿
原因:腿部运动学刚体太大,或者裙摆动力学刚体没和腿正确碰撞。
修复:
1. PMX Editor → 找到腿部运动学刚体
2. 缩小腿部刚体的半径/尺寸(不要把整个腿包住)
3. 确保裙摆动力学刚体和腿部在同一碰撞组(或正确设置碰撞)
4. 如果裙摆是多层 → 确保内层和外层的碰撞组设置正确
问题四:物理飞天
原因:头发/裙摆被甩出去后,物理引擎算不回来。
修复:
1. PMX Editor → 找到飞上天的刚体的约束
2. 增大约束的弹簧系数(Stiffness) → 让头发有"弹回来"的力
3. 增大约束的阻尼(Damper) → 减少过度震荡
4. 或在 MMD 全局设置里增加空气阻力
约束也很重要
PMX Editor 切到「约束」标签,每个关节连接的约束参数:
| 属性 | 说明 | 默认 |
|---|---|---|
| 约束类型 | Fixed / Hinge / Spring | Spring(最灵活) |
| 弹簧系数 | 抵抗变形的力 | 0.1(头发)/ 0.5(裙摆) |
| 阻尼 | 抑制振动 | 0.05(头发)/ 0.1(裙摆) |
| 允许角度 | 关节能弯多少度 | 头发:±60°,膝:0°-90° |
穿模时可以做的:增大弹簧系数 → 刚体更"硬" → 不容易被挤变形。
快速改善的"懒人方案"
方案一:PMX Editor 一键修复(部分模型)
部分 PMX Editor 版本有「物理修复」功能——自动重新分配碰撞组。如果你的版本有这个按钮,先点一下再手动微调。
方案二:换物理口碑好的模型
社区配布者在 README 里常提到:
- 「物理调整済み」→ 物理已调过,放心用
- 「物理ベース」→ 物理作为基础设置,可能需要微调
- 「物理未調整」→ 物理没调过,需要你自己来
找"物理调整済み"的模型能省一半事。
方案三:物理烘焙(终极方案)
如果调了半天还是穿模:
- 物理开着播放一遍 → 物理算出一版效果
- 物理烘焙到关键帧 → 固化下来
- 关掉物理开关 → 不再重新计算
- 渲染时用烘焙好的物理结果
物理烘焙是"定版"操作——烘焙后物理结果就固定了,不再实时模拟。但这也意味着你改不了物理效果了。
物理调优的心态
- 社区模型比你调得好——除非你是 PMX 大佬,否则大部分物理问题换个模型就能解决
- 不要试图完美——MMD 物理引擎是 Bullet 2.75(2013 年的版本),物理能力有限
- 先调碰撞组再调尺寸——碰撞组是最影响穿模的因素
- 保存前备份——PMX Editor 改完先 "另存为" 一份,别覆盖原模型