利用同步空间扭曲对虚拟现实渲染性能的虚拟提升
发表于 2022-10-21 11:11:08

在本帖中提及的Qualcomm产品均由Qualcomm Technologies公司和/或其子公司提供。

由乔纳森·威克斯和山姆·霍尔姆斯共同撰写

VR的渲染要求硬件和应用程序保持非常高的帧率。一个典型的PCVR(PC和VR)设置包括一台连接到头戴式设备(HMD)的PC和一对手持式控制器,它们都必须实时运行。这种设置必须应对流畅的控制器和游戏运动、6DoF动画、头部运动和两个渲染通道(每只眼睛一个),速度为90至120 FPS。将这种设置换成无线HMD,通信通道(如Wi-Fi、5G等)也必须能够满足实时数据传输的任务。

去年,本公司与虚拟桌面的创造者Guy Godin公司进行合作,以提高个人电脑虚拟现实的渲染性能。我们将空间扭曲功能添加到本公司的Adreno运动引擎上,而该运动引擎在骁龙XR2高通Adreno图形处理器驱动的所有耳机上均可运行。

在不需要购买个人电脑的情况下,利用空间扭曲可以在头戴式设备上即时产生丢失帧,从而减少了个人电脑到头戴式设备的带宽以及编码器的压力。通过这种方式,使个人电脑的可用渲染时间以及个人电脑虚拟现实到头戴式设备串流的有效编码器比特率提高了一倍。

让我们仔细看看空间扭曲是如何发挥作用的。

扩展现实帧外推

当应用程序的渲染速率与显示器的硬件显示刷新速率相匹配时,就会出现高性能渲染效果。实现这种效果的一种方法就是异步时间扭曲(ATW),这种方法可以纠正渲染和当前姿势之间头部旋转方面的细微差异。这种方法同样确保可以在显示器上反映低延迟的头部运动(又名低移动时间延迟),这一点对于防止晕屏非常重要。但是,传统的异步时间扭曲只能纠正头部旋转,但是无法说明游戏动画、控制器运动、6自由度运动(例如,在场景中平移/行走)、或游戏动画。当渲染速率与显示速率不匹配时,帧抖动会表现为双重图像、鬼影或模糊(参看下图)。

应用程序渲染速率与显示速率不匹配时虚拟显示出现抖动的示例。

利用空间扭曲克服抖动

可以利用空间扭曲处理抖动情况 – 空间扭曲是一种填补丢失帧的技术。空间扭曲有若干变化形式:

该类技术可以产生一个新帧,以表现丢失帧在被渲染后的情况,从而以防止渲染重复帧。与视频帧外推(在过去帧和未来帧之间产生一个中间帧)类似,虚拟现实可以产生只能通过之前渲染的帧外推出的未来帧。

帧外推

当扩展现实设备的显示速率为90帧/秒时,则完成应用程序渲染的时间不足11毫秒。在120 帧/秒的速率下,应用程序渲染必须在不到8毫秒的时间内完成。以下为渲染速率和显示速率匹配的理想场景:

在头戴式设备更新速率下可用的个人电脑帧

在无线个人电脑虚拟现实分割渲染设置中,游戏的需求可能会超过个人电脑的能力,导致渲染和显示速率变得不匹配。在这种情况下,《Space Warp》能够让玩家以更高的刷新率玩游戏。

例如,在虚拟现实头戴式设备显示速率为120帧/秒的情况下,利用空间扭曲功能,游戏可以以60帧/秒的速率进行渲染,使个人电脑完成帧的时间增加了一倍。然后头戴式设备上的空间扭曲功能通过外推显示帧率的方式填充所有其他丢失帧,从而将抖动消除,使感知到的速率达到120 帧/秒。以一半速率进行渲染时,通过发送少量较大的帧,同样可以减少视频编码器和网络的压力,在相同的带宽下为头戴式设备提供两倍的可用比特率。该外推过程如下所示。

当个人电脑无法满足头戴式设备刷新速率时所产生的外推帧。

在虚拟桌面启用同步空间扭曲功能

在虚拟桌面中启用同步空间扭曲功能需要在Adreno运动引擎中创建一个新界面,该界面接受两个颜色输入帧(即:渲染的姿势),并为目标姿势生成一个新的外推帧。结果如下所示。

以下为个人电脑虚拟渲染到头戴式设备渲染的工作原理概述:

个人电脑虚拟渲染到头戴式设备渲染的概述。左图:个人电脑虚拟渲染系统。右图:虚拟现实头戴式设备。

1. 安装在头戴式设备上的虚拟桌面客户端应用程序读取姿势并将其发送到个人电脑上,以生成帧。

2. 个人电脑渲染所请求的帧,然后对其进行编码并通过无线网络发送到头戴式设备上。

3. 头戴式设备客户端应用程序对帧进行解码并将其提交给OpenXR运行时间,并由运行时间将其合成在显示器上,以供用户使用。

注意:当头戴式设备以120帧/秒的速率运行时,个人电脑渲染应用程序帧的时间少于8毫秒。

所有该类步骤均必须以尽可能低的延迟执行,以便将移动时间延迟(M2R2P)降至最低程度。

同步空间扭曲防止虚拟桌面抖动的方法如下:

1. 当虚拟桌面检测到并没有接收新帧时,虚拟桌面将向Adreno运动引擎提供最后两个真实渲染帧以及各自的姿势和目标输出姿势。

2. Adreno运动引擎利用最后两帧、渲染姿势和目标姿势生成外推帧。

3. 虚拟桌面客户端应用程序将该帧传送至OpenXR,以避免发生抖动。在此情况下,个人电脑只需要以一半的速率进行渲染,因为Adreno运动引擎每隔一帧产生一次。但是,即使个人电脑目前可以以一半的速率运行,虚拟桌面客户端应用程序和Adreno运动引擎仍然必须按照原目标帧速率完成整个外推过程。在120帧/秒的情况下,Adreno运动引擎必须生成两个新帧(即:每个眼睛一帧),并且生成时间均在7毫秒以内,同时也为时间扭曲的运行留下空间。

Adreno运动引擎上的同步空间扭曲

Adreno运动引擎可以进行五种操作,以支持同步空间扭曲:

按照头戴式设备刷新速率、按照每只眼睛即时进行的Adreno运动引擎同步空间扭曲操作。

1. 二次投影((在上文骁龙组件第一模块中显示):在个人电脑上通过不同的头部姿势渲染两帧。为了准确地确定应用程序的运动,应当去掉头部姿势的增量,并考虑所渲染帧的视场。Adreno运动引擎将两个输入帧二次投影到目标输出姿势,类似于时间扭曲。

2. 场景变化检测:当输入帧不相交时进行检测,然后计算不会发现任何相关性的动作,从而导致不良的外推帧。这种情况可能发生在不同的场景中,例如当前帧和前一帧可能具有完全不同内容情况下的分段转向。场景变化检测模块同样可以检测渐变过渡以及菜单和用户界面,而这些均属于不应进行外推的场景。

3. 亚像素运动估计:一旦两个输入帧处于相同的目标头部方向,则应进行运动估计,以确定帧之间的动画增量。运动向量作为X轴和Y轴上的16位浮点值返回。亚像素分辨率有助于在梯度表面上提供平滑过渡。

4. 滤波与平滑:在将原始运动向量用于外推之前,原始运动向量通过该模块,以实施空间滤波和平滑。这种操作有助于减少异常值,并确保场的平滑性。请注意避免丢失边缘细节,特别是在手部和控制器周围。

5. 外推:利用最后渲染的帧和生成的运动向量进行外推,并产生领先未来半步的新帧。该模块同样应用了在生成运动向量时已经去除的目标头部姿势翘曲。

根据所公开的OpenXR头戴式设备功能,可以有选择地将最后的外推步骤卸载到OpenXR合成器上,从而进一步释放头戴式设备的资源。

结论

在短时间内需要采取多项步骤,以达到实现良好的个人电脑虚拟现实到头戴式设备体验所必需的高帧率。虽然在理想情况下,利用个人电脑和无线网络可以满足该类需求,但当其无法满足该类需求时,就可以使用同步空间扭曲这样的技术。

利用Adreno运动引擎的低延迟和即时帧外推性能,确保具有同步空间扭曲的虚拟桌面能够减少视频编码器和网络压力,同时将每帧可用的个人电脑渲染时间提高了一倍。由于整个工作负荷发生在XR2驱动的头戴式设备上,因此不需要额外的个人电脑或无线净空。这样可以降低虚拟桌面终端用户在最高可用帧率下、在没有抖动的情况下享受他们最喜欢的虚拟现实游戏所需要的最低个人电脑规格。

您是否有兴趣了解更多关于骁龙XR2的信息?请您务必查看骁龙XR2头戴式设备参考设计

如需阅读更多资料,请查看本公司在QDN上的虚拟现实博客游戏图像博客

骁龙与Qualcomm AdrenoQualcomm Technologies, Inc./或其子公司的产品。

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】