英伟达杨雪青:VR游戏渲染的负担是普通游戏的7
在12 月 15 日举办的UNREAL VR DEV DAY中,Nvidia资深的开发工程师杨雪青围绕英伟达VRWorks的相关技术进行了介绍。
“目前我们头戴设备显示器分别率是2K,刷新是90HZ,由于VR渲染的时候需要变形处理,所以我们真正渲染的时候至少需要渲染一张3K分辨率的图象,游戏渲染帧要达到90,给游戏带来的负担是普通游戏的7-8倍,这个要求就非常高。”杨雪青解释了VR游戏渲染的重要性,“高分辨率、高帧率、低延迟就会带来很大挑战,有些开发者不得不降低游戏品质来满足性能的条件”
在演讲中,杨雪青着重介绍了三种可以在单显卡上运用的技术,多分辨率着色、透镜匹配着色和单遍立体。“为了给大家展示如何在VR游戏当中使用我们的东西进行物理模拟,我们做了自己的第一个游戏《VR Funhouse》,现在已经公开了,是完全免费的。里面包含了各种物理效果,比如说毛发、粒子等物理效果,有兴趣的开发者可以拿过来体验。”
以下是演讲内容:
杨雪青:大家好,非常高兴参加今天的会议,跟大家分享一些VR方面的制作技术。大家知道目前VR是游戏开发的重要领域之一,我们英伟达对VR这块也是非常重视,投入了很多人力物力,此前已经有专门针对VR做的硬件特性。我们希望广大开发者能够使用GPU的硬件特性和性能来打造高品质的VR游戏,所以我们提出了VRWorks这样一个SDK帮助开发者达到这样的目的,我今天演讲的题目就是英伟达VRWorks及其在游戏当中的应用。
随着VRWorks不断发展,VRWORKS对VR的支持是非常全面的,基本上已经涵盖了目前VR制作的各个方面。比如可以模拟环境的真实感,同时可以提供玩家与虚拟环境交互产生的非常真实的信息。游戏开发者可以通过这个信息反馈设备,给玩家提供真实的反馈结果,提高VR的沉浸感。还有在虚拟环境中模拟声音的传播,从听觉方面也给我们玩家带来了更加逼真的VR体验。而在视频制作方面,、用我们显卡可以帮助大家加速视频的制作。
目前VR游戏开发中,VR的渲染仍然是游戏开发的重要挑战,所以今天我还是主要讲一下这块的技术。
两种模式提高渲染帧率、保证渲染质量和降低延迟
在讲这个技术之前,首先我们了解一下VR渲染的特点。其实VR的渲染从原理上来讲,和普通的渲染并没有什么太大的区别。在对性能要求上,VR渲染对性能要求非常高。大家知道一个普通的传统游戏分辨率达到1080P,刷新率达到30帧,就可以给玩家很好的游戏体验,但是这个配置在VR里面绝对不够。目前我们头戴设备显示器分别率是2K,刷新是90HZ,由于VR渲染的时候需要变形处理,所以我们真正渲染的时候至少需要渲染一张3K分辨率的图象,游戏渲染帧要达到90,给游戏带来的负担是普通游戏的7-8倍,这个要求就非常高。
另外一般游戏不会考虑的一个问题就是延迟,大家知道一个VR的用户当他的头部戴着头盔转动一下之后,如果他看到相应反馈图象的延迟大于20毫秒就会产生眩晕和身体上的不适,因此VR游戏还要保证渲染延迟小于20毫秒。
高分辨率、高帧率、低延迟就会带来很大挑战,有些开发者不得不降低游戏品质来满足性能的条件,这不是我们所愿意看到的。因此我们推出VRWorks帮助大家提高渲染帧率,保证渲染的质量。
首先我们通过多个GPU提速VR的渲染,我们把左右眼渲染任务分别到不同GPU上完成,这样可以有效缩短渲染时间。一方面可以调整帧率,另一方面由于渲染时间缩短了、延迟也缩短了,所以可以很好地减少渲染延迟。
目前有两种工作模式,一种叫做AffinityMasking。这种模式就可以指定到特定的VR上进行渲染,大家知道传统的引擎都是做双渲染的,把场景针对左眼和右眼各一次。使用我们的工具,可以同时渲染,提高渲染的效率。另外由于我们的设置是非常简单的,所以可以非常容易被集成到现有工具中。
另外一种方式叫做广播模式,Broadcasting。这种方式可以通过显卡仅需渲染一次场景,但是由于它需要保证渲染正确性,所以它需要在渲染之前就把所对应的参数预先设置好,这样就需要我们对引擎做一些改动,在把双眼参数设置好再进行渲染。
三种可在单显卡上运用的技术
给大家介绍三个可以在单显卡上运用的技术。首先,多分辨率着色。讲这个技术之前,我们首先了解一下VR设备渲染的特点。我们看VR设备屏幕的时候并不是眼睛直接看的,而是通过透镜去看,图象会有一个变形,会把四周图形进行拉伸,这种变形我们称之为枕形畸变。为了让用户看到一张比例正常的图象,我们目前的做法是这样,VR游戏首先渲染一张比例正常的图象,然后头戴设备里会把这张图象进行反向变形,把四周进行压缩,这种变形称之为桶形畸变。这两种变形相互抵消,玩家就可以看到正常的图象。
这两张图象中心区域没有什么变化,但是周边压缩的很厉害,也就是说在普通渲染里在周边渲染了过多象素,如果可以把这些冗余象素渲染去掉就可以有效提高帧率。这就是多分辨率着色的方法。
把图象分成九个区域,保证中间区域的分辨率不变,降低四周的分辨率。通过多投影的特性,我们可以非常高效地以一遍的场景完成九宫格渲染。有些VR游戏开发者也会降低整体画面分辨率来降低渲染,这种方式是不可取的。
随着我们Pascol GPU的推出,也就是1080代表的一系列,对我们前面提到的多投影特性又增加了一些小的辅助特性,这样就带来两个新的技术。一个叫做透镜匹配着色,还有一个叫单遍立体。
首先我们来看一下透镜匹配着色,这个技术基本的思路和想法和前面我提到的多分辨率着色是一致的,也是要减少冗余象素的渲染从而提高渲染。不同的是我们并不是画九宫格,这次是八边形。它的面积和形状和最终要显示的图象更加接近,而且也是中间分辨率高,渐渐往四周低下去,所以象素分布也与最终要显示的图片更加匹配,因此我们称之为透镜匹配着色。
再来看下单遍立体。在前面我讲的时候提到的,在VR情景下,我们有一个广播模式,熟悉UE4的开发者应该知道,UE4有一个类似的技术,这种方式和它有什么区别?我在这里跟大家讲一下,它的区别主要在后面GPU上面。Input的方法是生成了新的几何体,在几何处理管线之前生成的,也就是说它还是要完整地渲染两个几何体,所以GPU开销并没有降低。但是Cull是在之后生成的,因此Cull还可以提升绿色部分的性能,减少绿色部分处理的开销,所以与Input相比,这种方法还提升GPU效率。
当UE4用我们的方法集成了之后VRWorks之后,使用起来是非常简单的,大家启动之后,就可以在Project Setings里面打开三个选项,提示一下,打开这几个技术可能要重新启动一下引擎。打开游戏支持之后我们提供了Console变量,来让大家对这个技术进行实时的控制。我们的MultiresRendering和Lens还提供了几个等级的设置,等级的设置越高对帧的提升就越明显,但是对周边画质影响就越大,大家可以根据自己的游戏特点选择不同的特质,或者可以放在UI里面让玩家自己调整。
另外我也说过,现在我们的VRWorks涵盖的范围很大,不只是物理图象渲染这块。为了给大家展示如何在VR游戏当中使用我们的东西进行物理模拟,我们做了自己的第一个游戏《VR Funhouse》,现在已经公开了,是完全免费的。里面包含了各种物理效果,比如说毛发、粒子等物理效果,有兴趣的开发者可以拿过来体验,把这些技术借鉴到自己的游戏中去。由于我们的游戏目的并不是赚钱是教学目的,因此它是公开的,可以在我们的官网上找到相关的内容。