背景

动作捕捉时使用两套系统:

  • 青瞳视觉的光学的全身动作捕捉

  • 无远弗届的惯性的手部动作捕捉

技术人员来学校培训时教了使用MotionBuilder作为中间件,将两套系统的数据送到虚幻里面,但步骤过于繁琐了,当时参与培训的老师和学生只有我一个人学会了。

繁琐的步骤,每次遇到一个需要驱动的模型就要弄好久,而且MotionBuilder有BUG,保存下来不能用,下次也要重新配置。

所以,我要抛弃MotionBuilder,直接把两套系统的数据送到UE里面。

MotionBuilder实际上做了两件事情,重定向、合并两套系统的数据。

动作捕捉的数据实际上是针对于模板骨骼的,想要驱动其他骨骼必须重定向,重定向可以在MotionBuilder里面做,可以在光学动捕软件里面做,也可以在UE里面做。

光学动捕软件做重定向并不方便,而且也不能合并另一套系统的数据,所以,所有数据都在虚幻引擎内处理。

两套系统都提供了对应的UE SDK,这两个SDK是我们继续的基础。

解决方案

  • 将两套系统的数据合并到一个模板骨骼上。

  • 将模板骨骼的动画重定向到目标骨骼上。

很简单,对吧?( ̄︶ ̄)↗ 

模板骨骼

为了避免骨骼名字对不上或者角度对不上导致动作很奇怪,我直接将MotionBuilder里面使用的模板骨骼导出了,将动捕的全身骨骼拼接了数据手套的手部骨骼。

Maya中看到的骨骼情况:

根据测试(踩坑),一般骨骼的正方向是+Z,但是导入虚幻的模板骨骼正方向需要是+X,需要把根骨骼旋转90度,同时冻结变换。

下载处理好的模板骨骼:templateT.FBX

数据源

以下是需要的动画蓝图节点:

光学动作捕捉的数据源,有自己的一套命名规则,骨骼命名可以修改。

需要全局连接到动捕软件才有数据。

数据手套的数据源,有自己的一套命名规范,骨骼命名可以修改。

需要给骨骼网格体添加两个GloveComponent子组件,连接数据手套软件和指定ID。

GloveComponent的配置参考官方示例项目(因为我直接复制了示例项目的节点)

数据手套SDK的轮子节点,用来混合手部动作和动捕动作的。(这样就不用自己写按通道混合节点啦)

在模板骨骼没问题的情况下,动画蓝图是相当简单的:

理论上,现在模板骨骼已经能正常驱动了。

重定向

接下来就是把动画重定向到目标骨架上啦。

首先需要获得一个从模板骨架到目标骨架的 IK重定向器 这一步完全是虚幻基础操作,就不再过多赘述啦。

IK重定向器除了可以在动画重定向界面把动画剪辑重定向,还可以用在动画蓝图里,实时重定向另一个骨骼网格体的动画数据。

在目标骨架的动画蓝图上使用这个节点:

我是将模板骨架的骨骼网格体组件作为目标骨架的骨骼网格体组件的父组件了。

如果不是父组件,上图中的Source Mesh Component就需要手动指定了。

到此,完全UE的动捕驱动完成。

当拿到一个新的模型时,只需要重复重定向部分的操作就可以啦。

图片-ulkg.png

我能想到的,最大的成功就是无愧于自己的心。