ATW

niuqu

异步时间扭曲

1、 概述

异步时间扭曲(Asynchronous Timewarp简称ATW)是一种生成中间帧的技术,当游戏不能保持足够帧率的时候,ATW能产生中间帧,从而有效减少游戏画面的抖动。

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

atww

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

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


 

2、 技术发展

近一年来,围绕着ATW这项技术已经有了许多令人兴奋的进展,ATW技术让虚拟现实设备保持较低帧率运行看到了希望,在虚拟现实穿戴设备中应用ATW,人为地填充中间帧,即使在帧率下降的情况下,也不会使渲染质量有显著的下降。

简单来说是vr场景里是360度画面,但是用户视觉焦点是有限的,所以看到区域是清晰的,若很快扭头看别处,也许很难快速在新视觉区变清楚,那基于方向的时间扭曲可以解决位置抖动问题,如果游戏渲染帧没有和头部运动达成同步, 时间扭曲可以介入并产生一个图像替代还没有被渲染出来的帧。 

自从最后一帧被渲染,通过扭曲最后一帧来反馈头部运动能看清楚。 ATW技术让虚拟现实设备保持较低帧率运行而看清楚,例如30帧时也能插帧,使渲染看清楚,也会弥补帧率低的屏幕问题。而且很多手机屏幕或vr镜片无法达到60或更高帧率,分辨率较低的显示屏会有“余辉”(Persistence)当你快速转动头部,旧画面没有立马消失,而眼前新画面也模糊不清。

在Gear VR(三星的一款虚拟现实穿戴设备)中,ATW是其重要组成部分,并
积累了宝贵的经验, 但是很不幸,经验表明,在PC机上ATW通过位置跟踪方法来解决虚拟现实系统抖动问题是有限的和有技术挑战的,就像Oculus Rift(虚拟现实眼镜)一样。在一些情况下,在虚拟现实中应用ATW后的效果和由跳帧引起的抖动效果一样糟糕。

 


 

3、 应用领域

实现ATW是有挑战性的,主要有两个原因:

1: 它需要GPU硬件支持合理的抢占粒度。
2: 它要求操作系统和驱动程序支持使GPU抢占。

让我们从抢占粒度开始,在90赫兹,帧之间的间隔大约是11ms(1/90),这意味着为了使ATW有机生成一帧,它必须能够抢占渲染线程并且运行 时间少于11ms,然而11ms实际上不够好,如果ATW在一帧时间区间内任意随机点开始运行,那么起潜伏期(执行和帧扫描之间的时间)也将随机, 我们 需要确保我们不跳跃任何游戏渲染的帧。

我们真的期望ATW运行一直非常的短,短到在视频卡产生新的一帧之前结束,刚好有足够的时间来完成中间帧的生成,缺少自定义的同步ATW中断例程,我们可以获得高优先级抢占粒度和调度, 在最长2ms或更少的时间内。

原来,对现在的图形卡和驱动实现来说,2ms抢占是一个艰巨的任务,虽然许多GPU支持有限的形式的抢占,但执行存在显著差异。

1: 一些显卡实现厂商和驱动程序允许抢占任一批处理或回执调用粒度,虽然有帮助,但不是十分完美(举一个极端的例子,一个复杂的并包含很多绘制指令着色器可以很容易在10ms完成)。
2: 其他显卡实现厂商和驱动程序允许抢占计算着色器, 但需要特定扩展来支持。

如果抢占操作不是很快,则ATW将无法抢在画面同步之前生成中间帧。 这样,最后一帧将会再显示,将导致抖动,这意味着一个正确的实现应该能够抢占和恢复任意渲染操作,和管线状态。 理论上讲,甚至三角抢占(triangle-granularity) 不够好,因为我们不知道一个复杂着色器执行将花多长时间。 我们正与GPU制造商来实现更好的抢占,但是在这之前确实要因为这个问题花费一定时间。

另外一方面是操作系统对抢占的支持,在Windows8之前,Windiows显示驱动模型(WDDM)支持使用“批处理队列”粒度的有限抢占,对于内奸的图形驱动程序,很不幸,图形驱动程序趋向于大批量渲染效率, 导致支持ATW太粗糙。

对于Windows8,改善了WDDM1.2支持更细的抢占粒度,然而,这些抢占模式不被图形驱动程序普遍支持,渲染管线将在 Windows 10 或 DirectX12中得到显著提升。 这为开发人员提供了较低级别的渲染控制,这是一个好消息, 但直到Windows10变 为主流之前,我们还是没有标准的方式来支持渲染抢占, 造成的结果是,ATW需要特定显卡驱动的扩展。

ATW是有用的,但不是万能的。一旦我们普遍实现了GPU渲染管线管理和任务抢占, ATW可能成为另一种工具来帮助开发人员提高性能和减少虚拟现实的抖动, 然而,由于我们这里 列出的挑战的问题,ATW不是万能的, VR的应用本身最好是维持较高的帧率,以提供最好的渲染质量。 最坏的情况,ATW生成的中间帧也可以导致用户有 不舒服的感受,换句话说,ATW无法根本解决这种不舒服。

根据生成中间帧的复杂性来说, ATW很显然表明, 甚至是位置时间扭曲, ATW不会成为一个完美的通用的解决方案,这意味着只有方向ATW和位 置ATW还算是可以的, 填充帧时偶尔会有跳跃。 为了产生一个舒适,令人信服的虚拟现实,开发人员仍然需要保持帧率在90赫兹。

试图支持传统显示器和VR双模式将会面临很大性能困难,这种巨大的性能要求是对引擎的伸缩性的考验,对于开发人员遇到的这种情况, ATW可能看起来很有吸引力, 如果达到90赫兹的频率,将使VR具有很好的舒适性,这是VR存在的真正魅力。


 

4、 VR解析

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

xuan

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的支持。

 


 

5、 难点局限

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

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

jietu

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

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

jie2

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

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

 


6、 参考资料

1、说说VR里的异步时间扭曲 实现ATW的方法​ 网易[引用日期2016-04-14]

2、小菜硬件杂谈 说说VR里的异步时间扭曲  网易[引用日期2016-04-14]

99VR视界二维码

相关文章

    404 Not Found

    404 Not Found


    nginx
在线客服