为了让更低端的电脑也能获得良好的体验,Oculus可谓费尽心思,继之前推出ATW(Asynchronous Timewarp,异步时间扭曲)之后,近日,该公司更进一步推出了新技术ASW(Asynchronous Spacewarp,异步空间扭曲)。有了这项技术之后,计算机可以只渲染45Hz的画面刷新率,而用户最终体验和本地90Hz画面的感受差不多。
那么这项技术是怎么实现的呢?我们先来回顾一下ATW技术是怎么回事。
一种生成中间帧的技术
图片来源:Oculus博客
Oculus在博客里对ATW做了详细的解释。如上图所示,GPU给左右眼的画面分别进行渲染,然后在画面显示出来之前插入一个ATW的处理过程。在左边这帧的处理中,画面渲染及时完成,此时直接显示就行了;中间的第二帧渲染未能及时完成,此时如果什么都不做就会出现画面抖动,而有了ATW线程的话,它会将前面一帧调用出来,结合头部运动变化预测新的帧,再显示出来,从而保持帧率。这里面预测头部运动的变化非常重要。但ATW只预测3自由度旋转的的运动,平移没有被包括进来。
ATW的主要作用是减少画面抖动,提高效率,同时保持低延迟。
ASW:ATW的进阶版
从名字就可以看出ASW和ATW是类似的技术,根据Oculus官方的解释,ASW是根据之前的画面帧预测出新的画面帧。听起来和ATW差不多,不过ATW预测的只有一个东西:用户头部的转动。在之前没有房间级追踪和Oculus Touch的情况下,这基本就够用了。
ASW可以和ATW一起将VR体验里所有视觉运动都覆盖。包括角色运动,摄像头运动,Touch控制器的运动,以及用户自身的位置运动。这样当渲染速度跟不上时,用户体验到的画面还可以保持流畅。
举个例子,看下面这个动图,这个画面显示的是,从第0帧到第1帧(相隔1/45秒),手拿一把枪从从右向左移。ASW线程会从这个运动中产生一个新的预测帧(第1帧之后的1/90秒)。ASW线程会检测枪的运动并生成一个新帧,代替程序显示在屏幕上。
在VR中,ATW和ASW是相辅相成的。Timewarp适合头部转动,实际上,对于长距离观看的静态图像它是完美的。类似全景视频这类应用,ASW没必要用到。相反地,Spacewarp应对近处的动画物体非常棒,但对于追踪头部运动则不大行。
之前有了ATW时,用户转头画面可以保持流畅,现在有了ASW,VR里物体的运动也可以很流畅了。
ASW也不完美
和ATW一样,ASW是自动适配所有应用的,不需要开发者做什么事。但这项技术也不是完美的。
在低于屏幕刷新率一半的情况下,ASW效果不是很好。另外,取决于显示的画面,由于不完美的帧预测,可能会出现视觉假象。典型的例子如下:
1、快速的亮度变化。闪电、摆灯、淡入淡出、闪光灯,以及其它快速的亮度变化很难为ASW进行追踪。ASW试图识别区块时,这部分画面可能会出现晃动。另外,部分半透明动画场景也可能出现类似效果。
2、物体去遮挡拖尾。“去遮挡”是个图像术语,意思是物体移开对某个区域的遮挡。当物体移动时,ASW需要有画面去填补它不再遮挡的那个区域。而ASW并不知道给这个区域填补什么,此时后面的画面就会拉长来进行填补,形成拖尾。由于45 FPS时物体移动的距离通常是很小的,这个拖尾一般看不出来。
3、重复图样的高速运动。例如在铁栏门前跑动并看着它。由于物体的一部分看起来和其它部分类似,就很难判断向哪边移动了。对ASW来说,这种错误预测极少出现,但偶尔仍会发生。
4、头部锁定的元素运动太快而无法追踪。一些应用会使用头部锁定(意即相对你的头不运动)的元素,比如驾驶舱,HUD或是菜单。如果应用试图自己处理这样的元素而没有应用Oculus SDK提供的锁定层,那么当背景相对锁定元素运动得太快,就可能会出现抖动。ASW可以进行一些弥补,但有时用户头部运动太快,导致无法很好地追踪,结果是画面不流畅。如果用Oculus SDK提供的锁定层则可以带来理想的效果。
Oculus提醒开发者不一定要规避这些场景,但需要注意它们的出现。ASW在绝大多数场景下(但并非所有场景)都可以对不足90 FPS的渲染进行弥补。ASW对抖动会有很大的改善,并且和完全本地渲染的画面相比几乎看不出区别。