VR项目从技术原理到测试简介
作者:施国林
虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。
这里我不会对概念做过多的介绍,而是简单介绍一些目前VR的一些实现,以及一些主流厂商的支持,更多的是对VR的展现形式做介绍。不管厂商做了什么设备,目的都是“使用户沉浸到该环境中”。
广义的VR还包括一些其他交互方式,如语音识别、手势识别,如微软xbox kinect,不过其精准程度目前还远不如VR手柄。Kinect适用一些如攀岩、保龄球等对延迟和精准度要求不高的休闲类游戏,并不适合如CF等精度要求较高的操作体验,并且xbox目前没有头盔,无法提供360度的全方位视觉沉浸体验。这里主要介绍一下摄像头、头盔、手柄这三种常见设备。
目前提供VR设备的主流厂商有oculusVR、HTC vive、索尼的PS VR,这些都是比较高品质的PC端硬件产品,价格在几千元RMB左右;还有一些主流设备如三星Gear VR、谷歌的、Daydream,则是简易的移动端VR设备,一般在几百元RMB左右。移动VR设备成本价格相对低一个数量级,通常高端一点的VR设备也只是多提供了一些手机操作接口而已,在手机放入头盔中不方便操作时用于通过头盔按键操作手机。谷歌的Cardboard长成下面这样,其他的移动VR设备也只是做的漂亮一点,加了一些控制功能,虽然不是全沉浸,但成本低了很多。
参考文献:http://mt.sohu.com/20160330/n442803575.shtml
参考下列四张图:
(1)首先人的眼睛根据光线平行的角度判断物体远近,比如无限远的物体反射光线接近平行
(2)近处的物体光线成一定角度,需要晶状体调节曲率警醒对焦,如果物体太近,晶状体调节幅度限制,则不能对焦
(3)头盔中的眼镜,或者说光源距离眼睛非常近,为了解决对焦问题,就需要在光源和眼睛中间加一层透镜,改变光线汇聚角度,来确保视网膜对焦
(4)为了将透镜做的轻薄,减轻头盔重量,可以将透镜做成下面螺纹形状
(5)该透镜成像会有一定损失,因为螺纹边缘的光线传播路径与想要达到的效果不一致,会有部分光线没有沿着我们想要的轨道传播
这块难度不大,相信大家都了解,不过还是简单讲一下。
如果你对自己的视觉好奇过,你应该尝试过单睁左眼、然后再单睁右眼,头部保持不动,不停的对比两只眼睛看到物体的角度和视野范围。
3D电影就是这个原理。通过技术手段,让两只眼睛看到的图像,在角度和视野范围符合人眼自然观看的结果,那么图像就有了立体感。早起的3D是通过红蓝光镜片,将左右眼看到的图像分离,屏幕上显示的是两个颜色叠加的图像,如上图所示。这种技术会使影响有色差。现在普遍的电影院才用的是偏振技术,使用偏振原理将左右眼影响进行过滤,偏振技术的3D效果是目前常见3D技术中效果最好的,唯一的缺点是偏振镜片会滤掉一半的光线,使影片看起来偏暗。
目前裸眼3D技术也有比较成熟的运用(不是全息投影),主流技术有柱状透镜技术、MLD技术、指向光源技术。
其实原理本身就是就是将左眼和右眼看到的图像分开,当然真3D拍摄的时候也要求两台摄像机同时拍摄才行,然后在播放的时候将两种图像混合(可以通过偏振或者红蓝片过滤使其分开)或者交替播放,如每秒24帧的影片,做成3D就要左眼影像24帧,右眼影像24帧交替播放。
不过对于VR头盔或者说眼睛来讲,实现起来要方便一些,因为VR头盔本身就有两个“显示器”可以将左眼图像和右眼图像直接分开显示在不同的“显示器”上。仔细看,可以看出下图中两只眼睛看到的影像的区别。
由于以上3D成像原理需要渲染两张不同角度方位的图像,这在渲染流程上也增加了一些处理环节。如下图所示:
在以上渲染流程图中,与传统渲染流程有差异的主要是在“剪裁投影”环节,这个环节做了以下几件事情:
(1)剪裁掉屏幕上不显示的元素;
(2)将三维世界的景象投影到二维平面,为渲染到屏幕做准备;
(3)这时要在摄像机的位置前方确定一个矩形区域,叫做“视口”,用于观察三维世界。
由于传统渲染流程中屏幕只有一个,或者说显示窗口只有一个,所以只需要确定一个视口,但是VR头盔中需要显示两张不同角度的图,那么在VR渲染流程中就需要两个摄像机和两个视口。也就是同一个三维世界中的场景,要在两个平面上以稍有差别的角度进行投影,就如同两部相机同时在两个位置进行拍照。
那么以上的三个流程中步骤(3)将要做出一些改变,就是本来需要确定“一个”视口,那么渲染到VR设备时,需要确定“两个”视口,以及摄像机。在一开始的开发过程中,需要人为的设置两个摄像机和视口,随着开发引擎版本的更新,这个过程将不再需要开发者来考虑。但是对于设备的数据而言,针对每一个相机无论是顶点shader程序的处理、变换矩阵、3D剪裁都需要做两次,栅格化之后的片元shader、光照\雾化处理、模板处理、缓冲区处理也都是双倍的数据量。
栅格化之后两个视口的片元将合成一张矩形的片元矩阵(混合处理之前的像素称作片元),渲染到VR设备的栅格化图像将变成类似以下图像的样子
实际渲染像素要高于屏幕形状裁剪之后显示的有效像素值,因为设备内只能渲染方形的数据矩阵。而传统的像素矩阵,看上去是这个样子
那么在后续渲染流程中,直到显示到屏幕中,始终是双眼的图像作为一张图像尽心处理的,但是数据量却是双倍的。另外再加上对为防止眩晕,减少两帧渲染时间间隔,VR游戏帧率的最低值为90帧,而不是PC游戏的最低值60帧。分辨率最低为1080p,而不像PC可以随意一点。因为头盔镜片的畸变、螺纹、中心像素的放大、屏幕与眼睛的距离等综合因素,VR设备实际的视觉体验与PC的1080p还是有区别的。
定位技术其实没有看上去那么简单,并不是简单的红外传感器位置捕捉,而是多重传感器同时发回作用,使动作的扑捉和处理精度达到“亚毫米级”。此处参考文章出处:
http://www.elecfans.com/vr/441329.html
位置传感器
为了显示精确的画面,当你环顾周围时,头盔必须以亚毫米级的精度跟踪你的头部运动。这是通过各种内置传感器来实现的。有了这些传感器提供的各种数据,头盔就可以实现真正的“六自由度”,跟踪头盔可以跟随头部做出的任何运动。(注:物体在空间具有六个自由度,即沿x、y、z三个直角坐标轴方向的移动自由度和绕这三个坐标轴的转动自由度。)
磁力计可以测量地球的磁场,因此总是知道“磁北”在哪个方向。这样就可以确保它指向的是正确的方向,防止出现“偏移”错误——即头盔以为自己朝着某一个方向时,其实朝着的却是另一个方向。
加速度计有几个用途,一个是检测重力,让头盔知道上方是哪个方向。智能手机自动转换横竖屏,靠的就是加速度计。而且正如它的名字所说,它可以测量沿着一个轴的加速度,因此它能提供有用的数据,让头盔知道一个对象运动的速度。
陀螺仪可以跟踪沿着一条轴的微小偏移(例如你稍微倾斜头部或点头的时候),来提供更精确的物体旋转信息。
三星Gear VR没有采用更先进的红外跟踪方法,而是使用了惯性测量单元(IMU),它是集磁力计、加速度计和陀螺仪为一体的“多合一”设备。与大多数智能手机不同的是,这个IMU是专门用来减少滞后现象和改善头部跟踪性能的。
红外跟踪
Oculus Rift和HTC Vive都使用红外激光来跟踪头盔的移动,但各有各的方法。
Oculus使用的是放在办公桌上的“星座”(ConstellaTIon)红外摄像头,跟踪Oculus Rift头盔前后都有的红外发射器。如果使用Oculus Touch控制器,你还需要另外再配一个摄像头,以避免在跟踪头盔和控制器上的红外灯时出现混淆。每个传感器都是单独跟踪的,计算机收集所有信息来渲染画面,让你在任何时候从任何角度看的图像都是正确的。所有这一切几乎都需要立即完成,这意味着每个红外传感器的坐标被立即捕获和处理,图像也就马上显示出来,几乎没有滞后。
HTC Vive使用的是“灯塔”(Lighthouse)红外发射器,它被放置在游戏空间的角落里,可以快速发射激光,扫过房间。Vive上的红外传感器捕捉到它,并对其在一个空间内的位置进行测量。这个系统的工作原理类似于Oculus,但本质上它是把“灯塔”作为了发射器,把头盔作为了摄像头,角色刚好反了过来。
伴侣系统
Vive头盔除了有“灯塔”红外跟踪系统之外,还有一个前置摄像头,它可以使用“伴侣”系统,来帮助检测你是否离开了游戏空间的边界。因此,如果你快要撞上墙壁或家具了,Vive就可以巧妙地给你发送视觉提示,让你知道自己已经到达了VR空间的边缘。
控制器
Rift和Vive都有无线运动控制器,让你与3D空间中的物体进行充分交互,从而增强沉浸感。
像头盔一样,每个控制器都配备了磁力计、加速度计和陀螺仪以及红外传感器,对运动进行亚毫米级的精度跟踪。
定位\控制系统最大的敌人是延迟,可能出现的延迟如下:
1、 传感器反应延迟;
2、 控制信号传输延迟;
3、 设备驱动信号处理延迟;
4、 游戏渲染延迟(该部分硬件依赖于显卡);
5、 图像显示延迟。
音频
很多头盔内置了耳机,可以产生3D音频。这样游戏就可以添加相对于你的位置的音频提示,让你可以听到好像是来自后面、上面,甚至下面的声音。
隐藏的麦克风可以给游戏开发者提供更多的选择,在游戏中添加更多的沉浸式功能。使用麦克风,游戏可以检测你在隐形游戏中产生的噪音量,或者把它作为在VR中进行语音交流的方法。
线材
Vive和Rift都需要用线材将头盔连接到计算机上,以便传输数据和电能,让显示屏以90帧/秒的速度显示高清图像。如果你是坐着使用头盔和游戏手柄,那没有什么问题,但当你在室内走动时,线材确实可能会变得碍手碍脚。不过Vive有消息称下一代头盔将采用无线技术。
对于PC端VR设备来讲,我们开发的游戏产品所使用的输入输出设备发生了变化。那么对于测试而言,功能测试、专项测试的方法和测试目标也发生了一些变化。
首先VR设备本身采购价比较贵,以Oculus Rift和HTC Vive为例,采购价在分别为599$和799$,按照些文章当前人民币对美元汇率6.87计算,人民币价格分别为4115人民币和5473人民币。再加上运行VR设备的机器要求配置也比较高,通常能流畅体验VR游戏的显卡要求为英伟达1080系列,市价5k人民币左右,能带的动该显卡的CPU、内存、主板以及机箱制冷系统通常加在一起大约在12k以上(含显卡),不考虑显示器和其他设备的情况下。那么一套全效测试设备的市场采购价为17k左右。目前项目组也只有两套可以全效体验的环境,而且还是开发和策划共用。
所以测试设备数量是最大的限制,按照传统的RPG游戏的内容充实度和迭代速度,就算增加测试人力,也无法完成测试。那么有一种方法,就是设置PC模式进行测试?但是基于以下几个原因,VR游戏在PC上进行测试并不可行:
(1) PC与VR的部分操作方式实现不同:比如VR的拾取动作、VR的甩手换弹夹动作,PC与VR的实现并不相同;
(2) PC默认的移动模式与PC默认的移动模式不同:VR可以通过头盔和手柄的定位识别进行移动(移动受玩家真实的游戏空间限制),而PC只能通过键盘操作移动(无法设定由于玩家真实游戏空间带来的限制)。
基于以下三个原因,测试暂时不会面临设备、内容与测试人力不匹配的问题:
(1) 系统少
VR游戏无论是玩法还是市场目前都处于探索阶段,游戏内容通常以展现VR玩法为主,例如滑翔伞等极限运动、FPS等,只有关卡、成绩,没有成长系统、装备系统、技能系统、角色系统、背包系统等,甚至有些游戏没有排行榜系统。所以,以VR游戏单一的体验式玩法,测试并不耗费太多人力。
但如果VR市场成熟起来,多系统的加入是不可避免的。不过随着时间的推移VR成本的降低或者向移动端的转移,可能会平衡给测试带来的问题,即可以采购大量的设备,不会使设备数量成为测试和开发的瓶颈。
(2) 单机性
主机VR呈现很高的平台型,各个VR厂商几乎都有自己的或者合作的游戏平台。例如Oculus有自己的游戏商城,HTC Vive则是与Steam合作,PS VR就更不用说了。单机游戏的复杂性,从业务逻辑的实现并不复杂啊,所以不会出现一些前后台同步,多玩家交互同步以及状态转换带来的一些奇葩问题。且端游为了适应大众玩家的配置,通常不会把客户端做的很重。
端游的难点通常在于美术、动画、渲染、特效、物理,而这些虽然是技术开发的难点,但对于测试而言反而更加直观,所以VR游戏的单机特性,即降低了业务逻辑实现的复杂性,也给功能测试减轻了一些压力。但是同上一种情况相同,随着VR市场和技术的成熟,业务重心向后端的偏移也是也是必不可少的。
(3) UI差异
由于VR的视觉特性(所有UI都投射到3D空间中)、操作特性(无键盘鼠标)、移动特性(UI跟随视线移动)等原因,VR产品的UI设计与传统完全不同。VR的UI分为两种,一种是视角固定的UI,就是始终在眼前,跟随视角移动的;一种是场景内的3D UI,与场景相对位置固定不变,和场景融合。
a) 视觉特性。对于固定视角的UI,由于所有UI都投射到3D空间中,所以不能像PC一样,玩家可以随意调节眼睛到屏幕UI之间的距离。所以一旦UI的视野范围和距离出现问题,玩家无法使用,开发调试也比较耗时。而且功能性UI操作方位只能放在屏幕中心(如暂停之后的恢复按钮),才便于操作,不能在边角放置按钮,限制性很大,游戏内很少使用,更多的是位置固定在场景中的UI。
b) 操作特性。VR游戏中的操作使用的是射线模式,通过手柄在视野中投射的射线,选中UI操作,由于UI是投射到3D空间中,所以如果UI与玩家头盔所在位置中间如果有阻挡,可能会导致UI不可见。比如攀爬过程中玩家前方视野是山体,并且距离玩家的眼睛很近,如果此时不做处理一些系统的UI(如暂停之后的恢复按钮)很有可能会出现在山体内部,导致视觉上的不可见而无法操作。所以通常出现结算之类的重要UI一般需要对3D场景做特殊处理,或者切换到一个空旷的3D空间。
c) 移动特性。这里所说的移动特性是指头部移动时,可能会有部分功能UI随着头盔的旋转在视野中一起移动。那么这种随视野移动功能UI不能太多,也不能太紧凑。第一,该类型UI不符合移动规律,就是头在移动的时候视野本来应该转换,但UI还是在固定的视角没有移动,容易造成晕眩;第二,该固定视角类型的UI只能小面积的放在中间,不能放在角落或者大面积铺开,因为UI随视野移动,角落的UI非常不好选择。
(4) 角色移动方式
同PC和移动端游戏不同,VR重视的是沉浸感,所以移动这种最基础的功能却变成了比较难处理的部分。如果移动处理不当会造成沉浸感的破坏,或者移动时视觉眩晕,所以目前《猎影计划》目前采用的是定点传送,而不是自由移动。定点传送不会有很多的地图和碰撞问题,但是会出现传送点相关问题,如传送点被阻挡、失效、出现时机、特效问题等。当然很多VR游戏也在尝试自由移动和依赖传感器的移动方式,体验都在逐步提高。
基于以上几个VR游戏当前的状态的特性,VR一些特性的不成熟、还处于摸索阶段,其内容还处于核心玩法体验过程,很多系统没有同事建立起来。另外还有一个因素,就是目前VR的市场同PC和移动端比较起来设备门槛要求高,玩家比较小众,厂商大规模开发系统会导致成本的升高,投入回报率不高,所以大部分开发商还是以核心玩法体验为主。所以目前测试设备和测试人力相对于PC和移动端还不需要太多投入。
但是,随着重度VR设备和市场的成熟和低成本化,加上移动VR的起步和低成本,以上各种轻度化的部分:如系统、UI、服务器、移动等,都会逐步完善和重度化起来,与此同时设备成本、市场也都会有所变化。
PC端的性能测试已经很成熟了,工具也比较丰富,但是VR和PC端游戏还是有一定区别。
首先,基于上述对渲染流程的讲解,可知VR游戏对性能要求非常高,又是运行新生的平台和高端设备,所以基本采用64位应用程序开发,而大众型网游、端游,尤其是考虑腾讯游戏的用户量级别,为保证兼容性,通常采用32位应用程序开发,这就导致我们之前在端游时代经典的性能采集工具Bench3D注入进程时失败,无法使用。同时64位应用程序并未在公司普及,工具维护团队也不会把升级64位的优先级排在前面,所以只能采取其他方案。
其次,猎影游戏才用Unreal引擎进行开发,目前现有的相对比较成熟的基于Unity引擎的性能测试方案也无法采用。
性能测试数据采集可以根据数据类型分为两类:一类是渲染数据,如:渲染三角形数、drawcall数、模型数量、贴图数量等;一类是硬件参数,如CPU使用率、内存占用、I\O操作次数和数据量等。
(1)主机硬件参数:包括CPU、内存、IO等各种数据采集可以使用windows操作系统原生工具进行采集。
(2)渲染数据采集:目前没有现有的持续采集工具和方案。Unreal自身提供stat命令行,可以在游戏视图中打印渲染信息到屏幕。但是没有办法将数据持续保存到文档,仅支持单帧数据采集,无法对对特有场景渲染数据进行长时间采集和分析。Stat命令打印结果类似如下:
Stat命令提供很多参数,可以打印很多不同种类的信息,stat命令具体用法和参考如下:
https://docs.unrealengine.com/latest/CHN/Engine/Performance/StatCommands/
也可以通过GPA进行单帧分析。但是单帧分析无法取代持续数据采集,单帧分析适合开发和美术同学在开发和场景优化时进行详细的分析;而持续采集可以找出整个游戏全部场景和管卡的性能瓶颈。比较适合的流程是测试通过性能指标持续采集工具找到场景和管卡的性能瓶颈,提交给美术和开发,美术和开发通过单帧分析定位并解决性能问题。
(3)GPU数据采集工具:目前可用的工具有微软的GPUView和英伟达的Nsight。
(1)适配实验室
由于VR产品的外接设备限制,外加对主机配置要求特别高,所以目前的PC兼容实验室无法提供高端机型适配。目前PC兼容实验室最高配的显卡型号为英伟达N960,而猎影产品推荐的最低配置为英伟达N970,推荐的标准配置为英伟达N1080。
虽然公司的兼容实验室显卡配置无法满足测试要求,但是可以提供PC操作版进行操作系统版本、DX版本、Framework版本以及A卡兼容性做测试。
(2)显卡厂商合作
所以高端显卡适配和部分显卡和渲染数据的采集可以交由英伟达公司合作部门,他们可以提供适配和性能报告,对于市场定位为高端玩家的产品,英伟达公司还可以对显卡新特性的兼容性进行适配,如:4k分辨率、超宽分辨率、surround(多台显示器)、DSR(动态超级分辨率)、SLI(多显卡协同)等特性。
参考文档:
https://developer3.oculus.com/documentation/publish/latest/concepts/publish-content-guidelines/
(1) 禁止内容:
a)色情
b)过多的暴力内容
c)仇恨、欺凌、骚扰
d)货币赌博
(2) 舒适度
舒适度评级比较主观,因人而异。但根据以下几种情况可以将舒适度等级分为三级:舒适、适中、激烈。舒适体验的游戏:通常玩法上会尽量避免视野变化、角色移动、频繁转向等操作,尽量才用固定视角;中度体验的游戏:通常会包含适当的摄像机移动和角色移动;激烈体验的游戏:通常为第一人称视角,除了摄像机和角色的移动,还包含转向、加速等操作体验。游戏提交时需要根据以上情况对舒适度进行评级。官方通常建议开发者提供舒适的游戏体验。
(3)视频应用
通常不接受纯2D场景或播放画面。也不接受单个的3D视频。即不接受单独的3D视频或者CG动画以应用形式上传,需要有玩法交互和操作。
(4)数据采集
如果使用用户权限(如移动设备权限)或者采集玩家数据,需要告知用户
(5) 平台限制
不允许发布平台类应用,如应用商城之类的应用。如果游戏或者英雄有内购,需要使用Platform SDK(即平台支付接口)进行支付。
(6)其他
其他的认证以及平台商标使用
(1) 硬件参数
NVIDIA GTX 970或AMD R9 290相当。
Intel i5-6400等效
8GB RAM。
(2) 系统以及驱动
Windows 7 SP1 64位及更高版本加上DirectX平台更新。
最新版本的NVIDIA和AMD驱动程序。
(3) Oculus PC SDK和游戏引擎版本
Oculus PC SDK 1.8或更高版本。
Unity游戏引擎4必须是版本4.7.0f1。
Unity游戏引擎5.3必须是5.3.7p2或更高版本。
Unity游戏引擎5.4必须是版本5.4.3p3或更高版本。
Unity游戏引擎5.5必须是版本5.5.0p1或更高版本。
虚幻游戏引擎必须是Epic GitHub存储库版本4.14或更高版本,或从OculusVR GitHub存储库版本4.12或更高版本。
Audiokinetic Wwise必须是版本2017.1或更高版本,或任何2015版本与重定向补丁。
(需要时时关注官网更新)
(4) 其他性能需求
通过大部分应用维护90 FPS。
没有系统的颤抖。
没有明显的渲染问题
不会崩溃,冻结或进入延迟无响应状态
没有数据丢失。
(5) 其他与平台或者商城相关的体验
通过发布页面手动上传或者使用命令行工具上传,使用命令行工具需要配置一些参数。通常由项目组完成。测试需要有测试帐号,测试平台发布到灰度渠道上架的应用程序,和非测试帐号启动本地已安装游戏是否可以正常启动和进入。