如何减少头显画面的“抖动”,获得更好的VR体验?

在使用头显的过程中,经常碰见画面“抖动”的现象。不必要的画面“抖动”显然会影响VR体验,那么是否可以采用技术来减少甚至杜绝画面“抖动”呢?

异步时间扭曲(Asynchronous Timewarp,ATW)、异步空间扭曲(Asynchronous Spacewarp,ASW)、交叉二次投影(Interleaved Reprojection)、异步二次投影(Asynchronous Reprojection)等技术正是在解决上述问题中诞生的。

对于这一连串让人摸不着头脑的文字,你是否已经晕头转向了,没关系,零镜网今天将让你摸清这些技术。

画面“抖动”

使用VR头显的过程中,经常出现画面的“抖动”,但是你知道“抖动”是如何产生的吗?产生这种现象是由于设备无法同步渲染出与头部动作相应的画面。

为何无法产生同步的画面?在这里必须提及的就是延迟和刷新率。

主流屏幕刷新率一般为60Hz,它意味着在1秒的时间内,屏幕上的画面进行了60次更新。这也意味着每一次更新所需要花费的时间是16.66ms,但并不意味着延迟就是16.66ms。

延迟一般是指从用户运动开始到相应画面显示到屏幕上所花的时间。主要通过以下步骤实现整个过程:

%e5%9b%be1
(采集数据,线缆传输,引擎更新,渲染,像素颜色切换,画面呈现)

为了降低延迟,可以在以上各个部分进行优化。

在不考虑硬件延迟的情形下,如果当前帧在16.66ms内完成了渲染并提交,那么延迟时间就是16.66ms。但是如果没有完成,那就得等到下一帧时再进行提交,而你看到的画面依旧是此前的画面,这时延迟也由16.67ms变为了33.34ms。一般情况下,大众所能接受的延迟在20ms以内。

我们避开硬件不提,试着从刷新率来降低延迟。提升刷新率的同时降低延迟,这对VR的渲染有着极大的要求。刷新率从60Hz变为90Hz,也就意味着原来需要在16.66ms渲染一张图片,现在需要在11.11ms内完成渲染并提交。如果不能在规定的时间内完成,哪怕渲染帧率为80fps(帧/秒),也会由于垂直同步这道坎而拖累为45帧/秒。

渲染的帧率必须保持稳定,偶然掉一两帧在VR体验中也是相当明显的,可能某个物体的位置已经相差很远了。而“抖动”在此时也愈加明显。

为了解决这样的问题,在引擎策略上的优化方案诞生。

异步时间扭曲

其实这个方案应用到了刷新率和传感器之间频率的差异。传感器的频率一般是1000Hz,而刷新率假设为60Hz,前者每毫秒更新了数据,而后者则是每16.66ms更新数据。而这正是玄妙所在。

如果我们按正常情况回顾整个过程(如下图),大致需要花费16.66ms。而这时屏幕出现的画面,已经是16.66ms以前我们应该看到的画面。使用者可能感受不出多大的区别,但是如果加上硬件以及其他因素的延迟,这种感觉就会非常明显。

%e5%9b%be2

但是从第一次采集数据开始,传感器几乎每毫秒都在采集新的数据。如果我们能在画面呈现在屏幕之前将这些位置信息的数据载入到所绘制的图像中的话,虽然呈现的依旧是16.66ms以前的画面,但是画面所呈现的却是最后一次采集数据时我们所应该看到的场景。

可以举个例子来进行说明,假设在游戏逻辑进程(1ms)时重新采样并进行处理,延迟就降低为15.66ms;在渲染绘制之前(5ms)时重新采样并进行处理,延迟就降低为11.66ms;假设我们在提交屏幕之前(14ms)重新采样并进行处理,那么延迟就降低为2.66ms。

%e5%9b%be3

为什么不直接在最后的一步进行采样,而是采取多个步骤?这是由整个进程决定的。通过以上步骤,我们能够达到2.66ms的延迟。这便是时间扭曲(Timewarp)的主要思路。

在这个过程中,由于使用者偏转头部并没有引起位置的变化,仅仅是观察角度变了。计算机能够将渲染完的画面根据最新采样的信息计算出一帧新的画面,再提交给显示屏。这样,你看到的画面几乎是几毫秒前你应该看到的画面。延迟大幅度降低了,画面“抖动”现象也减少了。

但是,这个过程同样会出现问题:由于垂直同步的时刻是固定的,一旦当前一帧画面没有完成,时间扭曲也将延后,就失去了它的意义。异步时间扭曲的出现就是为了解决这种局面。它使得时间扭曲操作与场景渲染并行执行,如果没有新的渲染画面, 就继续使用上一帧的画面进行时间扭曲。

其实早在三星Gear VR中就应用了这项技术,但是移动端与PC端不同,将其运用于PC端需要解决更多难题。因此,直到今年3月Oculus才推出了这项技术,但是这项技术仅仅能在Windows中使用。

异步空间扭曲

通过异步时间扭曲技术,能够较好地保持帧率。但它只是一种补救措施,硬件方面的延迟优化依旧得照常进行。

在使用过程中,这项技术依旧存在不少问题。异步时间扭曲仅仅考虑了头部旋转,并未考虑头部平移的变化因素。所以当头从一边移向另一边时,会看到近处物体多个图像的抖动。

%e5%9b%be4

另外,当画面中存在移动的物体时,异步时间扭曲技术也会出现问题。因为呈现到屏幕的这一帧是根据上一帧扭曲得到的画面,由于缺少物体移动的信息,这个移动的物体可能还在原来的位置,在更新时会发现跳一下的现象。而且异步时间扭曲是基于头部旋转观察角度的变化进行的画面扭曲,如果位置变化,它将几无用武之地。

%e5%9b%be5

考虑到上述问题,在10月份的Oculus Connect3大会上,Oculus推出了异步空间扭曲技术。它通过已经生成的两帧图像对移动的物体进行预判,并在前一帧图像上生成新的一帧图像。通过在每两帧原生帧内插入计算生成帧,能够使45fps运行的应用最终以90fps展示。

gif

推出异步空间扭曲后的Oculus,依靠两项技术实现了VR体验里所有视觉运动的覆盖,包括角色运动,摄像头运动,Touch控制器的运动,以及用户自身的位置运动。

%e5%9b%be6

而将原生的45fps转换为90fps这项技术,无疑使人叹为观止。这意味着硬件配置要求大幅下降,进入VR的门槛大幅降低。

%e5%9b%be7

交叉二次投影,异步二次投影

我们不妨一次性将剩余两项技术讲清楚。如果是前两项技术为Oculus所拥有,那么后两种技术你也可以简单理解为其竞争对手HTC的合作伙伴Vavle所有,虽然索尼也运用了异步二次投影技术。

索尼的PS VR屏幕支持三种模式:1、原生90Hz;2、原生120Hz;3、原生60fps,再通过异步二次投影转换为120fps。无疑第三者显得太耀眼,而掩盖了其余二者的光芒。

我们选择Vavle来讲解剩余的两项技术。在推出异步二次投影之前,Vavle采用的是交错二次投影技术。在渲染能力仅为45FPS的情形下,交错二次投影技术能够每隔一帧重新投影一帧,使头部处于“90帧”的感觉之中。但是一大劣势是,对位置移动和动画效果会产生负面影响,会有类似残影现象出现。

相较于Oculus公司推出的异步时间扭曲技术只能使用于Windows,Valve的方法适用面更广,除Windows以外,在Mac和Linux上也同样支持。

而在11月的更新中,Steam则宣布为英伟达图形处理器(Nvidia GPU)增加了异步二次投影技术。与异步时间扭曲技术类似,异步二次投影拾取上一帧画面并通过更新的传感器数据进行处理,再展示出来。虽然会导致性能降低,但是消除了残影效果。在平滑性和舒适性方面有所改进。

而这次的更新并不会对Rift用户产生影响。但是需要扩展对AMD显卡的支持,以匹配Oculus的完整解决方案。

Oculus与Valve的清醒认识

虽然拥有了上述技术,但是他们依旧指出它们“并非灵丹妙药”。采用异步二次投影的索尼,其相关负责人Chiris Norden在2015 GDC上表示:“如果一把枪在你眼前晃,你就会注意到伪像。”Oculus的Antonov也同意这些技术有一定的局限性,开发者需要注意,“如果你的引擎不是超级灵活的多线型,你可能会遇上些麻烦。”

同时,我们不得不指出的是“异步时间扭曲只在部分GPU上能使用,而ASW能支持的就更少了。”

无论是Oculus还是Valve,在某种程度上对于这些技术都有着清晰地认识。对于Valve来说,他们并不愿意启动更为高级的二次投影解决方案,而是优先考虑了“自适应性能”以保持帧速率,因为这适用于更广泛的硬件和其他操作系统。

零镜观点

异步时间扭曲、异步空间扭曲等技术的出现,使得我们进入VR的门槛变得更低,也使我们获得了更好的VR体验。但是我们无疑抱着Valve公司一般的态度,这些技术只是暂时的改变了目前的困境,能够使我们更快地体验上VR。但是这些技术带来的一个结果也是画面的不稳定,在VR体验的优质化上,硬件性能的提升才是关键的。而在硬件性能提升上,我们无疑还有很长的路要走。