Unity HDRP V7.2.0正式支持VR,实现前所未有的质量和逼真视觉效果
HDRP最初在Unity 2019.2 beta版本中纳入了对虚拟现实的预览支持。
(映维网 2020年03月14日)Unity 7.2.0的High Definition Render Pipeline(HDRP)现已正式支持虚拟现实。本文将介绍如何在VR项目中利用HDRP。
HDRP对VR的支持包括:
-
所有HDRP功能均与VR兼容。
-
新的Unity XR插件框架完全支持HDRP。
-
单通道(实例化)是VR的默认与推荐渲染解决方案。
1. 亮点介绍
通过将HDRP用于VR项目,你可以利用所有渲染管道的功能来创建仅受想象力约束的体验。凭借最新的渲染技术,HDRP可以在虚拟现实环境中实现前所未有的质量,并提供令人惊叹的逼真视觉效果。
下面是可用于VR项目的功能速览:
-
递延渲染和正向渲染
-
所有光源类型,Shadows, Decals和Volumetrics
-
屏幕空间效果:环境光遮挡;屏幕空间反射;次表面散射;变形和折射
-
后处理:颜色分级,抗锯齿,景深等
-
Visual Effect Graph中的所有VFX
2. 支持平台
HDRP的VR支持面向下列平台和设备:
1.Oculus Rift和Rift S(Oculus XR Plugin,Windows 10,DirectX 11)
2.WWMR(Windows XR Plugin,Windows 10,DirectX 11)
3.PSVR
4.OpenVR:Valve目前正在为2019.3及以后版本开发相关的OpenVR Unity XR Plugin,并将很快推出。
3. 立体视图渲染技术
本地VR实现将处理所有内容两次,每只眼睛一次。Unity将这种解决方案称为多通道渲染。HDRP支持多通道渲染,但不建议你使用所述方法,因为你的应用程序需要两倍的CPU性能进行渲染,从而令绘制调用次数增加一倍。最重要的是,阴影会被渲染两次,并可能消耗很大一部分GPU预算。
在特定情况下,使用多通道是合适的举措:
1.如果你的系统具有少量的GPU内存,多通道渲染目标所使用的内存将少于单通道。
2.如果出于某种原因,你需要为每只眼睛渲染截然不同的视点。
更快的解决方案是使用单通道(实例化)渲染。在这个模式下,同时为两只眼睛渲染每个绘制调用。具体可以将纹理数组用于渲染目标和实例绘制调用。另外,每帧仅处理一次剔除和阴影。
DRP设计成所有功能都兼容VR,并针对单通道渲染进行了优化。
关键的设计决策是对所有渲染目标使用纹理数组(即便不是创建VR内容)。这个决定,加上着色器宏,可允许你创建与VR自动兼容的着色器。当然,少数特殊情况例外,如光源列表生成,体三维照明,以及相对于camera的渲染。
请注意,HDRP不支持双宽纹理的单通道渲染,因为所有全屏通道和效果都需要额外的复杂性和负载。
4. 如何开始
开始前请参阅Unity文档中的“VR Overview”页面。Unity同时提供了HDRP Wizard来验证你的设置,并可以帮助你修复不正确的设置。
若需通过新的XR插件框架来手动为VR配置项目,请参阅这个文档。要设置单通道渲染,你必须将 Project Settings设置为Single-Pass Stereo Rendering渲染模式,并将HDRP asset设置设置为Single Pass。如果未对单通道启用这两个选项之一,则HDRP将默认为多通道。
在Project Settings和HDRP asset设置中使用Oculus插件来启用Single Pass渲染。
5. 抗锯齿
减少锯齿对VR非常重要,它可以带来出色的用户体验并避免破坏虚拟环境的沉浸感。HDRP提供了多种解决方案来帮助处理抗锯齿。
所述选项包括:
-
正向渲染支持多重采样抗锯齿。你可以通过选择样本数量(2x,4x,8x)来平衡质量与性能。这项技术可以取得相当出色的效果,但计算成本十分昂贵。
-
对于大多数应用,Temporal Anti-Aliasing或许是最佳的解决方案。它在减少锯齿方面非常有效,但会模糊一定的细节。你可以使用随附的锐化滤镜控件来抵消这种模糊。
-
计算成本较低的解决方案包括Fast Approximate Anti-Aliasing(FXAA)或Subpixel Morphological Anti-Aliasing(SMAA)。
-
你可以将MSAA与TAA,FXAA或SMAA结合使用。它们可以提高视觉质量,但计算成本是累积叠加。
-
Geometric Specular Anti-Aliasing为每种材质提供了额外的着色抗锯齿,你可以直接对材质进行调整。我们建议将其用于光滑密实的表面。
6. 性能
由于双眼显示的刷新率和分辨率高,所以VR渲染的要求非常严格。确保在HDRP asset设置中禁用所有不需要的功能。诸如Volumetric之类的功能不适用于VR应用,因为尽管支持,但它们的性能无法达到要求的90fps。经常监视和分析性能将帮助你确定项目中的瓶颈。
请注意,默认情况下的Volumetric效果在VR中的精度将是一半,这是为了确保GPU性能更能接受。除了Volumetric Lighting外,强烈建议在执行VR项目时禁用HDRP Area Light支持。与其他功能不同,你必须通过着色器配置文件禁用Area Light。
HDRP中提供了两种渲染方法,而它们同样会影响性能。这两者是正向渲染和延迟渲染。为VR选择正确的模式取决于你的项目要求。正向渲染允许你启用MSAA并减少内存使用,而对于具有大量照明的项目,延迟渲染更位有效,但同时需要占用更多内存。
影响GPU性能的另一个因素是渲染缓冲区的分辨率。所述分辨率最初是由XR显示插件设置,但具体取决于你所使用的头显。你后面可以在应用中调整分辨率,或者使用动态分辨率功能并根据当前场景的情景来提高分辨率。例如,可以根据当前GPU帧时间来调整分辨率。
7.着色器宏
为了在HDRP中支持VR,Unity添加了一组着色器宏来帮助处理渲染目标的视图实例化和纹理阵列使用。例如,你可以使用以下代码在着色器中声明纹理:TEXTURE2D_X(MyTexture)
对于在支持纹理数组的平台,所述宏将扩展为TEXTURE2D_ARRAY。如果平台不支持纹理数组,或者如果ShaderConfig.cs中的设置禁用,则所述宏将扩展为常规TEXTURE2D。类似的功能可用于纹理采样。
在着色器端,适当的视图常量(视图矩阵,投影矩阵等)存储在数组中,并根据从图元instanceID导出的眼睛索引进行索引。在计算着色器的情况下,z调度维度用于标识每只眼睛。宏UNITY_XR_ASSIGN_VIEW_INDEX通常用于分配适当的眼睛索引。
8. 未来
HDRP VR的未来版本将专注于:
-
通过可变速率着色等新硬件选项来提高性能
-
使用Vulkan和DX12改善平台支持
-
改善设备支持
-
扩展单通道以支持两个以上的视图
9. 反馈
你现在即可马上感受HDRP VR的优势。如有任何反馈建议,请通过HDRP论坛发表你的意见。