快捷导航
VR之家

【阿尔法黑科技】说说VR里的异步时间扭曲

2016-07-26 08:52 来源:VR之家 编辑:

3月份的GDC 2016大会上,著名VR公司Oculus为Rift消费者版增加了一项新功能,这项功能名为异步时间扭曲(Asynchronous Timewarp,简称ATW),目前这个词已经成为国内一些技术流的VR创业公司的演讲必提要点。那么听起来很科幻的“异步时间扭曲”技术究竟有什么作用?接下来我们就一起聊聊有关ATW的方方面面。

阿尔法黑科技认为异步时间扭曲简单来说就是一种生成中间帧的技术。当游戏画面无法保持足够的帧率时,它能产生中间帧进行弥补,从而维持较高的画面刷新率。这项技术的由Oculus的CTO John Carmack提出,是目前被认为能够解决眩晕问题的有效手段。说到这里你一定会产生疑问,这技术怎么就能解决眩晕问题了?别着急,听我慢慢道来。

阿尔法黑科技认为体验过VR的朋友们都知道,当你戴上VR眼镜并快速转动头部时,你所看到的画面就会发生抖动。“抖动”是一种VR术语,它是指设备无法同步渲染出与头部动作相应的画面。当画面产生抖动时,人自然而然就会有眩晕感产生,因此想要拜托眩晕感就需要改善画面抖动的问题。上文说了,ATW就是产生更多的帧去弥补较低的画面刷新率,因此即使快速切换画面场景,也有足够的帧数来保证画面的连贯性,从而减少抖动,进而降低眩晕感。

阿尔法黑科技认为ATW技术让VR设备保持较低帧率运行看到了希望,在虚拟现实穿戴设备中应用ATW技术,人为地填充中间帧,即使在帧率下降的情况下,也不会使渲染质量有显著的下降。总而言之,这项技术可以有效地降低延迟,提供更清晰稳定的图像,并且降低VR使用者的眩晕感和不适感。看起来有了这项技术,由于VR设备性能不足所导致的问题就可以迎刃而解,但事实真的是如此么?有了这个技术真的就可以彻底解决让人头疼的眩晕问题了么?接下来让我们从原理上了解一下这个技术。

时间扭曲和异步时间扭曲

大家都知道,大部分的显示器和绝大部分的手机屏幕的刷新率都是60Hz,也就是说,在理想情况下我们的显示设备大概要在每秒处理60帧的画面,也就是说从数据到渲染就有1000/60≈16.6666ms的时间延迟。那么,如何抵消这个时延呢?John Carmack提出一种方法:通过大量采集陀螺仪数据,在样本足够多的情况下,就可以预测出16.67ms后你头部应有的旋转和位置,按照这个预测的数据来渲染,他管这个技术叫时间扭曲。

时间扭曲说白了就是一种图像帧修正的技术,它通过扭曲一副被送往显示器之前图像,来解决这个16.67ms的延迟。最基础的时间扭曲是基于方向的扭曲,这种只纠正了头部的转动变化姿势,这种扭曲对于2D图像是有优势的,它合并一副变形图像不需要花费太多系统资源。

然而问题又来了,一般的VR场景很复杂,我们很难保证每次都在16.67ms内完成一次渲染,也就是说我们很难保证每个应用都是60fps。于是John Carmack又提出一个技术,就是上文我们所说的异步时间扭曲。说专业点,异步时间扭曲是指在一个线程(称为ATW线程)中进行处理,这个线程和渲染线程平行运行(异步),在每次同步之前,ATW线程根据渲染线程的最后一帧生成一个新的帧。可以这么说,无论你当前游戏的fps是多少,画面始终被设计成保持在60fps(视刷新率而定),这样就不会产生画面抖动了。

以上就是ATW技术的核心细节,即把时间扭曲和帧缓冲分离,用高刷新率的时间扭曲来换取低时延。事实上,这项技术在一年前便已经运用于三星的GEAR VR中,但PC的VR设备在运用这项技术的时候遇到一些挑战,致使这项技术在今年Q1尾声才被Oculus宣布支持。Oculus团队表示,将继续与微软、NVIDIA、AMD进行密切的合作,以优化Windows对Rift的支持。

实现ATW的方法

具体该如何实现ATW呢?请看下面这张图,这张图展示了GPU给左右眼的画面分别进行渲染,然后在画面显示出来之前插入一个ATW的处理过程。                                              

ATW处理过程

在左边这帧的处理中,画面渲染及时完成,此时直接显示就行了;中间的第二帧渲染未能及时完成,此时如果什么都不做就会因缺帧而出现画面抖动,而有了ATW的话,它会将前面一帧调用出来重新显示,同时加上头盔运动变化,从而保持帧率。

前文提到在PC端实现ATW时会遇到一些挑战,挑战主要有两个:一个是需要GPU硬件支持合理的抢占粒度,另一个是要求操作系统和驱动程序支持使GPU抢占。让我们从抢占粒度开始说明,在90Hz刷新率下,帧之间的间隔大约是11ms(1000/90),这意味着为了使ATW有机生成一帧,它必须能够抢占渲染线程并且运行时间少于11ms。然而11ms实际上不够好,如果ATW在一帧时间区间内任意随机点开始运行,那么在执行和帧扫描之间的时间也将随机,而我们需要确保我们不跳跃任何游戏渲染的帧。

我们的目标是使ATW一直在非常短的时间内运行,短到在GPU产生新的一帧之前结束,刚好有足够的时间来完成中间帧的生成。为了获得高优先级抢占粒度和调度,最好在2ms或更少的时间内运行。然而,对现在的显卡和驱动来说,2ms抢占是一个艰巨的任务,虽然许多GPU支持有限的形式的抢占,但执行上存在显著差异。如果抢占操作不是很快,ATW将无法抢在画面同步之前生成中间帧。这样,最后一帧将会再显示,将导致画面抖动。

另外一方面是操作系统对抢占的支持,在Win8之前的OS,Windiows显示驱动模型(WDDM)支持使用“批处理队列”粒度的有限抢占,对于內建的图形驱动程序趋向于大批量渲染,导致对ATW的支持并不是很好。虽然Win8改善了WDDM,支持更细的抢占粒度,但这些抢占模式不能被图形驱动程序普遍支持。好消息是渲染管线将在Win10及DX12中得到显著提升,但直到Win10变为主流之前,还是没有更好的方式来支持渲染抢占,其结果是ATW需要特定显卡驱动的支持。

说了这么多专业术语,想必很多读者已经云里雾里了,其实您只需要记住:ATW需要显卡和操作系统均能符合其要求才能很好地实现,而目前的桌面GPU和OS并不能做到很好地支持ATW,因此这是为实现ATW而需面对的挑战。

ATW技术很难实现么?

从原理上看,这个技术貌似挺高大上的,但其实ATW技术的核心代码只有区区5行,不过要达到最好的效果,还是得满足以下几点:1、GPU必须支持抢占(GPU preemption)。其是指在可以进行上下文切换的同时,图形处理将会被给予更高的优先权,以使图形处理的延时未免受多任务处理影响。这个功能大部分移动GPU都支持,但是很多桌面GPU还不支持;

2、系统最好支持主表面写入。这个跟GPU有一定关系,但是跟操作系统关系比较大,如Win10对主表面写入的支持就较好。

3、GPU必须有较高的性能。这个很好理解,时间扭曲线程大大加重了渲染负担,因此最好是能使用旗舰级的GPU,VR入门级的GTX 970或R9 390可能并不能给与ATW足够的硬件支持。

Oculus之所以先在Gear VR上实现ATW,是因为上面第1点所说的移动GPU支持抢占,而这次他们将ATW带到PC平台上,是在Microsoft、NVIDIA和AMD的共同支持下实现的。微软提供OS上的支持,英伟达开发了VR Works,AMD则有Liquid VR。

国内厂商中,乐相科技表示ARM对大朋VR提供了Front Buffer和Context Priority的支持,用以在移动VR上实现ATW。而没有定制硬件的焰火工坊则在Oculus的基础上修改了一部分时间扭曲的实现,其在渲染线程那里会监控时间扭曲线程的工作情况,让GPU负载动态平衡,保证时间扭曲线程工作在比较高的帧率下。

ATW的难点和局限

前面说了实现ATW对GPU和OS的要求,接下来该说一说这个技术需要解决的技术难点了。难点主要有两个,一个是位置抖动,另一个是运动的物体和动画引起的瑕疵。

位置抖动是最明显的用基于方向的时间扭曲带来瑕疵之一,在使用VR设备时移动头部,如果在ATW产生图像帧时只考虑了旋转分量,那么任何头部平移分量都将被忽略。这就意味着当你的头部从一边移动到另一边时,哪怕只是旋转你的头或转动你的眼睛,你将看见离你很近的物体会有多个图像叠加的抖动,这种效果在临近场空间中是非常明显的,比如下面的这个潜艇截图:

位置抖动示意图

那么,这种影响有多严重?抖动的程度取决于玩家的运动方式,如果保持头部相对静止并且只看风景,这种颤动将并不显著,可以忽略不计。另外,如果看远处物体,头部运动也不太可能引起明显抖动。换句话说,如果你离场景非常的近,当你头部移动的时候,位置抖动将会相当明显,就像没有ATW一样。这种抖动也会出现在当你近距离看带纹理的地面的时候,由此产生的感觉是一个让人望而生畏、不稳定的世界,让人非常迷茫和不舒服。

另外一点是运动的物体和动画。使用ATW时,动画或者移动的物体会引起另外一个瑕疵,因为它产生的新图像只是根据前一帧图像生成的,缺少了物体的运动信息,所有的中间帧都好像是被冻结了一样,这个伪影表现为这些移动的物体,即抖动的多幅图像。因而对于运动的物体来说容易产生抖动,如下图:
运动物体抖动示意

这个虚影的影响取决于场景中物体数量、投影面积及运动速度等条件,如果物体个头小、运动速度慢,那么抖动将不是特别明显。如果物体快速移动或覆盖屏幕很大一部分,抖动将十分剧烈。虽然ATW处理近景物体是个问题,但影响并没想像的那么大。

总结:ATW不是万能的

总体来说ATW确实是一项很棒的技术,如果没有它的话,开发者在游戏开发中为了保持画面帧率只能非常保守地使用CPU和GPU性能,而ATW可以游戏更容易保持帧率稳定,从而让开发者在画面设计上更加大胆。此外,ATW还可以很大程度上减少画面抖动,从而降低使用者的眩晕感。


异步时间扭曲

然而,上文我们已经提到,ATW是有局限性的,VR应用最好是维持较高的帧率,以提供最好的渲染质量。ATW生成的中间帧也有可能导致用户有不舒服的感受,换句话说,ATW无法从根本上解决这种不舒服。为了产生一个舒适,令人信服的VR空间,开发人员仍然需要保持帧率在90Hz。


异步时间扭曲配合GPU抢占

用ATW的VR应用在运行中丢失了约5%的帧。ATW可以将大部分丢失的帧补上,从而大幅减少画面抖动,而这一切对应用来说不需要消耗更多性能或更改代码就能实现。Oculus还表示这一切只是开始,他们正与合作伙伴尝试提高ATW的运行效率。

 

展开 ↓
打开VR游戏盒APP,查看更多精彩游戏攻略

相关文章

热门网游

热门软件

最新专题

更多