Oculus详述『延迟』问题及对应『帧渲染』解决方案

2019-04-22 15:12:00 映维网 分享

蚂蚁手打 www.zhujifang.net 对于延迟,不同的人有着不同的衡量方法。例如,从按下按钮到解码器予以识别的时间;从系统渲染一阵到屏幕进行显示的时间等等。Oculus的测量方法则是,从游戏逻辑采样预测追踪到利用这一游戏状态渲染的一帧呈现在屏幕中的时间。

对于传统的游戏帧,一开始都是采样输入,执行所有逻辑更新,将所有对象渲染到??;然后,用前置缓存交换后置缓存,从而在屏幕显示全新的一阵。对于为传统显示器设计的游戏,它们可能会尝试维持稳定的帧速率,如30fps或60fps。但丢失的一帧通?;岜缓雎?,因为游戏中的camera位置和旋转与真实世界的显示器位置和旋转隔离。对于VR,丢帧会对用户的舒适度产生严重影响,因为只要渲染世界与现实世界不匹配,沉浸幻觉就会被打破。所以,Oculus提供了一个名为异步时间扭曲(Asynchronous TimeWarp)的系统,利用最近渲染的一帧,并在屏幕显示之前对其进行修改,从而令眼睛视图尽可能接近相应的真实世界方向。

这意味着Oculus的渲染管道存在略微的不同。帧更新循环的第一部分仍然相同:查询输入,更新游戏逻辑,然后渲染场景。但接下来,系统不再是交换缓存,而是在渲染时将帧,以及视图姿态提交给异步时间扭曲,这样系统就可以在最后一刻进行修改以匹配更新的视图姿态。时间扭曲的巧妙之处在于丢帧发生时的情形。时间扭曲并不只是将显示器锁定在最后渲染的内容,它会利用前一帧,但执行与更新视图姿态相同的逻辑,这样即便世界的时间状态已经发生改变,你的视图都能匹配真实世界。

1. VSync & Virtual VSync

垂直同步(VSyncl;Vertical Sync)又可以称为“帧同步(Frame Sync)。这种系统已经出现多年时间,而游戏引擎主要是用它来匹配物理显示器的刷新率。对于VR,由于显示器的实际绘制交给了异步时间扭曲,所以它同时负责VSync。每一阵都需要固定的时间量,所以如果从这一点开始计算,我们可以定义所谓的Virtual VSync(V-VSync),亦即所有游戏处理都可以围绕它进行。

请参阅上面的时间表,它暂时忽略了游戏过程。你可以看到,对于每一帧时间扭曲都需要少量的CPU时间,然后在运行VSync时需要一段GPU时间。因此,在运行V-VSync时游戏必须确保帧可供使用,以便时间扭曲能够处理它们。这当然只是一个简化的模型,目的是为了介绍时间扭曲所需的处理。

2. Simplest Game Loop

最简单的游戏循环都有一个执行游戏逻辑的CPU线程:将渲染命令发送到GPU,然后调用SubmitFrame,亦即等待下一个V-VSync。类似下图:

如你所见,游戏逻辑和渲染发生在一帧长度之内,而且时间扭曲能够立即使用渲染帧。从游戏角度来看,这将涉及最低的延迟。如果你的GPU没有及时完成渲染,时间扭曲将不得不使用最后一帧,并导致渲染帧被丢弃。因为下一帧的CPU工作可以在当前帧的GPU工作仍在运行时运行,所以最终你可能是以全帧速率运行,但会出现多个过时帧。因此,与实际帧速率相比,过时帧的数量是更重要的监控度量。

更糟糕的事情是,GPU渲染时间超过下一个V-VSync。前一帧需要重复使用两次,而下一帧的SubmitFrame调用会被阻止,直至当前帧完成渲染。这为GPU赶上CPU提供了时间,但同时意味当N+1帧最终显示时,这将出现一整帧的延迟。

事实证明,在一个VSync的正常范围内执行全帧渲染是非常难以实现的目标,因为CPU时间、GPU时间加起来需要不到一?。ㄈ?2hz时是13.89ms,60Hz时是16.67ms)。实际上,几乎每款游戏都需要更多的时间。因此,Oculus API支持一种名为“Extra Latency Mode(额外延迟模式)”的功能。额外延迟模式令错过这一小窗口变成预期的行为,并始终使用为前一帧提交的帧。所述模式的图例如下所示:

这样做的最大优势是,你可以为CPU和GPU利用完整一帧,所以你可以接近于实现100%的利用率。当然,缺点是丢失一帧延迟。Oculus认为,这样的权衡折中非常值得,乃至于Unity或Unreal 4都默认开启额外延迟模式.

如果一切都按时运行,结果当然是显而易见,但如果CPU或GPU需要更长的时间才能完整帧的渲染呢?实际上,GPU的情况与这样一种情况非常类似:当一帧需要两个以上的V-VSyncs完成渲染时,额外延迟模式没有启用。迟到的一帧将导致下一帧的SubmitFrame调用被阻止。正如在关闭额外延迟模式时的情况一样,当回到预期的帧周期时,你将呈现至少3个高延迟?。ㄇ耙桓鲋馗粗?,当前帧和下一?。?。所以,避免GPU运行过长时间对游戏的流畅度而言至关重要。

CPU的情况没有那么多问题。在启用额外延迟模式时,在V-Vsync返回后立即调用SubmitFrame(假设前一帧已经准备就绪)。例如:

声明:本站部分资源来源于网络,版权归原作者或者来源机构所有,如作者或来源机构不同意本站转载采用,请通知我们,我们将第一时间删除内容。本站刊载文章出于传递更多信息之目的,所刊文章观点仅代表作者本人观点,并不意味着本站赞同作者观点或证实其描述,其原创性及对文章内容的真实性、完整性、及时性本站亦不作任何保证或承诺,请读者仅作参考。
编辑:小青
南宁代孕 | 无锡代孕 | 武汉途欣悦关门了吗 | 沈阳代孕 | 美国代孕 | 无锡 代孕 | 广州代孕 | 广州代孕 | 广州代孕 | 动漫第一站网 | 双子宝贝代怀孕公司 | 历史后宫网 | 深圳助孕网 | 东阳新闻资讯网 |
  • 中华人民共和国香港特别行政区基本法
  • 国社@四川|我国自主研制的第100架“翼龙”无人机交付
  • “建国以来中国共产党关于‘三农’问题的理论与实践研究”最终成果简介
  • 2018中国生态四项公开赛在江苏宿迁开幕
  • 专家呼吁:博物馆夜场整体开放!
  • 萧玉田代表:成人教育是艺术教育的一个重要内容
  • 建材等周期性行业率先发力 三维度解密116只强势股机会
  • 江苏盐城“80后”生意人14张彩票斩获大乐透1.2亿元
  • 男子洗冷水澡丧命|心肌梗死|冷水澡|休克
  • 丹阳税务“融合清单”晒出新机构的大作为
  • 输液时空气进入血管危险吗?听听专家怎么说
  • “崔掌柜”的京味儿书局
  • 呛赖清德是假选 谢龙介以500份鸡排赌“蔡赖配”
  • 新春走基层:春运期间多条航线开通
  • 国社@四川|多国考古学家成都共论古代文明“朋友圈”