你们日思夜想的手感操控VR和MR版Pokémon GO,我们做出来了。这才是Pokémon GO打破次元壁的正确方式。
Pokémon GO让AR和手游、街头甚至社交相结合,仅仅是这几个关键词就足够吸引人,再加上Pokémon 这一世纪大IP,好像不火反而没道理。但是在手机上用长按→滑动的触屏操作模拟“抛出”精灵球,将宝可梦收入其中……会不会有些略显拘谨和中二?
虽然国服还未开放,但是中国玩家对Pokémon GO的思考和想象并不少,Pokémon GO确实带给我们很多惊喜,但是玩家最期待看到的不是技术最初级的样子,而是将之与最适合的技术表现形式相结合,从情节设计和操作方式来看,VR/MR+手感操控能带给我们更爽的体验。
开脑洞容易,但实现呢?
我们尝试了VR和MR版Pokémon GO,让宝可梦从手机屏幕中解禁,你可以抓住想要选择的精灵球,在眼前调整角度瞄准后冲着宝可梦抛出。如果你遇到的是一只刚烈而又狡猾的宝可梦,为了避免被带节奏,还可以打圈儿扔出最强旋转精灵球、投喂食物,大概没有哪只宝可梦可以从阁下手中逃脱了吧。
关于开发教程
相信各位老司机们对VR的了解已经非常透彻,我们做的这段demo除了想要帮大家解锁抓宝可梦的新姿势,还想把MR+手感操控的技术表现形式普及给大家。以下为开发教程,除此之外SDK也可以在我们Vidoo免费体验,期待开发者在吃下这记良心安利后会有更多大作产生。
手感操控:
首先,通过我们的双目深度传感器得到深度图像。
在深度图像中,我们通过修改每个像素RGB的值用以标定该像素与传感器之间的距离。当我们观察深度图像时,会发现其效果与我们熟悉的红外热成像图像类似,只不过我们把温度替换成了距离。
下图中,左侧为深度图像,右侧为原始图像。通过观察可以看出,距离越近的区域,颜色越红;距离越远的区域,颜色越蓝。
其次,我们将深度图像中符合人体手部特征的部分分割出来,进行手部姿态、动作的识别。
这里需要指出的是手势识别算法是基于深度图像而不是普通图像的。这样可以方便我们获得手部每个点的深度信息,从而还原出整手的骨骼结构。如果我们想要与虚拟物体进行触碰式的交互,骨骼结构是不可缺失的技术前提。
最后,我们通过算法将传感器坐标系(包含手部骨骼空间信息)、虚拟世界坐标系(包含所有虚拟物体的空间信息)、现实坐标系(包含环境信息和手部信息)这三个坐标系对齐。
这样,我们可以将检测到的手部骨骼与真实的双手对齐;将虚拟物体与现实环境对齐。当真实的手部触碰到虚拟的物体时,将会产生类似鼠标点击的事件,来驱动程序的执行,具体到Pokémon GO里面,就是投喂小精灵,扔出精灵球等操作。
至此,已完成了手感操控的基础部分,后续将进一步在Unity3D中完善事件的逻辑,完成Pokémon GO中将精灵球、食物抛向小精灵的功能。
MR显示
接下来,我们要做的就是在空间当中显示Pokémon GO中的游戏元素,并且让皮卡丘和精灵球显示在合理的空间范围之内。
我们采用视频透视技术,通过双目摄像头实时采集你看到的“现实”世界并将之数字化,然后通过计算机算法实时渲染画面。这样做完既可以完全叠加虚拟图像,也可以看到经过计算机渲染后新的“现实画面”,满足了我们对于虚拟物体和现实环境同时存在的需求。
在解决了交互和显示核心技术之后,在Unity3D里面加入相应的SDK,调整下流程逻辑。MR版Pokémon GO便诞生啦。
MR正名
本文所提到的“MR”并非“混合现实”。MR是介于VR与AR之间的技术,名为介导现实技术,由“智能硬件之父”多伦多大学教授SteveMann提出的介导现实,全称Mediated Reality(简称MR)。VR是纯虚拟数字画面,包括AR在内的Mixed Reality是虚拟数字画面+裸眼现实,MR是数字化现实+虚拟数字画面。
MR也并非近几年才出现,上世纪七八十年代,为了增强自身视觉效果,让眼睛在任何情境下都能够“看到”周围环境,Steve Mann设计出可穿戴智能硬件"Digital Eye Glass"作为视觉辅助设备,这被看作是对MR的初步探索。
革新人类视觉感知的能力,不仅涉及到对现实进行数字叠加,还需要用到增删改等其他视觉修饰手段,从上世纪90年代开始,MR(介导现实)的研究逐步在多伦多大学的HI实验室中展开,一批顶尖学科人才从HI实验室脱颖而出。
“手感操控”非“手势识别”
手感操控不等于手势识别,手感操控包括手势识别。
手感操控要满足以下三个基本点:
1、手感操控一定要有深度信息,传感器要知道手离用户有多远。
2、手感操控包括手势识别。手势识别通过图像算法更新得到手部姿态和手部动作指令,将手的深度信息和手势识别信息相叠加,得到:手离我有多远,手在做什么的完整信息,才能称为手感操控。
3、在VR中,手感操控要给用户提供真实的手部图像。通过算法把手部影像拉近到和用户真实的前庭感官同步,能看到深度信息,给用户最真实的操控的感觉。如果用户看到的是机械的手或者模拟的手,交互友好度会大打折扣。