對于延遲,不同的人有著不同的衡量方法。例如,從按下按鈕到解碼器予以識別的時間;從系統渲染一陣到屏幕進行顯示的時間等等。Oculus的測量方法則是,從游戲邏輯采樣預測追蹤到利用這一游戲狀態渲染的一幀呈現在屏幕中的時間。
對于傳統的游戲幀,一開始都是采樣輸入,執行所有邏輯更新,將所有對象渲染到幀;然后,用前置緩存交換后置緩存,從而在屏幕顯示全新的一陣。對于為傳統顯示器設計的游戲,它們可能會嘗試維持穩定的幀速率,如30fps或60fps。但丟失的一幀通常會被忽略,因為游戲中的camera位置和旋轉與真實世界的顯示器位置和旋轉隔離。對于VR,丟幀會對用戶的舒適度產生嚴重影響,因為只要渲染世界與現實世界不匹配,沉浸幻覺就會被打破。所以,Oculus提供了一個名為異步時間扭曲(Asynchronous TimeWarp)的系統,利用最近渲染的一幀,并在屏幕顯示之前對其進行修改,從而令眼睛視圖盡可能接近相應的真實世界方向。
這意味著Oculus的渲染管道存在略微的不同。幀更新循環的第一部分仍然相同:查詢輸入,更新游戲邏輯,然后渲染場景。但接下來,系統不再是交換緩存,而是在渲染時將幀,以及視圖姿態提交給異步時間扭曲,這樣系統就可以在最后一刻進行修改以匹配更新的視圖姿態。時間扭曲的巧妙之處在于丟幀發生時的情形。時間扭曲并不只是將顯示器鎖定在最后渲染的內容,它會利用前一幀,但執行與更新視圖姿態相同的邏輯,這樣即便世界的時間狀態已經發生改變,你的視圖都能匹配真實世界。
1. VSync & Virtual VSync
垂直同步(VSyncl;Vertical Sync)又可以稱為“幀同步(Frame Sync)。這種系統已經出現多年時間,而游戲引擎主要是用它來匹配物理顯示器的刷新率。對于VR,由于顯示器的實際繪制交給了異步時間扭曲,所以它同時負責VSync。每一陣都需要固定的時間量,所以如果從這一點開始計算,我們可以定義所謂的Virtual VSync(V-VSync),亦即所有游戲處理都可以圍繞它進行。