为 VR 优化UE 4渲染器

首发于游戏蛮牛驿馆


为了《Farlands》游戏, Oculus 团队为UE 4开发了一个快速,单通道正向的渲染器。它也可以被用在《Dreamdeck》游戏和在 Oculus 商店中的《Showdown》游戏。我们分享了这个渲染器的源代码作为了一个简单的 demo 来帮助开发者在它们自己的应用程序中达到更高的质量和更快的帧率。从今天开始,你可以作为一个虚幻的开发者从 https://github.com/Oculus-VR/UnrealEngine/tree/4.11-ofr 下载。

渲染沉浸式虚拟现实世界需要固定在90Hz是非常复杂的,并且在技术上也面临着挑战。

在许多方面,创造虚拟现实的内容不同于传统的只要显示器的内容—它带给我们令人惊叹的各种新的互动和体验,但是这迫使开发商重新思考旧的假设,并想出新的技巧。

最近的虚拟现实游戏浪潮展示了开发者的机会和创造力。

当我们工作时,我们重新评估了一些传统的用于虚拟现实渲染的假想,并且开发的技术来帮助我们在90Hz提供高保真的内容。现在,我们分享了一些成果:关于 UE 4.11渲染器的实验。我们开发了 **Oculus 虚幻渲染器 **伴随虚拟现实在头脑中渲染出具体的约束。

它让我们更容易地创造出高保真、高性能的体验,我们渴望与所有UE4开发者分享它。

背景

当我们的团队开始开发《Farlands》,我们花了一些时间来反思我们在这个 demo 里学到的经验,我们在 Oculus Connect开发者大会,游戏开发者大会(GDC),国际消费类电子产品展览会(CES)和一些其他的活动。我们使用 UE 4来创建此次内容,这为我们提供了一个令人难以置信的编辑环境和丰富的先进的渲染功能。
不幸地是,Rift 渲染的现实意味着我们只能使用这些功能的一个子集。我们想研究哪些我们最常用的功能,看看我们是否能够设计一个精简的渲染器,能够提供更高性能和强大的视觉效果,同时让团队继续使用UE 4 的世界编辑器和引擎。然而 Oculus 虚幻渲染器关注的重点是 Oculus 应用程序的使用情况,这将改造原有项目(包括《Showdown 》和Oculus 的《Dreamdeck》这两款游戏),不需要花费太多的工作内容。在这些情况下,它提供了清晰的视觉效果,并释放出足够的GPU空间给一些附加功能或者提高15-30% 的分辨率。

高分辨率比较:Oculus 虚幻渲染器保持在90fps,默认的虚幻渲染器在60fps 以下

VR 延迟问题

虚幻引擎以其先进的渲染功能集和保真度而闻名。所以,我们为VR改变它的理由是什么? 它所创建的VR内容可能会降低我们的体验,而且渲染到显示器和 Rift 的不同。

当检查我们为 Rift 创建的这个 demo 的时候,我们发现大多数着色器都很简单,主要依靠在详细纹理上的一些查找以及少量的算法。当和延迟渲染器结合的时候,这就意味着我们的 GBuffer通道(一种在 Video Post 中基于图像过滤和图层事件中可使用的物体蒙版的一种着色技术)会有许多的纹理绑定--我们从大量的纹理中读取,再写入 GBuffers,在这之间并没有做什么。

我们也很少使用动态光照和阴影并且我们更倾向于预先计算的光照。在实际中,切换到一个渲染器帮助我们在单一通道里提供一个更有限的功能集,取得了更好的 GPU 利用率,优化,去除了带宽开销,并使它可以更容易为我们达到90Hz。

我们也想比较硬件加速的多采样抗锯齿(MSAA)与虚幻的抗锯齿(TAA)。TAA仅在监视器渲染下发挥很好的左右,它也非常适合延迟渲染,但是它在VR中引起了显著的变化。特别的是,它可以引起抖动,在头部的运动过程中会发生走样。要明确的是,这使得一些我们自己的着色器和顶点动画变得更糟。但是这主要是由于VR眼镜的作用。

与显示器相比,每一个 Rift 像素覆盖了观察者更大一部分的视野一个典型的显示器每个立体角有超过VR眼镜10倍以上的像素。提给Oculus SDK的图像,通过一个额外的重采样层弥补VR眼镜光学的影响。额外的过滤会稍微平滑过度图像。

当进行渲染时,我们的愿望是所有这些因素有助于保存尽可能多的图像细节。我们发现多重采样可以产生出我们希望的更清晰,更详细的图像。


延迟渲染与正向渲染比较,放大后的比较。

更好的适应正向渲染

目前最先进的渲染技术经常利用屏幕空间的显示效果,比如屏幕空间环境遮蔽(SSAO) 和屏幕空间反射(SSR)。 它们的现实效果和高品质的视觉冲击都是众所周知的,但是在VR中它们所做出的权衡是不理想的。 单纯在屏幕空间中操作可能会引入不正确的立体差异(在每只眼睛中产生的图像差异),这些情况使人觉得不舒服。由于渲染这些效果的成本,在我们的成功案例中放弃对这些功能的支持会使得我们的体验更舒服。

我们实现正向渲染的决定考虑了所有的因素。严格来说,正向渲染允许我们为图形保真使用多重采样抗锯齿,为我们的重纹理着色器添加算法(并移除写入的 GBuffer),移除会干扰异步时间扭曲(ATW) 技术昂贵的全屏幕通道,并且一般来说,在更强大的延迟渲染之上给我们适度的加速。 切换到了正向渲染器已经允许轻松地添加单视角背景渲染,这对于远处巨大复杂的几何体的标题显示也可以提升很大性能。然而,这些优势带来的权衡并不适合每个人。我们的目标是为了与VR开发者分享我们的知识,让他们继续开发出运行在90Hz的世界一流的内容。我们的实现基于 Ola Olsson在2012年发表的论文《聚合延迟渲染和正向渲染》。

熟悉传统正向渲染的读者也许会关心当使用这个渲染器时 CPU 和 GPU开销。幸运地是,现代正向照明的方法不需要额外的绘制调用:所有的几何体和光照都被渲染到一个单通道(可选z-计算光子图)。 这是通过使用一个计算着色器来预计算哪个光源影响3D集群(每只眼的视锥细分以及体元栅格)。

使用这些数据,每一个像素可以简单地决定一片具有高屏幕空间的灯光,并且利用现代高效 GPU的分支能力执行光照循环。

这提供了精确的裁剪和有效地处理更少数量的动态灯,没有额外的绘制调用和渲染通道的开销。


可视化的3D 光网格,说明了光照的相干性和剔除操作

除了渲染,我们已经修改了 UE4,允许进一步的CPU 和 GPU的优化。这个渲染器作为一个未维护的例子并且非官方支持的 SDK,但是我们很兴奋为项目使用虚幻这一世界级引擎和编辑器作为渲染它们的虚拟现实世界的附加选项。现在你可以作为虚幻开发者去 github 仓库下载它,地址https://github.com/Oculus-VR/UnrealEngine/tree/4.11-ofr。为了能够看到它的效果,你可以试试Farlands,Dreamdeck, 和Showdown这三款游戏。

原文链接:

https://developer.oculus.com/blog/introducing-the-oculus-unreal-renderer/

你可能感兴趣的:(为 VR 优化UE 4渲染器)