Demo分享 | Vive Tracker全身动作捕捉开发指南
什么?Oh.. 你想花5分钟功夫了解怎样实现全身动作捕捉?那下面就通过一个Demo给大家介绍下Vive Tracker全身动作捕捉开发指南。
内容提要:
什么是全身动作捕捉
软、硬件准备
原理介绍
非IK部分
IK部分
什么是IK
三点式IK更准确
选择弯曲面
校准
如何佩戴Tracker
什么是全身动作捕捉
一句话,动捕就是把人物动作一比一还原到虚拟世界中。
软、硬件准备
软件: unity, steamvr plugin, IK plugin(本例使用的Final IK), 一个绑定骨骼的模型
硬件: Vive一套,Tracker*3, *用于佩带Tracker的配件
原理介绍
我们写程序的目标是:把虚拟人物的造型摆得和玩家一样。手段是设置虚拟人物的骨骼的位置和朝向。
How can we achieve this?
简单说就是,利用tracker定位双脚和腰,controller定位双手,再用IK(Inverse Kinematics)计算出膝盖和肘的位置。
下面详细说明。
非IK部分:
手、脚、腰的位置可以通过Tracker和controller的位置得出。
脚:
把tracker绑在脚面上,就可以精确地知道脚的位置和旋转,因为它们的相对位置是固定的。假设他们之间的差异是矩阵trans,则如下等式成立 pose_foot = pose_tracker* trans;
在Unity可用不着这么复杂的式子。只要把脚的模型设置为Tracker模型的子物体就行,这样tracker模型移动时,也会带着脚的模型移动。
> 这只是在逻辑上是对的,实际写程序时不能真的这样设置,否则会破坏人物模型的骨骼结构。正确做法是找一个任意的GameObject作为Tracker的子物体,再每帧把GameObject的位置和旋转赋值给脚的模型。在例程中我用了个黄色小球。
手:
手和脚的定位略有不同,因为手是用controller定位的,而每个人握controller的方式几乎是一样的。所以可以认为不管谁在体验,手和手柄之类的相对位置都是相同的。
同脚的定位一样,把手的模型设置为Controller模型的子物体即可实现定位。
躯干:
和脚的定位原理一样。把躯干模型设置为tracker的子物体。
IK:
什么是IK
IK就是反向动力学(Inverse Kinematics)。
IK问题是在已知两端关节位置时,计算中间关节的夹角和位置。举例:已知手腕和肩的位置,计算手肘的位置。多数时候,IK问题没有唯一解,我们只能得到众多可能解中的一种。
本例中用IK算法的意义是减少定位器的数量,使得定位系统更方便使用。我们没有在腿和胳膊上绑tracker,所以要知道膝盖和肘的位置,需要用IK算出来。
三点式IK
三点式IK就是只有三个关节时的IK。三点式IK有唯一角度解,这样能提升计算出的位置的准确性。原因如下图所示:
把三个关节连起来,我们得到一个三角形,其中a,b是骨骼因此长度已知,c是起点和终点的连线所以长度也已知。对一个三边都已知的三角形,角度是有唯一解的。
以人体的角度说,如果已知脚踝和大腿根的位置,膝盖的弯曲角度有唯一解。
所以,为了使用稳定的3点式IK,除了给手和脚定位,我们需要在腰上也加一个tracker。这样我们不仅能精确地知道躯干的位置,还能比较准确地计算膝盖和肘的位置。
选择弯曲面
利用三点式IK我们知道了膝盖的弯曲角度,是不是就能准确地知道膝盖的位置?答案是还不能。
上图中,模特的脚踝、大腿根的位置都一样,膝盖也都是弯曲90度,然而膝盖位置不一样。很明显,确定了弯曲角度后位置的解依然有无数个。
要解决这个问题,我们需要选择一个合理的"弯曲面",也就是说在无数个结果中我们只取在这个平面上的解,让我们的猜测更准确。
好在人体有个特性,在站着的时候,很多时候大腿的朝向和脚的朝向一样。你可以站起来抬腿试试是不是这样。因此我们选择脚所在的平面为弯曲面结果会比较准确。
*Final IK中的设置
图中:
Bone1, Bone2, Bone3代表的关节分别是:大腿根、膝盖、脚踝
Target:标记脚的位置和朝向的物体
Bend Modifier = Target: 弯曲面选择和脚一致
校准:
需要校准是因为每个玩家的佩戴方式和体型都不一样,tracker和身体的相对位置不一样。上面提到了要把脚设置为tracker的子物体,而二者的相对位置和相对朝向需要校准才行。
本例的方法是让玩家走到坐标原点,身体和模特重合,最重要的是,脚要踩在她脚上。这样我们就能通过Tracker和模特的脚的位置差来得知玩家是如何佩戴的,也就是获得了Tracker和脚的相对位置和相对朝向。
躯干同理。
手不用校准,因为每个人握姿(手腕离手柄末端的距离)差不多。
如何佩戴Tracker
佩戴Tracker有两个重要的原则:
- 稳定
- 方便
只要符合这两个原则,怎么佩戴都可以。下面介绍一种方法。
要准备的东西:弹性魔术贴(hook & loop),双层热靴,小硬板
通用弹性魔术贴:
或者更方便的有扣环的弹性魔术贴:
双层热靴:
小硬板(硬纸板或者塑料):
组装后:
注意,硬板的作用是用让tracker稳定、不摇晃。本例中用的是包装tracker的纸盒。
Contact me: james_xiong@htc.com
附件下载:
Vive IK Demo 中文说明-----------------------------Vive IK Demo是一个使用HTC Vive和HTC追踪器实现的全身动作捕捉程序。
注意,本项目的源代码仅供参考,而不能在Unity中顺利编译。想要编译成功需要:- 在assetstore购买IK插件(比如FinalIK),或者自己实现一个IK插件。Copyright: HTC Corporation