Skip to content

Unity IK 转 Three.js ​

虚拟人内容从 Unity 迁移到 Web 端时,最难搬的不是模型和贴图,而是 IK——两端的数学约定不同,直接把 IK 结果搬过去,动作是歪的。

技术问题 ​

虚拟人产品常有双端需求:PC / 移动端用 Unity,Web 展示端用 Three.js。同一段角色动作要在两端呈现一致的效果。骨骼动画的关键帧数据相对好迁移,但 IK 驱动的动作——例如手够向某个目标点、脚踩实地面——依赖引擎侧的 IK 求解,Unity 里调好的 IK 表达拿到 Three.js 里没有直接对应物。

现有方案不足 ​

  • 坐标系约定不同:Unity 与 Three.js 在坐标 handedness 和轴向约定上存在差异,位置和旋转数据直接搬运会出现镜像、翻转。
  • 骨骼层级不保证一致:同一角色在两端的骨骼命名、层级组织可能不同,IK 作用的目标骨骼对不上。
  • IK 约束表达方式不同:IK 目标点、约束链这些概念在两端引擎里的表达和求解方式不同,没有现成的跨引擎转换手段。

核心思路 ​

转换链路按「先对齐数学基础,再搬约束」组织:

mermaid
flowchart TD
    A["Unity 侧 IK 表达<br>目标点 / 骨骼链 / 约束"] --> B["坐标系统一<br>位置与旋转变换"]
    B --> C["骨骼层级映射<br>两端骨骼对齐"]
    C --> D["IK 约束转译<br>目标与链式关系重建"]
    D --> E["Three.js 侧求解与播放"]
    E --> F["双端动作一致性验证"]
  • 坐标系统一:在数据出入口做位置与旋转的坐标变换,把 handedness 和轴向差异收敛到一个地方处理,业务侧不感知。
  • 骨骼映射:建立 Unity 骨骼与 Three.js 骨骼的对应表,IK 链上的每一环都映射到 Web 端的正确骨骼。
  • 约束重建:把 IK 目标点等约束信息转成 Three.js 侧可求解的表达,由 Web 端重新求解,而不是搬求解结果——这样 Web 端参数变化时动作仍然正确。

一个明确的边界:迁移的是「IK 表达」,不是「IK 求解结果」。搬结果只能得到一帧一帧的死数据,搬表达才能让 Web 端保留交互能力。

应用场景 ​

  • Unity 制作的虚拟人动作内容在 Web 页面中展示,双端效果一致。
  • 跨引擎资产复用:动作内容只制作一份,分端转换。
  • Web 端轻量虚拟人交互:在浏览器里保留 IK 驱动的交互动作能力。

关联案例 ​

罗子初 · AI 座舱专家 · 8年端侧研发

Lv.1