对于延迟,不同的人有着不同的衡量方法。例如,从按下按钮到解码器予以识别的时间;从系统渲染一阵到屏幕进行显示的时间等等。Oculus的测量方法则是,从游戏逻辑采样预测追踪到利用这一游戏状态渲染的一帧呈现在屏幕中的时间。
对于传统的游戏帧,一开始都是采样输入,执行所有逻辑更新,将所有对象渲染到帧;然后,用前置缓存交换后置缓存,从而在屏幕显示全新的一阵。对于为传统显示器设计的游戏,它们可能会尝试维持稳定的帧速率,如30fps或60fps。但丢失的一帧通常会被忽略,因为游戏中的camera位置和旋转与真实世界的显示器位置和旋转隔离。对于VR,丢帧会对用户的舒适度产生严重影响,因为只要渲染世界与现实世界不匹配,沉浸幻觉就会被打破。所以,Oculus提供了一个名为异步时间扭曲(Asynchronous TimeWarp)的系统,利用最近渲染的一帧,并在屏幕显示之前对其进行修改,从而令眼睛视图尽可能接近相应的真实世界方向。
这意味着Oculus的渲染管道存在略微的不同。帧更新循环的第一部分仍然相同:查询输入,更新游戏逻辑,然后渲染场景。但接下来,系统不再是交换缓存,而是在渲染时将帧,以及视图姿态提交给异步时间扭曲,这样系统就可以在最后一刻进行修改以匹配更新的视图姿态。时间扭曲的巧妙之处在于丢帧发生时的情形。时间扭曲并不只是将显示器锁定在最后渲染的内容,它会利用前一帧,但执行与更新视图姿态相同的逻辑,这样即便世界的时间状态已经发生改变,你的视图都能匹配真实世界。
1. VSync & Virtual VSync
垂直同步(VSyncl;Vertical Sync)又可以称为“帧同步(Frame Sync)。这种系统已经出现多年时间,而游戏引擎主要是用它来匹配物理显示器的刷新率。对于VR,由于显示器的实际绘制交给了异步时间扭曲,所以它同时负责VSync。每一阵都需要固定的时间量,所以如果从这一点开始计算,我们可以定义所谓的Virtual VSync(V-VSync),亦即所有游戏处理都可以围绕它进行。