详解Oculus Link如何实现高质量低延迟PC VR体验
只需兼容的USB数据线和PC即可解锁PC VR内容
(映维网 2019年11月23日)只需兼容的USB数据线和PC,Oculus Link即可为Oculus Quest用户解锁PC VR内容,同时无需开发者付出任何额外的开发努力。
Oculus Link是PC和移动Runtime之间的独特交集。对于如何整合VR运行,并通过USB数据线来提供高质量低延迟的VR体验,Oculus日前撰文介绍了其中的挑战和解决方案。下面是映维网的具体整理:
1. 构建一个混合架构
要在VR中实现尽可能低的延迟,你需要理解系统中将要发生的一切。如果管道中的延迟导致虚拟世界落后于玩家所感,结果就是糟糕的体验。但如果可以预判延迟,VR Runtime就可以进行补偿,从而减轻特定的伪影。
从操作系统的调度程序到显示器的照明模式和人类感知机制,大多数VR优化的核心是理解系统各组成部分的工作。为了从流式传输中获取最大性能,并利用PC和Oculus Quest Runtime中内置的优化功能,Oculus Link需要拥有一个完整的VR管道:从PC端的应用程序到Oculus Quest端的内容显示。
1.1 Oculus Link管道解释
在最上层,Oculus Link主要是利用Oculus PC Runtime和Oculus Quest客户端应用程序之间的流式输入与输出。
PC端程序或Oculus Quest的合成器均无改动。不是为头显渲染后缓冲区,PC合成器将使用H.264视频压缩对眼睛纹理进行编码,然后将图像作为slice并通过USB发送到远程客户端。
Oculus Quest的远程流客户端负责解码,纠正帧,并将帧提交给合成器,充当远程PC应用程序的代理。客户端同时会将包含当前头显位置,输入状态和VSync时序的更新发送至PC Runtime。这不包含预测,PC VR Runtime会外推所述值,以匹配目标显示周期。
实际上,VR合成器的职责会分配给移动VR和PC VR Runtime,从而将普通的VR管道变成了混合架构。这种分配存在两个优势:
-
Oculus Link能够在两侧利用VR Runtime,不会因通过USB传输输入和输出而产生质量减损,管道在提交结束时能够实现纠正,这将减轻一定的传输延迟。
-
如果正确实现,现有的Rift和Rift S应用程序无需任何流式传输后端信息都能继续运行。
1.2 预测精度的挑战
VR Runtime的一项重要职责是精确预测管道的延迟,从而支持应用程序在目标显示时段内渲染帧。另一个重要的职责是确保在错误的显示期间内不要绘制帧。如果显示的时间过早或太晚,虚拟世界就会晃动延迟。
从这个角度来看,混合管道不能即开即用:当两个Runtime一起使用时,彼此都不会添加额外的管道阶段。
Oculus的解决方案是采用一种全新的帧范例,其中PC和移动Runtime相互映射:从PC Runtime的角度来看,USB的流式传输延迟和Oculus Quest的未知路径变成了更长的合成器阶段;从移动Runtime的角度来看,从应用程序渲染到帧提交的未知路径看起来像是一个动态应用程序。
1.3 帧定时概述:PC
预测的显示时间是Oculus PC Runtime最小化应用程序延迟的重要方式。如果应用程序不能假定帧正在为特定的显示周期进行准备,则它们将需要为提交应用程序帧之后的未知管道阶段提前缓冲数帧。
与在Oculus Quest不同,PC VR应用程序不能假定固定的硬件配置:管道的运行时长将始终取决于PC中的CPU和GPU。所以,Runtime将根据四个管道阶段的历史平均值来创建预测:应用程序的帧循环(CPU和GPU)合成器时间,以及扫描到显示。
对于Oculus Link,Rift PC管道估计不足。但是,可以将这一思想扩展为解决流式传输所添加的其他阶段。当Oculus Quest显示一帧时,流式传输客户端将结束时间戳发送回PC Runtime;然后在VSync计算中,将流式传输管道端的时间戳替换为合成器端的时间戳;因为PC Runtime已经具备处理可变合成器时间的能力,所以它可以动态调整预测并匹配流式传输的端到端延迟,不必降低帧速率。
1.4 帧时序概述:Oculus Quest
一般来说,Oculus Quest应用程序接收一个姿态,渲染所述姿态,然后在目标显示期间予以提交。Oculus Link的不同之处在于,预测帧来自远程设备。如果一帧的预测显示时间与实际显示时间不一致,结果将是错误的预测。一帧或两帧的错误预测通常不可见;但是,预测冲突会产生抖动。
为了解决这个问题,Oculus Link利用了PC Runtime的异步时间扭曲(Asynchronous Timewarp;ATW)和自适应合成器启动(Adaptive Compositor Kickoff;ACK)。ATW保证总有一帧为即将到来的显示期间准备;ACK则确保ATW有足够的时间。
对于流式传输,ACK可确保为Oculus Quest的每个帧间隔准备好提交正确显示周期的帧。当流式传输延迟添加到ACK对显示管道的总预测中时,ATW能够确保及时启动帧,以便在即将到来的显示期间对其进行解码,纠正和呈现。
2. AADT可带来更高的视觉质量
从PC到Oculus Quest传输高分辨率图像非常具有挑战性,因为视频编解码器(编码器和解码器)的整体延迟直接与需要编码的位数有关。你可能会选择降低图像分辨率以减少等待时间,但这会损害视觉质量。通过利用头显的透镜畸变,以及人类视觉系统的工作原理,我们可以实现更优的方案。
在显示图像之前,Oculus头显都会在渲染的最后阶段应用畸变校正。这是为了抵消由透镜引起的光学枕形畸变。结果是,桶形畸变会“压缩”VR应用程序的像素,从而令其更接近于头显边界。这意味着对于显示器的每一半,边缘的每度像素都比显示器的中心低。
上图是一个径向桶形畸变示例。
最终像素密度与GPU应用的畸变曲率有关。对于给定的透镜,应用这一校正对于VR体验而言至关重要。但对于Oculus Link,由PC GPU生成的图像不一定反映Oculus Quest透镜所需的确切畸变曲率,因为与Oculus Rift不同,Oculus Quest内置GPU,可以进一步处理传入图像。所以,Oculus PC Runtime在传输之前存在优化图像的空间。一种主要的优化来基于下面这个事实:透镜令外围区域略微模糊,从而降低了感知分辨率。
这时,轴对准畸变传输(Axis-Aligned Distortion Transmission;AADT)就能派上用场。Oculus PC Runtime不会直接发送VR应用程序渲染的未畸变图像,而是会使用轴对准畸变来应用一种固定注视点压缩。尽管用于透镜校正的径向畸变会根据与图像中心的距离而应用畸变函数,但AADT会分别将畸变函数应用于每个轴。换句话说,AADT利用了矩形图像中的所有可用空间。Oculus Quest在收到AADT图像后会令图像恢复至原装(即校正),然后再将其传输到Oculus Quest合成器。
借助AADT,可以将一对以3616×2000分辨率渲染的未畸变眼图缓冲器压缩至2016×1120,从而节省了将近70%的视频编解码器预算。AADT不仅可以节省编解码器带宽,同时可以通过确保编码器和解码器处理较小的图像来节省延迟。尽管所述数字已针对Oculus推荐规格进行了调整,但为了提高视觉保真度,将来的版本可能会进行更新。
人体视觉系统特别擅长于识别外围视场的闪烁。如果Oculus Link直接将未畸变图像发送到Oculus Quest,则Oculus Quest GPU的稀疏采样将导致外围发生混淆。利用AADT,当Oculus PC合成器在准备要传输的图像时,系统将能利用带有Mipmap的各向异性滤波。这能够消除欠采样问题,并减少了Oculus Quest进行校正后的外围伪影。
下面我们来看看AADT的实际应用。请留意第一个示例的上方网格。在应用AADT之后,未畸变的中心区域将被放大。在Oculus Quest进行校正后,外围略微模糊,同时保留了中心区域的质量。
3. 总结
本文主要讲解了如何支持Oculus Link实现低延迟,精确时序,以及高质量的视觉体验。
提醒一下,你始终可以使用Oculus Performance HUD来监视PC VR应用程序的性能统计信息,包括应用程序和PC合成器延迟。启用Oculus Link时,这个工具将为Oculus Quest开箱即用。