MotionVenus·Unity3D实时插件

                                                                              MotionVenus·Unity3D实时插件
1.1 下载插件包
(1) http://www.foheart.com/resource.html  下载 Unity3D 插件。
(2) https://github.com/foheart  git clone 本库到硬盘任意位置即可。
1.2 建模建议
建模及导出fbx时,需将模型调整为T-Pose。
在 MotionVenus 中,以模型 T-POSE 为起始旋转输出每段骨骼相对于父骨骼的相对(Local)旋转值或相对于世界坐标的全局(Global)旋转值。所以在建模及绑定蒙皮时,建议使用 T-Pose进行建模,要保证在 T-Pose 时模型肩部无耸起、拉扯等情况。
为什么使用 T-Pose?
T-Pose 能够消除由于不同公司的工作习惯造成的 A-Pose 中肩部骨骼与大臂的夹角不确定问题。
在 A-Pose 中很难确定肩部与大臂的夹角,而此夹角对于上臂的动作形成至关重要,由于上臂运动链解算多使用 FK,而在 FK 中越靠近根传感器的运动会越对末传感器的位置造成大量误差。
此误差若过大会造成整个上肢的 IK 运算无法运行,所以确定肩部与大臂的初始角度至关重要。
在现实情况下,穿戴动捕很难做出一个标准的 A-Pose 校准动作。
T-Pose 的每一段骨骼的初始朝向都有明确定义,为动捕校准、运算都提供了准确的起始参考。
1.3 插件使用流程
(1) 配置 MotionVenus 转发协议【设置-选项-转发规则】如下图:

MotionVenus·Unity3D实时插件
 
(2) 打开 unity,新建工程:

MotionVenus·Unity3D实时插件
 
(3) 找到工程创建目录下的 Assets 文件夹,将FOHEART unity 插件拷贝到此文件夹下:

MotionVenus·Unity3D实时插件
 
在Unity3D Project下出现插件及脚本:

MotionVenus·Unity3D实时插件
 
Assets文件夹下新建Model文件夹,放入待绑定的模型(.fbx格式):

MotionVenus·Unity3D实时插件
 
返回Unity3D界面。
在场景中任意创建一个物体,这里创建一个Cube:

MotionVenus·Unity3D实时插件
在右侧Inspector中点击Add Component,添加NetFrameDataReceiver脚本:

MotionVenus·Unity3D实时插件
 
将Cube的Mesh Renderer选项去掉,从而将Cube隐藏:

MotionVenus·Unity3D实时插件
 
(4)将模型拖入场景中,并在右侧Inspector中点击Add Component,添加FoheartModel.cs脚本:

MotionVenus·Unity3D实时插件
 
在Cube的脚本中展开PlayerList,Size填入1,然后Element 0中拖入刚才操作的模型:

MotionVenus·Unity3D实时插件
 
(5)点击模型脚本中Self-binding bones按钮,脚本会自动填入名称相近的骨骼:

MotionVenus·Unity3D实时插件
 
否则,则需要将左侧未识别的骨骼拖拽到右侧对应的部位上,假设Neck未识别到,将左侧的Neck拖入右侧Neck栏:

MotionVenus·Unity3D实时插件
 
其它未识别的骨骼按照同样方法操作。
ActorName中填入MotionVenus左侧列表中的套装名称:
 MotionVenus·Unity3D实时插件

MotionVenus·Unity3D实时插件
 
保存工程并运行:

MotionVenus·Unity3D实时插件
 
1.4 Demo
下载的插件包中有Demo工程,使用Unity5.6.0以上版本打开运行。
1.5 绑定后的模型滑步/浮空或者脚部在地面下等问题如何解决?
(1)问题分析
在MotionVenus中,按照严格流程,需要详细准确测量人体每段骨骼的长度,填入【骨骼】参数后,再进行动作捕捉。然而为了方便,大部分情况下我们只选用内置模版,但是即使选择了与自身不完全匹配的尺寸模版,MotionVenus也能通过算法计算出没有漂移和滑步的位置信息。
但是由于在Unity3D中的绑定模型尺寸、比例与MotionVenus中输出位移数据的模型不一致,所以会导致腰部位移一致,但是脚部悬空或者伸入地面以下的情况,这种情况是正常的,我们需要采取措施进行修复即可。
例如,在unity3D中绑定了一个身高只有半米的矮人模型,当运行时,由于正常的腰部位置在0.95m,所以此矮人模型的脚部会腾空。
(2)确定骨骼长度
实时模式:在实时模式下,通过人物栏->骨骼长度设置,设置或者查看当前使用的骨骼长度,设置方法请参考身体骨骼长度设置。
回放模式:在已经录制完成的文件上使用右键->属性打开属性窗口,如下所示:

MotionVenus·Unity3D实时插件
 
图 2.11.2 文件属性
图2.11.2骨骼信息即为录制文件时使用的骨骼长度信息。
(3)确定根骨骼位置
首先应该确定在MotionVenus中Hips,也就是根骨骼的起始高度,即:胯高,在此设为H1。若在Unity3D中绑定的模型,胯高若小于H1(胯部到脚跟的距离,不包括鞋底厚度),则模型运动过程中脚部会腾空,若胯高大于H1则脚部会踩到地面以下。(3)设置胯高偏移
假设需要模型在距离地面某个高度,或在地面下某个高度,或任意一个区域。需要将模型整体平移一个位移,这个位移在Location Offset XYZ中设置。
选中绑定的模型,在右侧设置Location Offset XYZ:确定模型的偏移量,填入XYZ中即可。 

MotionVenus·Unity3D实时插件
(4)设置XYZ轴倍率值
选中绑定的模型,在右侧设置Location Scale XYZ: 在设置完成胯高之后,只是确定了模型的整体空间位置,但是若H2小于H1(腿短),则模型运动时,会出现走路过快的情形,若H2大于H1则会出现模型运动过慢的情形,这时需要缩放XYZ轴运动的倍率为H2/H1。
(5)仅适用于相近比例骨骼模型
以上所说方法仅适用于U3D中模型腿部大腿/小腿/脚长比例与MotionVenus中使用模版比例相同,或接近相同的情况。
大部分类人模型或正常人体模型大腿:小腿:脚长基本符合1:0.70.5,若模型符合此比例那么绑定效果可以达到理想效果。
例如,MotionVenus中男175cm模版,其中大腿长44.34cm、小腿长36.74cm、脚长24.99cm,比例为1:0.83:0.56,那么Unity3D中的模型下半身也要与此比例相符或者接近,经过第五节的步骤之后,脚部可以做到紧贴地面无滑步、陷地、腾空。
(6)非正常比例骨骼模型如何处理
若在Unity3D中使用的模型已经制作完成不便更改,或者骨骼比例需要以一种夸张的比例设置,那么必须在动捕开始之前就在MotionVenus中提前设置夸张的长度或者比例,具体方法可以按照以下方式实现:在“身体骨骼长度”设置窗体中,详细设置大腿、小腿、脚长的数值,使之与Unity3D中需要绑定的模型保持长度一致,或者比例一致,然后穿戴动捕进行表演实时捕捉、或捕捉完成后回放数据。
1.6 注意事项
插件使用时,需要注意以下地方:
(1)需要首先将模型调整到标准的T姿势,并且人物正面朝向Unity3D的Z轴正方向。
(2)使用Unity3D的过程中MotionVenus软件不可最小化。