Demo分享 | Vive Tracker全身动作捕捉开发指南

发表于2017-04-10
评论4 1.07w浏览

什么?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部分

 

手、脚、腰的位置可以通过Trackercontroller的位置得出。

 

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有两个重要的原则:

  1. 稳定
  2. 方便

只要符合这两个原则,怎么佩戴都可以。下面介绍一种方法。

 

要准备的东西:弹性魔术贴(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

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论