使用高清晰度渲染管线创建沉浸式、逼真的VR体验

SEBASTIEN LACHAMBRE / UNITY TECHNOLOGIESSenior Technical Artist
Mar 12, 2020|7 Min
使用高清晰度渲染管线创建沉浸式、逼真的VR体验
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

我们正式将虚拟现实带入高定义渲染管线(HDRP)。在2019.3.6f1及之后的版本中,HDRP现在已通过验证,并可以在VR中使用,包版本为7.3.1。

这篇博客文章深入探讨了在您的VR项目中使用HDRP的技术细节。要了解HDRP提供的所有可能性,请查看这篇博客文章

HDRP中的VR设计为:

所有HDRP功能与VR兼容。

HDRP完全支持新的Unity XR插件框架

单通道(实例化)是VR的默认和推荐渲染解决方案。

关键功能

使用HDRP进行VR项目,您可以利用所有渲染管线的功能,创造出仅受您想象力限制的体验。凭借其最先进的渲染技术,HDRP可以提供惊人的、逼真的视觉效果,在虚拟现实环境中达到前所未见的质量。

以下是您VR项目可用功能的快速概述:

  • 延迟和前向渲染
  • 所有光源类型、阴影、贴花和体积效果
  • 屏幕空间效果
  • 环境光遮蔽(AO)
  • 屏幕空间反射(SSR)
  • 次表面散射(SSS)
  • 失真和折射
  • 后处理
  • 色彩分级、抗锯齿、景深等。
  • 来自视觉效果图的所有VFX
支持的平台

HDRP的VR目前可用于以下平台和设备:

  • Oculus Rift和Rift S(Oculus XR插件,Windows 10,DirectX 11)
  • Windows混合现实(Windows XR插件,Windows 10,DirectX 11)
  • PlayStationVR

OpenVR:Valve目前正在为2019.3及更高版本开发他们的OpenVR Unity XR插件,该插件将很快可用。

立体渲染技术

本地VR实现将处理所有内容两次——每只眼睛一次。我们称这个解决方案为多通道渲染。HDRP支持多通道渲染,但我们不推荐这种方法,因为您的应用程序在渲染时将使用两倍的CPU功率,基本上使您的绘制调用数量翻倍。此外,阴影将被渲染两次,可能会消耗您GPU预算的相当一部分。

也就是说,在某些情况下,使用多通道是合适的:

  • 如果您的系统具有较少的GPU内存,多通道在渲染目标上使用的内存比单通道少。
  • 如果出于某种原因您需要为每只眼睛渲染截然不同的视点。

更快的解决方案是使用单通道(实例化)渲染。在这种模式下,每个绘制调用同时为两只眼睛渲染。这通过使用纹理数组作为渲染目标和实例化绘制调用来实现。此外,剔除和阴影每帧仅处理一次。

HDRP的设计使所有功能与VR兼容,并针对单通道渲染进行了优化。

关键设计决策是为所有渲染目标使用纹理数组(即使您不是为VR创建)。这个决定,加上着色器宏,使我们能够编写与VR自动兼容的着色器,除了少数特殊情况(例如,光源列表生成、间接瓦片延迟着色、体积光照和相机相对渲染)。

请注意,HDRP不支持双宽纹理的单通道渲染,因为所有全屏通道和效果所需的额外复杂性和开销。

从HDRP VR开始

要开始使用HDRP VR,请查看Unity文档中的VR概述部分。为了帮助您设置HDRP与VR,我们还提供了一个HDRP向导,它验证您的设置并可以帮助您修复向导识别为不正确的任何设置。

hdrp向导

要手动使用新的XR插件框架为您的项目配置VR,请参考文档。要设置单通道渲染,您必须将两个项目设置设置为单通道立体渲染模式HDRP资产设置设置为单通道。如果这两个选项中的任何一个未启用单通道,HDRP将默认使用多通道。

Xr设置

抗锯齿

在VR中减少锯齿非常重要,以创造良好的用户体验并避免破坏虚拟环境的沉浸感。HDRP提供了几种解决方案来帮助抗锯齿。

相机抗锯齿模式在Unity的文档中详细描述。这些选项包括:

  • 多重采样抗锯齿(MSAA)在前向渲染中受支持。您可以通过选择样本数量(2x、4x、8x)来平衡质量与性能。这种技术可以取得很好的效果,但也可能很昂贵。
  • 时间抗锯齿可能是大多数应用程序的最佳解决方案。它在减少锯齿方面非常有效,但可能会模糊一些细节。您可以通过附带的锐化滤镜控制来抵消这种模糊。
  • 一些相对便宜的解决方案包括快速近似抗锯齿(FXAA)或子像素形态抗锯齿(SMAA)。
  • 也可以将MSAA与TAA、FXAA或SMAA结合使用。这种技术提高了视觉质量,但成本是累积的。
  • 每种材料还可以使用几何高光抗锯齿进行额外的阴影抗锯齿,您可以直接在材料上进行调整。建议在光滑和密集的表面上使用。

性能

由于需要更高的刷新率和分辨率以同时显示给双眼,VR渲染极具挑战性。确保在HDRP资产设置中禁用您不需要的任何功能。像体积光这样的功能不适合VR应用,因为尽管支持,但其性能未达到所需的90 fps。频繁监控和分析性能将帮助您识别项目中的任何瓶颈。

请注意,默认情况下,VR中体积效果的精度(z切片)将减半,以保持GPU性能更可接受。除了体积光照,在进行VR项目时,强烈建议禁用HDRP区域光支持。与其他功能不同,区域光必须通过着色器配置文件禁用。

HDRP中有两种渲染方法,这也会影响性能:光照着色器模式前向和延迟。要了解这两种模式之间的差异,请参阅文档。为VR选择正确的模式取决于项目的要求。前向渲染允许您启用MSAA并减少内存使用,而延迟渲染对于具有大量光源的项目更高效,但也消耗更多内存。

影响GPU性能的另一个因素是渲染缓冲区的分辨率。此分辨率最初由XR显示插件设置,并取决于您使用的耳机。然后,您可以在应用程序中调整分辨率,或使用动态分辨率功能根据当前场景的上下文来驱动分辨率。例如,分辨率可以根据当前GPU帧时间进行调整。

有关更多提示,请查看2019年哥本哈根Unite的HDRP VR演讲。

HDRP VR的技术深入分析

为了在HDRP中支持VR,我们添加了一组着色器宏,以帮助处理视图实例化和渲染目标的纹理数组使用。例如,您可以在着色器中使用以下代码声明一个纹理:

TEXTURE2D_X(MyTexture);

在支持纹理数组的平台上,此宏将扩展为TEXTURE2D_ARRAY。如果平台不支持纹理数组,或者在ShaderConfig.cs中的设置被禁用,则宏将扩展为常规的TEXTURE2D。纹理采样的类似功能也可用。

在着色器方面,适当的视图常量(视图矩阵、投影矩阵等)存储在数组中,并根据眼睛索引进行索引,该索引源自原始体的instanceID。在计算着色器的情况下,z调度维度用于识别每只眼睛。宏UNITY_XR_ASSIGN_VIEW_INDEX通常用于分配适当的眼睛索引。

HDRP VR的未来

HDRP VR的未来版本将专注于:

  • 通过新的硬件选项(如可变速率着色)提高性能
  • 通过Vulkan和DX12改善平台支持
  • 改善设备支持
  • 扩展单通道以支持超过两个视图
告诉我们你的想法

您今天可以开始利用HDRP VR。我们希望在HDRP论坛中听到您的反馈,因为我们将继续进行改进。