序言:为了FarlandsOculus团队为UE写了一个实验性的、快速的、正向渲染器 。这个渲染器也用在DreamdeckShowdownOculus商城版本中。我们分享了渲染器源样本,来帮助开发者在他们的应用中实现更高的质量水平和更高的帧率。现在,作为Unreal开发者,你可以从https://github.com/Oculus-VR/UnrealEngine/tree/4.11-ofr得到这个渲染器。

以固定90Hz渲染大量VR图像很复杂,并且具有技术挑战性。创建VR内容时,很多情况下,与传统“只有监视器”内容不同——它给我们带来了惊人的各种各样的新交互体验,但同样也迫使开发者反思旧假设,想出新点子。最近的VR浪潮展现了开发者的机遇和独创性。

在工作时我们重新评估了一些对于VR渲染的传统假设,并且开发新技术来帮助我们在90Hz提供高保真内容。现在,我们分享一些成果:针对UE 4.11的实验性正向渲染器。

我们已经在头脑中开发了具有特殊限制条件的OculusUnreal 渲染器,它让我们更容易创建高保真、高性能的体验,我们想要与所有UE4开发者分享。

背景
 

当团队开始Farlands 产品开发时,我们抽出时间反思了在Oculus ConnectGDC CES, 和其他事件上的demo体验中学习到了什么。我们仅用UE4创建这个内容,它给我们提供了无与伦比的编辑环境和丰富的先进渲染特征。

不幸的是,渲染到Rift实际上意味着我们只能用到这些特征的子集。我们想要检验那些我们最常用到的特征,并且观察是否可以设计一个精简的渲染器,这个渲染器可以提供更高的性能和更好的视觉保真度,同时允许团队继续使用UE4的顶级编辑器和引擎。但是Oculus Unreal渲染器专注于Oculus应用的用例,它已经被改造成无需开发主要内容的已有项目(包括ShowdownOculus Dreamdeck)。在这些情况下,它提供了更清晰的视觉体验,并且释放了足够的GPU净空来启用额外特征或者将分辨率提高15-30%

泰课在线

高分辨率下的比较:Unreal默认延迟渲染器以小于60fps运行和 Oculus Unreal渲染器以90fps运行

延迟VR的问题
 

UE因其先进的渲染特征集和保真性出名,那么,我们为VR改变它的基本原理是什么呢?主要在于我们创建VR内容的经验,以及渲染到监视器和渲染到Rift的区别。

当检验小样时,我们会为Rift进行创建,我们发现大多数着色器都非常简单并且主要依赖于详细的纹理,这些纹理需要一点查找和少量算法。当加上一个延迟着色器时,这意味着我们的GBuffer通路极受纹理限制——我们从大量纹理数据中读出,向GBuffers写入,在两者之间不做太多事。

我们也少量使用动态照明和阴影,并且很大程度上依赖于预计算照明。实际上,切换渲染器帮助我们一次提供一组更有限的特征、取得更好的GPU利用率、启用优化、删除带宽开销,并且让我们更容易达到90Hz

我们也想要比较MSAAUnrealTAATAA在只有监视器渲染中性能非常好,而且和延迟渲染结合得也很好,但是它会在VR中造成明显伪影现象。特别地,它会在人头部运动期间造成颤抖和几何走样,要清楚,我们自己的着色器和顶点动画点子会使这种情况变得更糟,但是大部分是归因于VR头盔工作方式。

与监视器相比,每个Rift像素都涵盖了观众视野的很大一部分。一个典型的监视器比VR头盔每立体角多10倍像素。为OculusSDK提供的图像通过一个额外的重采样层来对头盔的光学效果进行补偿,这种额外的过滤往往会使图像过于平滑。

所有这些因素一起导致了我们希望在渲染时能保证尽可能多的图像细节。我们发现MSAA会产生比我们期望的更清晰、更详细的图像。

泰课在线
延迟与正向放大比较
正向的一个更好的选择
 

目前最高水准的渲染通常利用屏幕效果,比如SSAOSSR。每个都因其真实的和高保真的视觉影响致命,但是它们在VR中的效果不理想。单纯在屏幕操作可能会引发不正确的立体差异(我们看到的图像区别),这让很多人感觉不舒服。伴随渲染这些效果的代价,我们放弃用例中那些特征的支持会舒服点。

实现一个正向渲染器的决定要把所有因素都考虑在内。关键是,正向渲染让我们使用MSAA抗走样、向富纹理着色器中添加算法(并且删除GBuffer写入)、移除昂贵的可能干扰异步时间扭曲的全屏通道,并且大体上给更具特征的延迟渲染器适度提速。切换到正向渲染器还允许单视场背景渲染,可以让大型、复杂的几何字幕性能显著提升。然而,这些优点是与不是适合每个人的。我们的目标是与虚拟现实技术开发人员分享我们的知识,因为他们继续战斗,使顶级内容以90 Hz运行。

我们的实现基于Ola Olsson 2012年的HPG论文《集群延迟和正向着色》,熟悉传统正向渲染的读者可能关心使用这样渲染器时CPUGPU动态灯光的开销。幸运的是,正向照明的现代方法不要求额外的绘制调用:所有几何和灯光都在一个单一通道中渲染(还有一个可选的z-prepass)。通过使用一个计算着色器来预计算哪个灯光影响场景的3D“群集”(每只眼睛视体的细分,产生一个截头锥体元素网格),上述就可以成为可能。利用这些数据,每个像素可以很容易定义高空间相干性的灯光列表,并且可以实现一个利用当代GPU高效分支能力的照明循环。这提供了精确选择,并且有效地处理了少量动态光,同时没有额外绘制调用和渲染通道的开销。

泰课在线
三维光网格可视化,说明照明相干性和选择

除渲染器之外,我们修改了 UE4 允许额外的 GPU  CPU 优化。渲染器作为未维护的样本和不正式支持的 SDK而提供,但我们很兴奋地给项目使用UE顶级引擎和编辑器的其他选项用于呈现他们的虚拟现实世界。

作为一个Unreal开发者,目前你可以从Github 资源库得到它:https://github.com/Oculus-VR/UnrealEngine/tree/4.11-ofr。想要行动起来看看它,请试试 FarlandsDreamdeck Showdown