一种生成中间帧技术,异步时间扭曲(Asynchronous Timewarp)

翻译:https://www.oculus.com/blog/asynchronous-timewarp/

异步时间扭曲(AsynchronousTimewarp时间扭曲,即调整时长)调查

关于作者:

在这篇博客中,我们分析了这些限制和导致特殊困难的原因,您将看到,ATW有时是有用的,但是还不能让虚拟现实引擎满帧运行,没有达到完美体验的程度。

的一篇文章中有详细介绍(参见我翻译的RamblingsinValueTime.)

在虚拟现实设备中,为了正确在虚拟世界里呈现一个人们的感知,必须要在显示器上的定时更新图像,然而,如果渲染时间太长,一帧就会丢失了,产生的结果就是抖动,这是由于新的一帧图像还没有被渲染出来,显示器显示了上一帧的图像,如果一帧图像被两次渲染就会产生下面结果,如图:

这里,眼睛转向左侧,这时图像又被渲染一次,图像落在视网膜的不同部分,导致双影抖动。

当然,双影并不是唯一的结果,如果同样的帧显示三次,就会产生三重影,以此类推。

’s所支持的位置跟踪开始探讨。

位置抖动(PositionalJudder):

近场对象多重抖动的图像示例。

那么,这种影响有多严重?

这个颤抖的程度取决于玩家的运动方式,如果你保持你的头部相对静止并且只看风景,这种颤动将并不显著,可以忽略不计。

如果看远处物体,头部运动不太可能引起明显抖动。在这种情况下。ATW可以使你自由的看中远处场景,并且没有明显的抖动。

位置扭曲(PositionalTimewarp):

运动的物体和动画:

这个伪影表现为这些移动的物体,即抖动的多幅图像。

场景中移动物体产生的抖动效果。

镜面反射:

计算镜面反射需考虑眼睛的方向,或摄像机的方向,,由此生成一个图片。

由于眼睛或头部运动,镜面反射不再是正确的,这可能导致镜面反射抖动。

像镜面高光和反射依赖于眼睛位置一样,还有许多其他依赖于眼睛位置的着色技巧也有类似的问题,例如,视差贴图和浮雕纹理映射将有类似的效果。

实现:

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

1:它需要GPU硬件支持合理的抢占粒度。

2:它要求操作系统和驱动程序支持使GPU抢占。

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

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

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

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

2:其他显卡实现厂商和驱动程序允许抢占计算着色器,但需要特定扩展来支持。

放弃那些不愿放弃的,容忍那些不可容忍的。

一种生成中间帧技术,异步时间扭曲(Asynchronous Timewarp)

相关文章:

你感兴趣的文章:

标签云: