从动作捕捉到 BVH Motion Retargeter
2025 年,我为了自己制作 Blender 动画,购买了一套商用 AGI 动作捕捉系统。最初这完全是兴趣消费:相比大量手工 K 帧,动作捕捉可以直接把真人动作转换成骨骼动画,对我自己制作角色动画方便很多。
设备买回来以后,我又觉得如果只在自己偶尔做动画的时候使用,大部分时间其实都会闲置。既然硬件、软件和学习成本已经发生,我便开始在在线平台提供视频动作捕捉服务:客户提供人物动作视频,我负责完成动作捕捉、数据整理,并根据需求交付 BVH 或进一步处理后的角色动画。这样一来,同一套设备一方面继续服务自己的兴趣,另一方面也可以利用闲置时间产生一些收入。
自己的动画需求
│
▼
购买 AGI 动作捕捉系统
│
├── 自己制作动画
│
└── 在线提供动作捕捉服务
│
▼
产生收益

真正开始处理订单以后,我很快发现动作捕捉本身反而不是最麻烦的环节。设备可以输出 BVH,但客户使用的角色可能来自 Mixamo、Unreal Engine 5 或 VRM,不同骨架之间存在骨骼名称、层级、人体比例、局部坐标轴和 Root Motion 等差异。如果每一单都手工改骨骼、建立约束、Bake 动画再重新配置导出,设备提高了采集效率,后处理却重新成为了人工瓶颈。
所以后来我把自己反复使用的处理流程写成了一个 Blender 插件:BVH Motion Retargeter。插件先通过 JSON 建立不同 BVH 骨骼与内部骨骼体系之间的 Mapping,对源骨架进行整理和兼容性检查,再将动作重定向到 Mixamo、UE5 或 VRM 人形骨架。
动画传递主要使用 Blender 的 Copy Rotation / Copy Location Constraint。程序先让目标骨骼跟随源 BVH 骨骼运动,再通过 NLA Bake 把最终姿态烘焙成真正的关键帧,同时处理人体比例、Root Motion 和部分骨骼轴差异。Bake 完成以后就可以删除临时约束,继续在 Blender 中编辑动画,或者直接按照对应 Profile 导出 FBX。
视频
↓
AGI 动作捕捉
↓
BVH
↓
骨骼 Mapping
↓
骨架兼容性检查
↓
Constraint Retarget
↓
Motion Scale / Root Motion
↓
NLA Bake
↓
动画检查与清理
↓
FBX / Blender 动画
对我来说,这个插件最直接的意义并不是单纯“写了一个 Blender 工具”,而是把以前每一单都要重新完成的操作固化进代码。第一次遇到某种骨骼问题,我可能还需要自己解决;解决以后把规则写进插件,之后再遇到类似数据,就可以让程序替我完成大部分重复劳动。
于是这套系统最终形成了一个比较完整的关系:AGI 设备负责提高动作采集效率,BVH Motion Retargeter 负责降低动作转换和交付成本,而我主要处理客户需求、特殊骨架和最终质量检查。一套最开始为了自己兴趣购买的设备,也因此逐渐从单纯的消费品变成了能够同时服务个人创作和对外业务的生产工具。
项目已经开源在 GitHub:
















这一切,似未曾拥有