【译】[CEDEC 2015] 面向PSVR的游戏引擎开发要点,SCE日本工作室的秘诀传授

发表于2016-03-29
评论0 1.6k浏览

作者:西川善司,翻译:Traceyang

http://www.4gamer.net/games/251/G025118/20150904050/

  

 

  索尼电脑娱乐(Sony Computer Entertainment Inc,简称SCE)开发的虚拟现实的头戴显示设备(VR HDM)【Project Morpheus】(译注:梦神在原文发布时还没改名,现在已经叫PS VR了,后面也会用PSVR这个简称)。SCE在世界各地的工作室,为宣传PS VR开发了各种的技术演示,在Game Developers Conference和E3,以及东京游戏展上公开,得到了体验者很高的评价。

 

  这些演示中,SCE日本工作室开发的The PlayRoom VR系列的技术Demo,指示了VR乐趣和新的可能性。

 

  关于The PlayRoom VR的内幕解说的会议【The PlayRoom 引擎VR化:导入Project Morpheus的指导】在CEDEC 2015上进行了,本稿就是对这个会议的报道。负责会议的,是SCE日本工作室的高级工程师横川 裕氏。

 


  负责演讲的横川 裕氏,作为PlayStation Vita的动作游戏名作【GRAVITY DAZE】的首席程序员而广为人知。

设计VR渲染引擎需注意的要点是?

  说不定还有不了解The PlayRoom的人,这里大致说明下。这个是在PlayStation 4(PS4)中预安装的应用,通过PS4的摄像设备【PlayStation Camera】的增强现实(AR)。这次会议主题的The PlayRoom VR,是The PlayRoom VR开发团队基于自研的游戏引擎(本文里称作The PlayRoom引擎)开发的对应PS VR设备的引擎。

   

  横川氏一开始对The PlayRoom引擎的PSVR对应过程进行了解说。

 

  最初进行的是,把引擎改造为在1帧画面的渲染时间内,把相机放置在右眼和左眼的位置,进行两次渲染。听起来很简单,但实际上是意外的麻烦工作。

 

  原理上改变视点位置两次渲染很简单,但并不是单纯的绘制两次Pass,而在绘制完一睁眼显示的影像后,在进行另外一只眼的绘制时,如何积极的利用前一只眼使用的资源的方法,必须要缩短绘制时间。

 


面向VR的改造,从对应3D立体绘制开始

  另外,横川氏举例了电视画面的图形绘制和VR HMD的图形绘制上要求配置不同的问题。面向电视的图形,目标帧率是30~60fps。而VR HHM,并不能把60fps作为最低线。而起,玩家的操作反映到图像中显示的延迟,最大也不能超过20ms

 


  TV画面和VR HMD,在图形要求的配置上也有变化

 

  而且,和要一定距离来观看的电视画面的绘制不同,因为VR HMD是在眼睛前10cm左右很近的距离表现物体,近处观看物体时,的细节变现就变得非常重要。这样,通过尽量使用法线贴图(Normal Map)来制作模拟的凹凸,渲染出比实际的多边形数多的3D模型的表现就要更好一些。

 

  除此以外,TV画面的绘制,为了画面变得更丰富,倾向使用更多的后处理特效,而VR HMD中是重视阴影的真实表现和高品质的光照,以及为用户提供优秀的影像体验。

 


  对于VR HMD的物体对象,横川氏认为应该更关心近距离的表现。

 

  作为在电视上不会太在意到的一种图形表现,在3D立体和VR HMD的表现更容易产生“模糊感”,使用时必须要注意到。例如,在平板上贴Texture的Billboard表现以及屏幕坐标系的2.5D技术,因为两眼视差,用Fake的方法很容易暴露。

 

  还有,把左右眼看到的两张图像上,左右绘制的Aliasing(锯齿)和Shadow 的表现变得不同,立体视觉上有了不自然感。

 


3D立体视觉和VR影像表现所需要注意的要素

  横川氏非常注意的回避了这点,在The PlayRoom引擎中进行了PSVR的对应。

 


The PlayRoom VR的引擎规格

  另外,对应HMD的光学系统产生扭曲的变形处理(Distortion)系统,是直接使用的PSVR的软件开发套件(SDK)中包含的功能。

 


  对应VR光学系统产生的扭曲而使用的Distortiot,直接使用PS VR SDK的标准功能。

 

  另外,使用PSVR SDK包含的程序库【VrTracker】, PSVR和DUALSHOCK 4(PS4手柄)以及PlayStation Move(控制棒)的控制前的方向和位置也可以检索出来。把VrTracker获取的PSVR和控制器的3D位置信息,转化为游戏世界的坐标系,就可以进行VR的基本设置了。

 


  用PSVR SDK包含的VrTracker,取得PSVR和DUALSHOCK 4,以及PS Move的位置和朝向(选项),设置指定时间,也可以获取预测的位置和旋转的状态。

 


  使用VrTracker程序库,取得PSVR和各种控制器的位置。

 


  把VrTracker取得的现实世界的PSVR和控制器的3D位置变化为游戏坐标系。

 

  另一方面,横川氏指出,要把玩家操作的反映到假想世界,在【游戏设计】(玩家控制器的设计)上并没有最优方案。因此,要玩家不会晕眩或角色不舒服,是在开发过程中需要充分考虑的。

 


  技术的游戏性和先进程度,也有与VR游戏的舒适不匹配的情况。要让玩家玩的舒服,制作游戏时要各种注意。

 

  在之前列举的机能中加入VR内容,实际运行的状态跟情况不同会有很激烈的画面抖动的情况。这个是因为帧率并不稳定造成的,HMD显示的影像达到HMD要求(高于要求的帧率)的情况,与达不到要求(帧率不够)的情况交替所引起的现象。

 


  只进行了基本实现的VR内容,影像经常会震动,这是因为帧率太低造成的。

 

  为了避免这种现象的产生,横川氏对【Reprojection处理】的效果做了说明。Reprojection处理,在Oculus VR里叫做Asynchronous Timewarp处理,当帧率下降时,并不显示对应HMD方向和位置的影像,而是把前一帧显示的画面加工,生成当前影像帧的处理系统。与电视机的倍速驱动来生成插值帧的逻辑是类似的想法,这个应该也有人了解的。

 


  Reprojection处理生成的帧,是把前一帧显示影像的显示位置,整合到当前相机的位置(VR HMD的方向),映像中描绘的动态物体(角色的运动)是不被插值的。

 

  顺便说一下,PS4和PSVR中,Reprojection处理是异步任务,也就是在图形渲染之外的GPGPU系的处理。笔者猜想,这个应该是与提供了PS4的APU的AMD开发的,对应自社GPU的VR SDK【LiquidVR】比较类似的实现。

 


  PSVR的SDK里,也包含了Reprojection的处理功能。

 

  但是横川氏也警告到【Reprojection的处理仅仅是拯救措施,在根本是无法解决帧率低下和延迟(Latency)的问题】。而且,在VR内容制作方面,在图形引擎和游戏引擎的基本设计阶段就要强调意识【保持帧率】和【低延迟】来进行开发。

 

  而且,对于帧率提升,在图形处理上有通过简略化的方法很容易对应,而低延迟因为是引擎的底层设计部分,要进行修改也很难,感觉延迟问题是应该最优先去解决的。

 


  要降低延迟也有很多难以解决的问题。

要发挥Reprojection处理的效果,对延迟的把握是不可缺少的

  那么,之前还只是理论的,在引擎开发中作为目标的内容。实际的VR内容,无论做了怎样的并行化处理,还是要一定程度的处理时间,这样积累起来的延迟也表面化了。如果游戏处理(输入)和绘制处理(输出)依次执行,就无法回避延迟。

 

  VrTracker,不光是取得PSVR现在的位置和姿势,还有根据现有信息,取得指定时间后的预测姿势的功能。总之延迟是无法回避的,那么在延迟时间经过的时候PSVR的姿势的改变,也就是要预测【显示绘制的时候头部的朝向】,如果要处理绘制的Reprojection,就可能会受更少的延迟影响来显示。

 


  正确的把握游戏循环的延迟,考虑延迟的进行绘制和Reprojection是很重要的

 


降低延迟的方法 

  这里横川氏展示了The PlayRoom VR引擎的处理流程,对实际处理系统的延迟隐蔽结构做了解说,接下来边看下面的幻灯片,边度下文吧。

 


The PlayRoom VR引擎中的延迟

  首先,开始处理时是幻灯片左边【いまここ】,在PSVR上显示影响的总延迟时间是【游戏延迟 Game Latency。幻灯片左上的【更新 Update,进行游戏处理的Task,控制器的输入处理,角色的处理。

 

  开始绘制前,要考虑游戏延迟,把当前的时间(いまここ)加上游戏延迟的部分来预测PSVR的姿势,并通过VrTracker来获得。然后,根据PSVR的预测姿势计算相机的信息--也就是虚拟世界的视点朝向和角度,并生成图形绘制命令(幻灯片里叫GfxCmd)。

 

  通过准备好的图形指令,进行GPU的绘制(幻灯片里的GPU Render),要再一次考虑绘制需要的时间,通过Tracker 取得PSVR预测的姿势。具体方法,把GfxCmd结束时的时间,加上幻灯片下面的【游戏渲染延迟 Game Rendering Latency部分的时间,来取得PSVR的姿势预测。

 

  这样,把两次计算的预测姿势作为相机视口信息来使用,进行GPU上实际的影像绘制。总之,要GPU绘制影像,需要调用两次VrTracker,取得最新的预测姿势。

 

  实际绘制解说后,要经过Reprojection处理来显示,Reprojection处理中也会产生延迟。这里,把Reprojection处理开始的时间加上【Reprojection】部分来预测Morpheus的姿势,第三次用VrTracker取得姿势信息。使用取得的预测姿势,进行实际的Reprojection,实际显示的影像就完成了。

 

  这样,The PlayRoom VR 引擎的实现形态就是,游戏延迟,游戏渲染延迟,以及Reprojection延迟,这3种延迟时间的正确预测,通过使用VrTracker,实现出理想的近乎高品质的VR影像。横川氏也提到需要注意【每个延迟的估算有很大的误差,有时帧的延迟的增减也有很大变化,无论如何预测姿势和进行Reprojection处理,也无法获得稳定的显示】。


如何正确的预测延迟呢?

  制作VR用的游戏引擎,实际问题就是如何去测量延迟。横川氏透露了他们开发VR内容时的延迟值的可视化技术。这是一种比较简单的方法,使用上面的处理系统,在HMD画面上的2D坐标系上绘制点和十字,以这个状态在HMD上,晃动头来做实验。

 

  如果延迟较大,或者预测的延迟不正确的话,摇动头时,点和十字会有很大的晃动。延迟越大,预测延迟的误差也就越大,姿势预测的误差反映到通过Reprojection处理来绘制的点和十字就会移动。预测延迟正确的话,Reprojection的结果更理想,点和十字也不会晃动,看起来大体是静止的。

 


  延迟可视化的顺序,绘制用的视点姿势和HMD的姿势完全一直,Reprojection处理也没有抖动产生。抖动的大小,正是根据绘制用的姿势和HMD的姿势的偏差来变化的。确认延迟的演示,试着确认一下就很容易懂了。

 

延迟产生抖动的可视化演示(レイテンシをブレとして可視化させるデモ)

  另外,横川氏开发的The PlayRoom VR系列中的VR内容里,名为【Magic Controller】的交互演示,实现了实时120fps显示。这个是进行了相当积极的优化,才达成的结果。

 


  实现的120fps显示,Magic Controller的各个Task的Timeline

 


  要实现120fps,从游戏处理到绘制完成只能有要8.34ms的执行时间,对PS4的性能来说是非常严峻的挑战

    

  除了Magic Controller之外,使用The PlayRoom VR引擎制作的VR内容还有Bedroom RobotsMonster Escape】,不过这些都是基于60fps来进行渲染,再倍速化到120fps,这个是通过Reprojection处理来实现的。顺便说一下,这些VR内容里通过VrTracker取得PSVR的预测位置,只在游戏开始时和Reprojection处理前进行了两次。

 


用60fps显示的VR内容的各个Task的Timelin

  横川氏指出,从60fps到120fps的Reprojection处理的VR影像,当看到窗外流动的背景,或者头追随着高速移动的物体时,会看到抖动,所以要尽量避免。因为Reprojection处理的内容,是跟随头部运动插值生成影像的,对影像中的运动不能流畅的显示。

 


  Reprojection处理并不完美,也有不合适的地方。

驱动PSVR隐藏机能的,Monster Escape的秘密

 


Monster Escape的图像

  关于The PlayRoom VR引擎的话题就是上面这些了,但是,横川氏的Sesame还有其他内容,是关于一个相当独特的技术的解说。这个是在名为【Monster Escape】的VR游戏里使用的独特的游戏设备。

 


PSVR(当时叫Morpheus)的Video输出设备(GDC2014

  PSVR,使用的是称作【Processor Unit】(简称PU)的接口盒。PU是有着在向Morpheus输出影像的同时,还可以把PS4的影像输出给电视的功能。

 

  横川氏正式许宣布道,这个PU的电视输出功能,有着把PSVR使用者看到的影像修正扭输出在电视上显示的Social Screen Mirror Mode,和PSVR显示其他的影像输出Social Screen Separate  Mode的两种模式。

 

  这个功能,是在E3 2015 The PlayRoom VR的演示宣布时知道的。

 


  Social Screen Mirror Mode,可以把PSVR相同的画面在电视上显示。


  要特别关注的是,在PSVR上显示其他影像的Separate模式。这个模式,可以在PS4上绘制的不同视点的影像,通过PS4 GPU内置的H.264解码器压缩,经过USB传送到PU,在PU上把影像解码后输出到电视上。

 

  采用这种不对称型游戏色设备的Monster Escape,利用这个Separate模式,把使用PSVR的怪兽的第一人称视点,绘制为在电视上看到游戏中陆战队英雄的第3人称后视点的画面。这个功能,是The PlayRoom VR开发组和PSVR开发组合作实现的,是SCE有着很大期待的机能。


 


Social Screen Separate

  是把和PSVR不同的影像显示在电视上的模式。PSVR的画面,通过HDMI,把电视用的影像通过USB传输。用USB传输原始映像带宽不足,用了H.264的压缩视频流的方法。

 


  使用不对称型的游戏设备的Monster Escape,可以在1个游戏世界里捕捉怪兽和英雄双方的摄像机。横川氏也公开了Monster Escape的图形规格,PSVR上是1920×1080分辨率60fps绘制,电视上是1280×720分辨率,30fps绘制。

 

  这样的组合,和只有PSVR的绘制负荷相比,对电视的绘制的了22%的像素绘制负荷。顶点管线的处理负荷方面,包括阴影生成的绘制,给GPU的处理负荷增加了50%左右的程度。


 


  Monster Escape中,PS4的GPU在PSVR上绘制的影像是1920×1080分辨率60fps,电视上是1280×720分辨率,30fps。Monster Escape的绘制Timeline也有说明,绘制命令方面,PSVR使用的和电视使用的绘制命令是并行一气生成的,首先是PSVR上影像的绘制。然后把它输出到PSVR后,开始电视显示影像的绘制。在电视画面的绘制中,PSVR开始影像输出,进行从60fps120fps显示的转换,第一次直接输出,第二次使用Reprojection处理后再输出。


  另外电视上的影像,在绘制结束后依次向电视输出,但这里因为是30fps显示,和PSVR相比,绘制命令的生成次数只有一半。


 


  Monster Escape的各Task的Timeline,电视上的影像绘制是30fps,和PSVR的相比,每2次进行1次绘制就可以了。增加50%的负荷所追求的,是因游戏决定的。横川氏说到【增加50%GPU负荷,实现5人同时游戏,不是十分值得挑战的主题么。】


 


  Separate模式,提出了VR游戏的新形态。是根据游戏的不同,都有使用效果的模式。Session结束后,对PSVRSeparate模式比较关心,向横川氏提了几个问题。


  首先是,Separate使用了PS4 GPU内置的H.264编码器,使用这个的时候,同样需要使用H.264编码器的分享功能还能不能同时使用的问题。横川氏的回答是【不能利用游戏的录像功能,但Streaming传送功能可以使用】。


  还有问题就是,Monster Escape在电视上绘制是1280×72030fps,是否可以替换为960×54060fps这种相同程度的负荷,降低分辨率,提升帧率的方法。这个也是【基本上是可能的】(横川氏),但是H.264编码器的影像,分辨率降低的越低,MEPG Noise也变得越明显,所以最佳的平衡是1280×72030fps


  另外也打听了下使用H.264编码器,是否对Streaming影响的输出的延迟有影响,【Monster Escape是在30fps的游戏性范围内,没有影像】。Session的报道就是以上这些内容。面向VR的游戏引擎开发方针,以及Reprojection处理的细节使用的信息,都是以前从没发布过的宝贵只知识。


  还有,使用非对称型游戏设备的PSVRSeparate模式,也是可以看到独特的新游戏可能性的功能。但是,GPU负荷从单人VR游戏相比变成了1.5倍,有了更高难度的要求。实现120fps显示的Magic Controller方法,感觉优化上也很辛苦,一般的VR游戏很难做到。

 

  总之,并不是纸上谈兵,VR游戏开发的人物话题还有很多的session,今后也会有更多对VR游戏开发有用的信息。

 

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