优质服务商推荐更多服务商>

VR领域常谈的异步时间扭曲技术到底是什么?

4553

相信对于玩过CS的人来说,Valve并不陌生,他于去年推出一个全新的SteamVR beta版来回应Oculus的“异步时间扭曲”技术。说到这,可能很多朋友对Oculus的ATW异步时间扭曲技术感到陌生,但如果你经常听国内一些技术流的VR创业公司的演讲,那么你对“异步时间扭曲”这个词肯定不会陌生。例如自称国内第一家掌握ATW技术的焰火工坊,在他们的第一次发布会上CTO王明杨就提到了这项技术。当时他尝试了进行解释,但后来放弃了,只说“你们知道这很牛逼就行了”。此后CEO娄池也在各种场合提起ATW,包括微信朋友圈。另外一家公司乐相也是。

 VR领域常谈的异步时间扭曲技术到底是什么?_设计制作_测量仪表

焰火工坊CEO娄池和乐相CEO陈朝阳的朋友圈

ATW到底牛逼在哪?

异步时间扭曲英文是Asynchronous  TI mewarp,简称ATW。简单来说,这是一种生成中间帧的技术。当游戏画面无法保持足够的帧率时,它能产生中间帧进行弥补,从而维持较高的画面刷新率。这项技术的提出者John Carmack目前是Oculus的CTO。

在采访中,王明杨解释ATW,他是这样说的:

正常情况下,我们的手机大部分是60hz刷新,也就是说,在理想情况下我们的手机大概要处理有60帧/秒。那么,从数据到渲染就有 1000 /60 ~= 16.6666ms的时延。

那么,如何抵消这个时延呢?卡马克(John Carmack)提出一种方法,通过大量采集陀螺仪数据,在样本足够多的情况下,就可以预测出16.66ms后你头部应有的旋转和位置,按照这个预测的数据来渲染,他管这个技术叫  TI mewarp。

然而问题又来了,一般VR场景很复杂,我们很难保证每次都在16.66ms内完成一次渲染,也就是我们很难保证每个应用都是60fps。那么卡神又提出一个ATW,就是异步的  TI mewarp。

他把VR应用的渲染管线设计成两个线程,渲染线程(生产者)和  TI mewarp线程(消费者),两者异步工作,生产者生产足够多的Framebuffer,消费者把生产者生产的东西做Timewarp之后贴在屏幕上。也就是说,无论你当前游戏的fps是多少,Timewarp始终被设计成保持在60fps(视刷新率而定)。

这就是ATW的核心细节,把Timewarp和产生Framebuffer分离,用高刷新率的Timewarp来换取低时延。

ATW技术在VR中应用的先驱是Oculus,早在两年多以前他们就在Gear VR上应用了这项技术,直到去年3月25日宣布在PC端的SDK上加入ATW的支持。

具体怎么做?

 VR领域常谈的异步时间扭曲技术到底是什么?_设计制作_测量仪表

图片来源:Oculus博客(下同)

Oculus在博客里对ATW做了详细的解释。如上图所示,GPU给左右眼的画面分别进行渲染,然后在画面显示出来之前插入一个ATW的处理过程。在左边这帧的处理中,画面渲染及时完成,此时直接显示就行了;中间的第二帧渲染未能及时完成,此时如果什么都不做就会出现画面抖动,而有了ATW的话,它会将前面一帧调用出来重新显示,同时加上头盔运动变化,从而保持帧率。

这技术很难吗?

据王明杨表示,ATW技术很简单,核心代码仅5行。但如果要达到最好的效果,还需要以下几点:

1. GPU必须支持抢占式上下文(GPU preemption)。这个还好,大部分Mobile GPU都支持,但是桌面GPU大部分还不支持;

2. 系统最好支持主表面写入,这个跟GPU有一定关系,但是跟操作系统关系比较大;

3. GPU必须有较高的性能,这个很好理解,Timewarp线程实际上加重了渲染负担。

Oculus先在Gear VR上实现ATW,原因就是上面的第1点。他们将ATW带到PC平台上,是在微软、英伟达和AMD支持的情况下实现的。英伟达开发了VRWorks,AMD则有Liquid VR。

国内厂商中,乐相陈朝阳表示ARM对大朋VR提供了Front Buffer和Context Priority的支持,用以在移动VR上实现ATW。

没有定制硬件的焰火工坊则在Oculus的基础上修改了一部分Timewarp的实现。“我们在渲染线程那里会监控Timewarp线程的工作情况,动态的平衡GPU附载,保证Timewarp线程工作在比较高的帧率下。”王明杨说。

特别声明:本文仅供交流学习 , 版权归属原作者,并不代表蚂蚜网赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。

相关推荐: