MMD 的 IK 与 FK — 反向动力学让手脚自动跟随
一句话概念
IK = 反向动力学(Inverse Kinematics):你动末端(手腕、脚踝),中间的关节(肘、膝)自动弯曲到位。FK = 正向动力学(Forward Kinematics):你动肩膀,整条手臂跟着转——每个关节独立,需要手动调每个部位。
直觉理解
想象你要摆出一个姿势:
FK 方式(不推荐)
从零开始:
- 旋转肩膀 → 手臂抬起来一点
- 旋转肘部 → 小臂弯曲
- 旋转手腕 → 手掌翻过来
- 三个部位都要独立调整 → 繁琐
IK 方式(推荐)
直接操作末端:
- 拖着手腕骨骼到目标位置 → 肩膀和肘自动弯曲到位
- 调整手腕的旋转 → 手掌角度微调
IK 的便利性是压倒性的——MMD 默认就是 IK 模式。
MMD 中哪些骨骼有 IK
几乎所有社区 PMX 模型都给四肢末端骨骼设置了 IK:
| 部位 | IK 末端骨骼 | 自动跟随 |
|---|---|---|
| 左臂 | 左手/手首_L | 肘_L → 肩_L |
| 右臂 | 右手/手首_R | 肘_R → 肩_R |
| 左腿 | 左脚/足首_L | 膝_L → 股_L |
| 右腿 | 右脚/足首_R | 膝_R → 股_R |
模型作者用关节约束告诉物理引擎:"如果手移动,让肘也跟着弯曲,直到肩"。
IK 链长度
每个 IK 骨骼有一个"链长度"参数——从末端往上计算,影响多少根骨骼。
| 链长度 | 影响范围 | 适用场景 |
|---|---|---|
| 2 | 肘 + 肩 | 手臂弯曲不影响锁骨 |
| 3 | 肘 + 肩 + 锁骨 | 手臂大幅抬起时锁骨也跟着动 |
| 1 | 只有肘 | 手腕微动手肘弯曲 |
链长度由模型作者设置,通常不需要用户改。如果 IK 弯曲范围太大,可以把链长度调小(限制影响范围)。
什么时候需要关掉 IK
场景一:摆精确姿势
IK 会自动算关节角度,但有时你想要一个特定的、非自然的关节弯曲(比如手臂不自然地伸直)。关掉 IK → FK 模式 → 手动调每根骨骼。
场景二:修正 IK 扭曲
在极端姿势下,IK 可能让关节朝奇怪的方向弯曲(比如肘往里拐而不是往外拐)。
修复方法:
- 暂时关闭 IK
- 手动把关节转到正确方向
- 打开 IK,微调末端位置
- 必要时调整角度限制
场景三:手部精细控制
手指的骨骼通常没有 IK——手指是独立 FK 骨骼,需要单独每根手指调整。这是 MMD K 帧里最繁琐的部分(幸好大多数 VMD 已经包含了手指动作)。
如何开关 IK
全局 IK 开关
部分版本在时间轴控制面板上有 IK 开关——关掉后所有骨骼都是 FK 模式。适合做 FK 动作(如某些特定姿势)。
单骨骼 IK 开关
在骨骼操作面板里,选中 IK 骨骼(如手腕),可以单独关闭它的 IK。关闭后:
- 直接拖手腕会导致手臂整体平移(FK 模式)
- 必须手动旋转肘和肩
IK 和关键帧
IK 的状态(开/关)可以被关键帧记录——你可以在某个帧打开 IK 摆姿势,在下一帧关闭 IK 手动调细节。
实操流程
帧 0(IK 开)→ 拖手腕到目标位置,肘自动弯曲,Register
帧 5(IK 关)→ 手动微调肘的角度,Register
帧 10(IK 开)→ 继续调整手腕位置,Register
角度限制
模型作者在设置 IK 时通常会加角度限制——比如肘不能反向弯曲、膝不能弯到脚后面。
但有些模型(尤其是老模型)的角度限制没设好,IK 会算出"不可能"的姿势。这时:
- 换模型(最简单)
- 用 PMX Editor 手动调整角度限制
- 关闭 IK 手动 K 帧
IK 与物理
IK 影响的是运动学刚体(骨骼直接驱动的身体部位)。动力学刚体(头发、裙摆)不参与 IK,它们由 Bullet 引擎物理模拟。
但有个间接关系:当 IK 让身体做出一个姿势,物理引擎就会以这个姿势为基础开始模拟头发和裙摆的运动。
MikuMikuMoving 里的 IK
社区分支 MikuMikuMoving 对 IK 系统做了大幅升级:
- 更准确的 IK 解算器
- 支持多目标 IK(一只手同时跟随两个约束)
- 更灵活的链长度调整
- 实时 IK 反馈更平滑
如果你经常需要精确 IK 控制,可以试试 MikuMikuMoving。
典型 IK 误区
误区一:IK 是万能的
IK 只解决"从末端反推关节"的问题,但不解决所有姿势问题——比如手指、腰部扭转、脖子的复杂动作还是需要 FK 手动调。
误区二:IK 永远开着
在某些快速动作(如踢脚)里,IK 可能让脚"滑"到地面以下——关掉 IK,手动把脚放到地面上,再开 IK 微调。
误区三:链长度调得越大越好
链长度太大 → 整个身体跟着动(包括头、躯干),反而不可控。保持默认值就好。
实操例子:让角色踩到地面上
问题:角色的脚"飘"在地面以上几厘米。
解决:
- 打开 IK
- 选中脚踝骨骼
- 向下拖直到脚踝接触地面(Y 轴=0 平面)
- Register 关键帧
- 如果膝盖弯曲得太厉害,减小 IK 链长度或微调膝骨骼角度