ATW异步时间扭曲功能已加入Oculus Rift

ATW异步时间扭曲功能已加入Oculus Rift,在上周的GDC大会上Oculus VR就宣布其将把ATW这一功能添加到他的Rift虚拟现实头戴设备上。今天的博文也随后确定了Oculus PC SDK 1.3将应用这一新特性。

异步时间扭曲技术让人瞩目的地方在于,很多开发商都认为他能够让VR游戏和体验不再让用户感到那么晕眩恶心。

很久之前Oculus就把ATW应用在他的移动SDK中,Oculus的董事John Carmack早在2014年就和Gamasutra说过公司正在将其所学到的经验运用到他的PC SDK中。现在看来他们已经做到了。

如果你对这项技术还不是很熟悉,你可以去读一下之前提到的那篇博文,里面有关于ATW运作的详细解释。但是对于外行来说,这项技术只是把画面帧数更新到了60帧,然后让屏幕上的画面随着你的头部转动而转动,即使游戏性能降到了60帧以下也是一样。

Oculus还说到devs不用采取任何行动来让ATW运转,一旦ATW投入使用,他会自行运转,不过暂时只能在WINDOWS平台上运行。

对于ATW小编还是有点不理解,下面一起来看看进阶介绍:

时间扭曲(Timewarp),异步时间扭曲(Asynchronous Timewarp),和抖动(Judder)的概念:

时间扭曲是一种图像帧修正的技术,在使用虚拟现实眼睛设备时,由于头部运动过快,而造场景渲染的延迟,即头已经转过去了,但是图像还没有渲染出来,或者渲染的是上一帧的图像, 时间扭曲它通过扭曲一副被送往显示器之前图像,来解决这个延迟问题。 最基础的时间扭曲是基于方向的扭曲,这种只纠正了头部的转动变化姿势,这种扭曲对于2D图像是有优势的,它合并一副变形图像不需要花费太多系统资源。对于复杂的场景,它可以用较少的计算生成一个新的图像帧。

异步时间扭曲是指在一个线程(称为ATW线程)中进行处理,这个线程和渲染线程平行运行(异步),在每次同步之前,ATW线程根据渲染线程的最后一帧生成一个新的帧。

抖动和其具体细节在迈克尔·亚伯拉什的一篇文章中有详细介绍(参见我翻译的Ramblings in Value Time.)

在虚拟现实设备中,为了正确在虚拟世界里呈现一个人们的感知,必须要在显示器上的定时更新图像,然而,如果渲染时间太长,一帧就会丢失了,产生的结果就是抖动,这是由于新的一帧图像还没有被渲染出来,显示器显示了上一帧的图像,如果一帧图像被两次渲染就会产生下面结果,如图:
这里,眼睛转向左侧,这时图像又被渲染一次,图像落在视网膜的不同部分,导致双影抖动。
当然,双影并不是唯一的结果,如果同样的帧显示三次,就会产生三重影,以此类推。

基于方向的时间扭曲可以解决上午位置重影抖动问题,如果游戏渲染帧没有和头部运动达成同步, 时间扭曲可以介入并产生一个图像替代还没有被渲染出来的帧。 自从最后一帧被渲染,通过扭曲最后一帧来反馈头部运动, 所以相比原始的帧加入ATW显示会减少抖动,如果不加ATW不知道会发生什么事情。

在某些情况下,简单的渲染扭曲处理可以工作的很好,这种技术已经在Gear VR 中实现了,当游戏不能满足帧率的时候ATW就会自动填充帧,这使得帧很平滑,但有许多细不太明显的小瑕疵,因为 GearVR 缺乏位置跟踪,并且避开了近场对象。下面将讨论的许多瑕疵应该怎样减少或避免。

这也就是说,为什么说相比ATW在Gear VR而言,ATW在PC是更有意义和更有挑战性的,让我从Oculus Rift’s 所支持的位置跟踪开始探讨。