4
本文作者: 王锐 | 2016-04-19 11:25 | 专题:VR空间定位全解:如何在虚拟世界中行走? |
按:本文作者王锐,VR行业资深从业者。
现有的VR体验馆的构建却还缺少了最重要的一环,就是廉价而灵活准确的定位方案。本文将据此阐述一些已有方案的优劣。本文分上下篇。
虚拟现实刮起的风暴如今已经愈演愈烈,从形形色色的头盔和眼镜,到各种奇思妙想的交互设备,再到内容制作和建立体验馆的尝试。越来越多的VR相关从业者和创业者都将The Void,Zero Latency等前辈作为自己下一步赶超的目标,发出了开发VR主题公园,或者VR主题体验解决方案的宣言。
然而,从宏观的角度来看,整个行业也并非发展的一帆风顺:VR头盔和眼镜的水准参差不齐,主流产品(例如OculusVR和HTC Vive)尚未完全展开消费者市场;VR对系统配置的要求很高,相关设备随身穿戴不易,而移动端设备的渲染则多半力有不逮;而针对体验馆的交互内容如何制作,互动方式如何设计,也有诸多不甚明朗的地方。而除此之外,VR体验馆的构建却还缺少了最重要的一环,就是廉价而灵活准确的定位方案。
这里所说的定位,就是确定体验馆中的参与者在场馆中的绝对空间位置,并反馈到所有参与游戏的玩家和游戏服务器上,进而执行群体游戏所必需的各种游戏逻辑。
例如,当一位玩家靠近树林的边缘时,一头蓄谋已久的饿狼会猛然扑出来;又比如多位玩家展开一场虚拟现实的真人CS大赛,互相射击与开展战术。如果玩家在游戏场地内的位置无法得到有效识别,那么相应的乐趣和复杂度自然也就少了很多,也许只是来一场第一人称的定点射击游戏而已。而定位的精度和速度也绝对不容忽视,20cm的误差也许就决定了射出的子弹是否能穿透虚拟敌人的胸膛,而定位本身带来的延迟,同样也会给虚拟现实玩家的现场感带来巨大的影响,甚至成为3D晕动症的帮凶。
然而,纵观现在市面上形形色色的VR空间定位方案,却并没有哪家能够提供足够成熟稳定的技术实现,亦或者用巨大的成本以及灵活度的丧失作为代价,构建并不成功的Demo作品。这样的程度恐怕还远远不能称之为解决方案,也远远无法满足众多体验馆从业者的胃口。那么,好的定位方案应当以怎样的标准作为自己的目标?整个行业缺失的救世主又是否已经到来呢?本文将尝试对此略加阐述。
去年底,日本新宿的繁华地段进行了一次为期只有一天的VR体验,通过头戴Gear VR显示一个虚拟雪山场景,同时搭建了实体的吊桥道具,并通过风扇和冷空调来模拟寒冷的山巅环境。体验者在吊桥上战战兢兢地前进,最终在场地的终点位置拿到属于自己的奖品——来自经销商的一杯热饮。
(Via v7.pstatp.com)
这个体验游戏的复杂度并不高,收效却十分显著。而其中不可或缺的一环就是判断玩家在吊桥上行走的位置,然后对Gear VR中渲染的场景做出对应的处理。而在同一个宣传视频中,我们不难发现这样一丝端倪:
(Via v7.pstatp.com)
很显然这是一台微软的Kinect2体感设备,它可以通过TOF(飞行时间)计算的方法,获取传感器出射光线遇到物体反射后的相位差,从而得到设备与实际场景之间的距离值,也就是深度值(depth)。由此形成的深度图像不仅可以用来判断物体相对体感设备的位置,还可以进一步得到物体的点云数据,甚至是角色的骨骼信息。最重要的是,Kinect2本身只是XBox One游戏机的可选外设,因此要买到它并且用来做VR内容的简单空间定位,绝不会花费太多的成本。
(Via edgefxkits.com)
不过,物美价廉的对立面就是差强人意的性能参数,30fps的刷新频率必然让人能够比较明显地感受到定位结果的延迟(虽然这种延迟相比头盔的延迟来说,给人的影响更小),并且Kinect的视场角只有60度左右,最大识别范围一般来说为3-4米。在这个区域内可以识别最多6个人的位置信息,并且他们在Kinect的视场范围内不能有太多的重叠,以免漏测(如上图所示)。显然,这些苛刻的限制条件让我们很难想象出一个比爬雪山喝咖啡更复杂的游戏了,不过至少这是一个不错的开始。
有一则去年的新闻,在大多数VR从业者耳中应该不会陌生:来自澳大利亚的Zero Latency成为了全世界第一家虚拟现实游戏体验中心,它占地400平方米左右,由129个PS Eye摄像头组成,同时支持6名玩家同场进行游戏……
没错,这个体验中心相比之前的VR应用,其最大的卖点就是可以在虚拟空间中自由行走。而PS Move设备(包括PS Eye摄像头,以及装备了标记光球的Move手柄)则是这一技术的核心所在。
如之前的游戏效果图所示,不同颜色的光球在PS Eye摄像头中可以呈现出显著不同于背景画面的图像,从而方便我们通过计算机视觉(CV)算法将它提取出来。当然,仅有一个PS Eye摄像头的话,是无法得到玩家的三维空间信息的。此时需要有不止一个摄像头去捕捉玩家的光球在屏幕空间的位置,然后通过空中三角测量的算法,取得玩家在世界坐标系当中的真实位置。
这里自然又带出了两个不小的问题:
一、如何准确而稳定地从摄像头画面里判断和区分不同的光球(标记点);
二、如何知道摄像头本身在世界空间的位置和姿态,从而正确推算玩家的位置和姿态。
为了解决这里所述的第一个问题,已经足够让无数开发者绞尽脑汁、前赴后继了。通过颜色来区分标记点的方案当然是可行的,不过如果摄像头里出现了另一种类似颜色的干扰物呢?或者现场就是一片花花绿绿的环境怎么办?这种时候,误识别恐怕是很难避免的。因此,一批光学动作捕捉供应商站了出来,他们选择采用红外摄像头作为识别的替代方案。
这里当然首推老牌的OptiTrack,他们采用了帧速率大于100Hz的专业摄像头,并且采用了全局快门系统,因而有效避免了高速运动的物体在画面上出现运动模糊的现象。在摄像头的周围采用红外LED进行补光,并且采用高反射率的材质来制作玩家佩戴的标记点。因为红外摄像头本身已经屏蔽了大部分的可见光信息,因此标记点在画面中就会显得分外明显。除非有人用另外的红外光源来进行干扰,否则几乎不可能出现误判断的情形。
根据目前已知的一些信息,包括The Void主题公园,以及诺亦腾的Project Alice,都是采用了OptiTrack的空间定位方案,这也无疑证明了这种方案的可靠性。只是与之相对的,往往是高昂的成本(如下图,一台摄像头的价格都是以数万人民币计算的,而构建一个规则空间起码需要4台这样的摄像头,以及软件系统)。
(Via www.optitrack.com)
不过,既然使用了不发光的标记球替代PS Move的光球方案(这样的另一个好处是,不用考虑怎么给标记球供电的问题),那么如何区分标记球的ID,进而区分游戏中的多个玩家呢?方法也有多种,例如通过对反射率的调整,让标记球在摄像头画面中显示不同的亮度;或者采用不同的组合方式,让一组光球在画面中呈现出唯一的组合形态,如下图所示:
(Via www.chingmu.com)
而之前所说的第二个问题:如何知道摄像头本身在世界空间的位置和姿态。事实上是通过预先标定(calibration)的方式来完成的。体验馆的搭建者预先将每台摄像机安装到固定的位置,然后逐一观察它们的画面显示。通过已知位置姿态的一些标记物来推算每台摄像机的位置姿态,并且保存下来。这一过程无疑是繁琐而枯燥的,尤其当你需要动辄配置上百台摄像机的时候。而设置完成之后,如何避免摄像机被再次移动,或者因为场馆结构问题而发生震动和偏移,这又是每一位开发者所不得不面对的设备维护难题。
不过,因为光学定位的方法具有相当的准确度和稳定性,通过摄像头参数的调校也可以达到很低的延迟,并且在理论上可以扩展到无限的空间,因此它也确实成为了目前很多VR体验馆搭建者的首选。然而,通过标记点来识别多名玩家还是具有很大的局限性,因为标记点不可能无限组合下去,两组标记点靠得过近的话(例如背靠背作战的两位玩家),也很容易发生误测或者无法识别的情形。此外,过于复杂的场馆环境也会让标记点更容易被障碍物遮挡,从而发生漏测问题,因此目前我们所见的多家采用光学定位的体验馆,都是在一个空旷的规则房间内进行游戏的。
激光本身具有非常精确的测距能力,其测距精度可达毫米,一般常见的是日本HOKUYO北阳电机和德国SICK西克等专业领域的大厂所产的二维激光雷达。
二维的意思也就是这样的激光雷达所发出的光是一个扇形平面,而各种用来做测绘用途或者建筑业用作三维重建的三维激光雷达,则是这样的二维激光雷达又加了一个维度做旋转,从而得到三维空间的结果。
激光雷达包括一个单束窄带激光器和一个接收系统。激光器产生并发射一束光脉冲,打在物体上并反射回来,最终被接收器所接收。接收器准确地测量光脉冲从发射到被反射回的传播时间,即TOF(Time of Flight)。因为光脉冲以光速传播,所以接收器总会在下一个脉冲发出之前收到前一个被反射回的脉冲。鉴于光速是已知的,传播时间即可被转换为对距离的测量。因为是以光速为尺子来测量的,所以激光雷达的精度一般都相当的高,在室内场合下用,误差都在毫米级别。
二维激光雷达实际上也是由一维的单束激光器在一个旋转底座上旋转起来所形成的扇面,一个二维激光雷达可以以自已为中心,以几十米为半径画扇面进行测量,所以如果在这个区域内有人活动的话,激光雷达就可以精确的知道一个人的位置并输出给电脑使用。当然,激光雷达通常也可以用做机器人研究的避障传感器。
旋转底座旋转的快慢也是分很多规格的,因此激光雷达也会有扫描频率的区分,正常来说,几十赫兹的扫描频率足够我们在VR当中做位置探测来用了。
但是激光雷达的工作原理对元器件要求高,通常又是工作在非常严苛的条件下,本身就要求防水防尘和数万小时无故障的高可靠性。因此生产成本并不便宜。而且扫描频率越高,探测距离越远(也就是发射功率越大)的激光雷达,价格也就越贵。所以二维激光雷达的价格就已不菲(近万元到数万元不等),而用作测绘的机载三维激光雷达就不是一般人能问津的了(几十万至百万)。
除了价格因素,激光雷达用作定位还存在一个主要的问题是: 因为从激光器发出的是一个扇形光,所以如果有一大堆运动物体互相拥挤着在一起的时候,互相会有遮蔽,后边的物体处在前边物体的“阴影区”当中,导致探测不到。而且激光雷达只能测距,不能识别物体的ID,因此,就算不考虑价格因素,也比较适合单人情况下玩耍,如果想要群体的话,还是得采用其他方案。
这段时间里,HTC Vive的发售成为了整个业界的一大新闻。而它所采用的一种不同于光学的定位方式也是人们津津乐道的地方。HTC Vive包括三大部分,本身布满了红外传感器的头盔和手柄,以及用作定位的Light House。游戏者预先将Light House布置到一个空屋子的两个角落中,这两个Light House相当于两个固定的激光发射基站,如下图所示。
Light House的后盖打开后,里面这样的:
那片密密麻麻的LED就是用来同步的光束。两个圆柱体则是旋转的一字激光器。一个是X轴扫掠,另一个是Y轴扫掠。两个激光器有固定的180度相位差,也就是说,A亮的时候B不亮,B亮的时候A不亮。
而手柄和头盔上都有固定位置安装的光敏传感器:
这套系统的具体工作流程分为三步:
1、同步:LED灯板整体亮一次,手柄和头盔的传感器一起被照射,作为同步信号。
2、X轴扫描:横向的一字激光器照射手柄和头盔上的光敏传感器。
3、Y轴扫描:竖向的一字激光器照射手柄和头盔上的光敏传感器。
头显和控制器上安装了很多光敏传感器。在基站的LED闪光之后就会自动同步所有设备的时间,然后激光开始扫描,此时光敏传感器可以测量出X轴激光和Y轴激光分别到达传感器的时间。
换句话说,激光扫掠过传感器是有先后顺序的,因此头显上的几个传感器感知信号的时间存在一个先后关系,于是各个传感器相对于基站的X轴和Y轴角度也就已知了;而头显和手柄上安装传感器的位置已经提前标定过,位置都是固定的。这样根据各个传感器的位置差,就可以计算出头显和手柄的位置和运动轨迹了。
Light House的最大优势在于,它需要的计算量非常少。这就不像CV视觉系统那样需要先成像,然后通过软件将成像中的特征分辨出来,成像的细节越丰富,需要的图像处理能力就越高。Light House使用的仅仅是光敏器件,无需成像,也就不涉及到大量计算和图像处理,避免了性能损耗和不稳定的可能。
另一方面来说,计算量大往往也就意味着延迟会更高,而且无法经由嵌入式处理器来完成运算。而Light House因为运算量小,因此嵌入式系统可以自己计算和处理,再直接将位置数据传输到PC上,节约了大量耗费在传输和处理上的延时。
不过,虽然Light House是迄今为止体验最好的VR交互定位设备,但是因为激光对人眼安全照射功率的限制等问题,它能够覆盖的距离比较有限,大概也就是5M* 5M 见方的一个区域,并且不能有过多的遮挡物导致接收不到信号。并且这种设备的安装调试还是比较繁琐的,对于一般用户来说可能还是比较困难的。
未完待续。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。