VR硬件演进与其游戏开发中的若干注意事项

VR入门基础

很多其他行业的IT开发人员反映希望进入虚拟现实领域,想了解可以如何快速入手。这里简单说明一下:虚拟显示技术属于3D显示技术的一个分支,传统的3D技术显示在普通的2D屏幕上(类似于“魔兽争霸”这类游戏);而现代的VR技术则是指,利用具备了双目视差以及头部运动追踪(头部动作捕捉)技术的立体显示装置(如Oculus Rift和HTC Vive),来对3D场景进行展示。这类设备允许用户转动、移动头部,从各种角度对3D模型进行观看。

所以对于其他行业的IT开发者来说,虚拟现实可以简略地看成是3D游戏/应用的一种,进入虚拟现实行业首先需要掌握3D技术。虽然OpenGL和DirectX是3D技术的基础,但是直接使用这两种技术进行3D开发难度大效率低,并不适合普通开发者入门。这里推荐简单好用的3D游戏引擎Unity3D(一般简称Uinty或U3D),其采用C#作为脚本语言,简单易学;此外,Unity本身作为一款3D游戏引擎,除了包含对3D模型进行渲染、显示的基本功能外,还具备物理系统、光照系统、骨骼动画系统、音频系统等3D游戏所需的各类系统。

掌握了Unity开发技术之后,只需开启Unity的“支持虚拟现实”这个选项,就可以轻松的在VR设备上显示3D画面了。

当然,这只是VR的入门第一步,由于VR展示和传统3D展示的不同(比如用户可以自由控制相机,用户看不见鼠标键盘,必须依赖Xbox手柄或者体感手柄等设备进行输入等),导致VR开发和传统3D开发存在着很多不同之处。就笔者本身开发过的一款“3D街区漫游”应用来说,此应用中包含了一个正在建设的街区3D模型,目标是让用户在这个3D场景中漫游来了解这个街区建成后是什么样子,形成直观的视觉印象。按照传统做法,只要采用第一人称视角,用户操作键盘的方向键(或者WASD键)控制前进方向,用鼠标控制视角即可(类似《反恐精英》的操作方式)。但是当转为使用VR技术后,因为用户看不见键盘而只能使用Xbox手柄,通过手柄左摇杆控制角色移动。且由于用户的视角和VR头盔直接联动,用户在现实中转头,在虚拟环境中的相机就会同步旋转,所以传统的鼠标失去了作用。当然,控制用户“正前方”的朝向也需要一个输入,而这个输入可以用Xbox手柄的右摇杆进行控制。

完成了这些,用户就可以戴着头盔拿着手柄在虚拟3D街区中漫游了。但是你会发现在通过操作手柄摇杆来移动或转身时会产生一种眩晕感,这是由于人在虚拟环境中的运动和现实中的运动不同步所引起的(后文会详细说明)。于是我们研究了一套改进方案,让用户在虚拟街区中事先设定好的观察点观看,采用的手柄的按键切换观察点,而瞬间移动的方式很好地避免了眩晕感的产生。

由此可见,即使掌握了3D开发技术,也需要在VR环境下的人机交互方式中采取合适的方案才能够获得良好的VR体验。

VR硬件

VR技术的终极目的在于能够给予用户全身心的沉浸式体验感受。人类可以通过视觉、听觉,触觉,味觉,嗅觉等感觉获取环境信息,这其中,通过视觉获取的信息占据了全部信息量的80%以上。因此目前的VR技术主要从视觉入手也就不足为奇了。

而基于双目视差的立体视觉技术更是诞生已超过150年。如图1、图2所示的设备是David Brewster在1849年在前人的立体视觉装置的基础上改进而来,在形式上已经十分接近我们目前所使用的VR头盔了。

图2 以凸透镜取代立体镜中的镜子

但是这类设备,只能看到固定的立体图像,图像不会随时间而变化,更不用说这种变化能够根据用户头部的运动做出响应。而作为完整的虚拟现实解决方案,立体画面输出和头部追踪,是必不可少的两项技术。

在人类进入电气化时代后,尤其是二战结束后,伴随着电子计算机的发明,若干基于双目立体视觉的电子设备被发明出来,但是由于需要结合头部追踪以及即时渲染显示输出等技术,在那个电子设备体积大性能低的年代,只能做成如图3所示的这样。

图4 Oculus Rift DK2

DK2(如图4所示)在2014年北京举办的Unite大会上有过展示,当时参加过这次大会的同学可能还有印象,当时排的队伍之长,至少要等40分钟才能玩上,而看着带着DK2的玩家的反应是非常有趣的(当时演示了一个鬼屋游戏,游戏最后会出现一个女鬼,玩家往往会被吓得惊声尖叫)。

DK2具备了相对较高的分辨率1920×1080(即时如此,仍然会看到较为明显的纱窗效应),以及100度左右的视场角(FOV),采用了高精度的陀螺仪结合红外相机进行头部运动追踪,并对从头部运动数据采集到最后的3D图像的渲染输出的一系列环节进行了优化(甚至据说DK2配的HDMI线都是特制的,里面有定制化芯片用于缩短视频信 传输延迟)。而其所采用的三星Note3手机所配备的OLED屏幕具有优良的高刷新率,能够做到75FPS ,大大减小了液晶显示器显示高速物体时产生的残影现象(该现象是导致VR眩晕的原因之一)。可以说,DK2是当时十分难得的没有致命短板的VR设备,而且最关键的一点是,它399刀的价格也让人比较容易接受。

惊鸿一瞥的HTC Vive

而到了2015年,HTC和Valve公司在巴塞罗那的消费电子展上宣布联合推出Vive虚拟现实设备,但是由于发出的测试样机过于稀少,VR游戏开发者普遍还是用Oculus进行开发。

中国的VR

同时在大洋彼岸的中国,VR也经历了大起大落的一年,一方面,由国内的一些公司推出了“蛋壳VR”,在蛋壳形状的动感座中加入了国产的VR头盔,配合“大摆锤”、“过山车”等VR游戏,席卷全国一二线城市的大商场,但是由于VR游戏对于动感座椅是没有任何控制的,而是由一个外部程序控制座椅的运动,因此游戏和座椅之间难以实现良好的同步,比如当用户在游戏中看到自己开始加速下坠1-2秒之后,座椅才会有相应的动作,这种“不同步”会引发用户产生较为严重的眩晕感,而且不同厂家对驱动VR头盔的电脑配置也不尽相同,为了节约成本而配置较差的显卡也会引发低帧率,高延迟,导致用户眩晕。这些都降低了客户的体验感,而且少有后续内容更新,这些都导致了回头客的减少,而蛋蛋椅的销量在2015年10月之后也下跌严重,这波“中国式VR”的浪潮也暂时退去。

图6 Gear VR

首先,Gear VR可以通过USB接口和三星手机相连(想把别家手机通过这个USB接口连到Gear VR的同学可以基本放弃了,这个接口被设计成为只能接入三星手机特制的USB接口),头盔上的电子设备可以和手机进行直接的有线通信,这些设备包括了光电传感器、触摸面板、高精度陀螺仪等。

当你把(三星)手机放入Gear VR后,不用再做任何操作,只要把头盔戴到头上,头盔内置的光电传感器会将信 传递个整合到操作系统层面的VR服务,手机就会自动启动VR桌面程序,你可以通过触控板浏览当前已有的VR应用,并启动的选中的应用程序。在游戏中也可以使用触控面板进行操作,如果想要退出该应用只要按下头盔上的“退出”按键即可。

在VR桌面时,你会发现Gear VR对于用户的头部追踪非常的准确,头部的运动能够以极低的延迟极高的帧率直接反应到画面上,而这基本就是PC VR的效果。同样是手机VR,Gear VR和国产的手机VR的差距咋就这么大捏p>

首先,在头部运动捕捉环节,刚才已经说过,Gear VR的采用了头盔上搭载的1000HZ高精度惯性传感器所采集的数据,并通过有线获得稳定的数据传递输入;国产手机VR一般采用手机自带的100HZ加速度传感器。这导致了Gear VR能够获得更短延迟,更准确的头部运动加速度采样数据。

而在渲染环节,Gear VR也有独特的优势,三星手机的软硬件都是自己制作的,在ROM的开发中,可以对GPU的操作做出特殊优化,缩短渲染延迟。而完成这项工作的,则是3D技术大神,也是Oculus 的CTO的John D. Carmack,正是他参与到三星ROM的优化过程中,把Gear VR的SDK和三星手机的底层显卡驱动进行深度整合优化,实现了Gear VR那接近PC VR般的梦幻表现。

而国产手机VR,一般都是使用Google的Cardboard组件开发的VR应用,未经过优化的双镜头渲染让手机GPU不堪重负,我在Unite 2015的展示厅里看到的用于进行虚拟旅游的某手机VR应用,其帧率更是只有可怜的个位数,因为我感觉都可以一帧帧自己数出来了(囧)。

Gear VR到底好到什么程度呢有个国内厂商做一体机研发方案,调研了一大圈,最后决定上三星Gear VR的方案,但是Gear VR的核心都在三星手机中了,想完美复制Gear VR就需要自己做一部三星手机出来,但这谈何容易该厂老板做了一个近乎凶残的决定:把三星手机扒皮。也就是买回三星手机,拆去外壳,然后装入自家仿制的Gear VR头盔中。其实在一体机硬件方案非常多的华强北,搞出这么一个方案只能是无奈的下下之策,但是这里也能看出Gear VR其本身的不可替代性。

Gear VR在手机/一体机VR方案里算是鹤立鸡群了,但是它毕竟是手机VR,当游戏场景中的模型、贴图数量达到一定程度时,也会造成渲染效率的急剧下降,这一点在后面的VR开发相关内容中会提及。

此外Gear VR还有很大的短板,其应用商店作为一个境外 站因为众所周知的原因在国内是无法访问的。但是三星目前也在为此努力,希望将来这个局面能够得到改观吧。

HTC Vive

时间到了2015年底,HTC的Vive(如图7所示)终于在千呼万唤中登陆中国,在国家会议中心举办了一个发布会,现场排队体验的人更是排成了长龙。和DK2采用的头盔发光-相机采集+惯性动作捕捉的头部追踪方案不同,Vive采用了两个处于对角位置的基站发射不断扫描的红外激光,利用头盔上密布的光学传感器接收激光信 ,进而计算出头盔的位置和姿态。该系统同样具备了高精度、低延迟的优秀追踪性能。

VR硬件演进与其游戏开发中的若干注意事项

图7 HTC Vive

Vive具有比DK2更高的分辨率(2K屏幕),更大的追踪范围(Room Scale),以及2个体感手柄。高分辨率的屏幕带来了更小的纱窗效应,而最大5米x5米的可追踪范围让用户可以在一定的空间内移动,以便能够实现玩家在虚拟空间和现实空间中的同步运动,这样彻底消灭了虚拟晕动症的基础,让玩家在使用Vive的时候不会眩晕(其实这也取决于游戏内容,这个会在后面提到)。至于体感手柄,其采用了和头盔同样的追踪技术,非常精准,甚至有个国外玩家戴着Vive头盔,在现实中抛起手柄,由于对于手柄位置的极低延迟的精确追踪,虚拟手柄和现实的手柄基本是同步运动的,所以这个玩家仅仅是看着虚拟空间中的手柄,就能够在现实中稳稳的接住这个落下的手柄。

此外由于Vive依赖于激光扫描,因此工作环境中应避免有镜子,因为反射的激光会导致系统定位出现问题。

游戏主机VR

在游戏主机领域,任天堂最早做出了Virtual Boy早已折戟沉沙,基于动作捕捉的wii,经过长久的时间后回头来看,其平台上的体感游戏除了第一方的游戏以外也乏善可陈;至于推出了Kinect的微软,不久前已经传闻微软解散了很多自己旗下的体感游戏工作室。当然这里并不是说Kinect不好,只能说基于电视+体感这样的游戏形式,制作一款真正好玩耐玩的游戏太难了。事实上,基于Kinect的低成本3D扫描技术在游戏以外的很多领域都得到了应用,其中最直接的就是Kinect的技术被整合进了微软的次世代“计算-显示”平台HoloLens。

索尼在体感游戏领域也是早有探索,在PS-PS2时代就有了PlayStation Eye(简称PS Eye);到了PS3时代在PS Eye基础上诞生了体感手柄系统PS Move,到了PS4时代,面对游戏业未来的VR大趋势,Sony也坐不住了,发布了自己的VR企划:Project Morpheus(梦神计划),后来发布的正式名称改为PlayStation VR,简称PS VR。其实从技术细节上,PS VR的头部运动捕捉方案更接近于Oculus,都是头盔发光,相机拍摄,结合惯性动捕,只不过Oculus的DK2和CV1采用了红外光;而PS VR则采用了可见光。但是这一点也是PS VR的一个问题所在,我们日常生活中到处是可见光源,如果在PS VR的镜头拍摄范围内有强光源出现的话,就会干扰捕捉系统,笔者在游艺会体验PS VR时就受到了外部光源干扰导致手柄定位失准的情况。

而PS VR的分辨率则只达到了DK2的程度(1920×1080),这是一个比较聪明的选择,PS4在2013年发售,其图像处理性能都是在当时的硬件环境下定型的,而无论硬件如何,VR开发中的20ms延迟,75FPS的标准是一定要坚持的,但是让一个2013年的主机实现这样的性能(事实上PS VR宣称自己的刷新率能达到120HZ),如果采用2K甚至更高分辨率的屏幕基本是不太现实的。所以为了最终达成PS VR所需的实际性能,据说Sony有新款PS4的的开发计划,在原有的硬件结构上强化了图像处理能力,但是Sony官方目前尚未回应此传言。毕竟一款游戏主机定型后,即使可以针对外形,甚至具体硬件进行改进,但是其最终的硬件性能必须是不变的。这样即使具体硬件型 不同(如PSP 1000/2000/3000)同一款游戏在这个平台上会给所有的玩家同样的表现。Sony这样针对原主机推出性能升级型 的行为很难预测会产生什么样的结果。但VR时代对硬件的高性能要求也是不争的事实,老的原则大概也需要考虑新时代的要求。

关于VR游戏开发

上述当代VR设备从本质上来说其实都是一样的:双目视差3D立体视觉+头部追踪,所以VR游戏的开发,从很多方面来说对于各种VR硬件来说是互通的。

避免眩晕

VR眩晕,作为老生长谈的话题,经常被用于评论某VR设备的好坏,前面也提到了,动捕系统的延迟和3D渲染的效率,显示屏的性能都会影响到总的延迟时间和帧速率,而这些指标则直接影响了VR体验的好坏。

还有一点,是游戏内容本身。如果在游戏中强行改变玩家在游戏场景种中的位置(如过山车,大摆锤、或者靠摇杆控制角色移动的第一人称视角游戏),就会引发一部分玩家的强烈眩晕,其原理在于玩家在视觉中看到了自己在移动,但是身体的各种感觉器官(如耳前庭)却没有感觉到玩家身体的移动信息,这两个矛盾的信息在大脑中引发了眩晕的感觉。而HTC Vive就好很多,它的Demo绝大多数是让玩家在一定的空间内移动,保证玩家的实体头部和虚拟身体的头部的运动完全一致,这样就很好的避免了眩晕感的产生。

对于这两点,系统性能的低下往往引起延迟、卡顿,给人的体验只是很差,缺乏沉浸感,但是一般不太会引发严重的眩晕;而游戏内容的不恰当设置却会确实的导致玩家出现重度眩晕的感觉。因此,为了避免眩晕,作为开发者,你需要注意游戏的玩法设计;作为玩家,除了使用尽可能好的硬件,游戏内容的选择是最为重要的,如果你非要使用Vive玩过山车,那么你也仍然无法避免眩晕的结果。

人机交互

在VR环境下,原本的3D环境+2D UI的设计基本行不通了,一则玩家不会再使用鼠标和键盘,可能主要使用Xbox手柄或者Vive手柄、PS Move类的体感手柄等;二则VR 环境下的屏幕分辨率不是线性分布的,越靠近画面中心,分辨率越低,越靠近画面边缘分辨率越高,如果你把2D UI放在画面边缘,很可能它会看起来小到玩家根本看不清的尺寸,而且在VR头盔里,玩家的眼睛往往只是注视着屏幕中央,很难注视到画面的边缘,这也造成了2D UI的阅读困难。

而2D UI又不能放到画面中间,那样会阻挡玩家在3D场景中的视线。所以一般性的解决方案就是:采用3D UI,将UI信息融合到3D场景之中使之成为3D场景的一部分,而靠体感手柄或者Xbox手柄的摇杆操作的选择框可以与3D UI对象进行交互操作。

手机VR一般缺乏外部输入设备,此时应尽量使用头瞄式输入,避免把按钮设计到屏幕上让用户不得不把手机从盒子中取出后点击该按钮实现输入。

此外,如果能够结合游戏内容,配合现实中的电风扇来实现一些风吹的效果,也会有效增加沉浸感。

注意游戏优化

由于VR游戏对于延迟和帧率的苛刻要求,因此对于游戏的优化就变得非常有必要,尤其是在手机VR只能使用性能偏弱的硬件的情况下,这种必要性就变得更为突出。比较通用的做法是合并贴图,减小Shader种类用于降低Draw Call;通过遮挡剔除和LOD等技术减少需要渲染的三角形数量等;多用低模、在低模上使用法线贴图代替模型表面的实体凸凹来实现低模的精细化效果;通过烘培技术降低实时光的渲染负担等。

注意频闪

在3D空间中的等间距的黑白条纹,或者按照一定频率(几十赫兹左右)闪烁的光,可能会诱发某些用户的光敏性癫痫,因此需要注意避免出现这样的条纹或者闪烁。

尽量使用高精细度的贴图

在VR游戏中,玩家会比传统3D游戏更容易贴近模型表面(甚至玩家可能会很认真的贴近观看模型),这样如果模型采用了分辨率较低的贴图,当用户贴近后,其瑕疵会一览无余,让用户感觉这个游戏很粗糙。因此结合自身平台的硬件性能的特点,在不会显著影响渲染效率的情况下使用分辨率尽可能高的贴图就是很有必要的。

多实际测试

由于VR游戏的体验不同于传统3D游戏,因此很多传统的游戏设计方案在VR中可能并不可用,因此当游戏策划有了初步的思路后,应该让开发人员尽快制作出简易原型实际体验后验证该思路是否可行。

结语

VR大潮方兴未艾,无数的可能性仍然等待我们的游戏开发者去探寻,希望大家多了解VR设备的硬件特性和VR游戏开发中的注意事项,充分发挥自己的想像力,制作出好看又好玩的VR游戏!

注:题图来自视觉中国,为付费授权。

王秋林(燃冰飞雪之魂),中科大自动化系研究生,中国最早一批VR内容开发者。擅长Java、C#、C++、Objective-C及Unity等。曾开发多款Kinect体验游戏及虚拟现实游戏,并为国内30w游戏开发者提供技术支持。

相关资源:3D建模软件(绿色版)_3d建模软件下载-专业指导文档类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年4月18日
下一篇 2016年4月18日

相关推荐