虛擬現實頭盔的刷新率和延遲什麼關係,是刷新率越高延遲越低么?
提升刷新率的確對延遲優化有幫助, 但延遲不僅僅與刷新率有關係. 轉一篇我的博文當答案吧: http://blog.csdn.net/xoyojank/article/details/50667507
VR中的」延遲」, 特指」Motion-To-Photon Latency」, 指的是從用戶運動開始到相應畫面顯示到屏幕上所花的時間.
- 感測器採集運動輸入數據
- 採集到的數據進行過濾並通過線纜傳輸到主機
- 遊戲引擎根據獲取的輸入數據更新邏輯和渲染視口
- 提交到驅動並由驅動發送到顯卡進行渲染
- 把渲染的結果提交到屏幕, 像素進行顏色的切換
- 用戶在屏幕上看到相應的畫面
當然, 實際上還有很多細節問題, 比如屏幕上的像素並不是同一時間切換的, 可能面上面的那行先切換, 再一行行更新到最下面的, 在這裡就不糾結這些細節了.
這其中的每一個步驟都會產生一定的延遲, 而目前公認的大眾能接受的延遲是20ms以下, 這基本上可以做為衡量一個VR頭顯是不是合格的一個標準. 雖然20ms是非常短的時間, 但通過努力還是可以達到的, 主要有這麼幾個思路:
硬體層面的優化- 提升感測器的採樣頻率, 減少刷新率與感測器頻率的同步等待時間消耗
- 提升感測器的精度, 減少對採樣數據進行穩定性過濾產生的延遲
- 採用有線傳輸也有一部分原因是出於延遲的考慮
- 屏幕使用OLED替代LCD, 減少像素顏色切換的時間
- 提升屏幕刷新率, 主流的屏幕是60Hz, 那每幀就是16.67ms; 如果提升到90Hz, 那每幀就是11.11ms
大部分的手機VR產品在延遲上都是不合格的, 最明顯的表現就是轉頭時的畫面不連續/抖動/殘影等:
- 市面上的手機採用OLED屏的還是少數, 比如iPhone配個VR殼子那延遲就很感人
- 如果依賴手機的陀螺儀進行轉向模擬, 其精度和頻率遠遠達不到要求
- 手機屏幕目前都是60Hz的刷新率, 在延遲上本身就受限
刷新率的提升
假設刷新率為60Hz, 並不是代表每幀就有16.67ms的延遲, 而是說屏幕圖像每16.67ms才更新一次, 渲染選項中的」垂直同步」的概念就是來源於此. 這就對我們提交渲染畫面的時機要求非常高, 如下圖:
為了方便計算, 這裡先假設感測器, 傳輸, 屏幕像素切換的延遲都為0
- 假設我們在每幀開始的時候(上一次垂直同步結束)採樣一次感測器數據, 在垂直同步之前完成提交, 那延遲就是16.67ms
- 如果當前幀無法在16.67ms內完成渲染, 比如花了17ms, 那麼就會拖到下一幀進行提交, 屏幕上顯示的畫面就還是上一次的圖像, 這時候的延遲就變成了16.67*2=33.33ms
這就對VR的渲染提出了非常高的要求:
- FPS必須達到刷新率的要求, 90Hz就是90Hz, 80FPS是不行的, 會被垂直同步拖累成45FPS
- FPS必須保證穩定, 偶爾掉一兩幀在VR中的感覺非常明顯, 可能某個物體的位置已經差了幾十個像素了
以Oculus Rift(消費版)為例, 1080x1200x2的屏幕解析度, 90Hz的刷新率, 再加上因為變形所需要的UpSampling, 實際的渲染畫面就是3024x1680@90Hz, 這性能壓力幾乎與4k@60Hz相當. 所以, 單純的提升刷新率和解析度, 目前來說渲染能力還是跟不上. 不過既然有了性能需求, 硬體廠商才有前進動力, 對整個行業生態來說, 是件好事.
引擎層面的優化除了拚命優化降低每幀畫面的渲染時間外, 引擎層面還可以通過一些策略進行優化, 關鍵的思路就是: 能不能把採樣感測器數據的時間點盡量延後, 讓它與垂直同步的時間點盡量靠近?
這裡我們仍然假設60Hz, 每幀時間16.67ms(約17ms), 忽略硬體延遲
如果在遊戲邏輯過程中(1ms時)採樣感測器數據, 那延遲大約就是16ms這就是Timewarp的主要思想, 我們來看看它是怎麼實現的Timewarp
了解過延遲渲染的人應該都知道, 我們可以利用ZBuffer的深度數據, 逆向推導出屏幕上每個像素的世界坐標
這就意味著, 我們可以把所有像素變換到世界空間, 再根據新的攝像機位置, 重新計算每個像素的屏幕坐標, 生成一幅新的圖像: 可以看到之前被遮擋區域的像素是缺失的, 因為我們的攝像機位置變化了. 那如果攝像機位置不變, 僅僅是朝向變了呢? 這樣就不存在像素可見性的變化了:假設垂直同步時, 當前幀還沒有渲染完畢, 這時如果要進行Timewarp的話, 就需要驅動提供一種高優先順序的非同步調用, 這就是非同步Timewarp的由來: Timewarp操作與場景渲染並行執行, 如果沒有新的渲染畫面, 就繼續使用上一幀的畫面進行Timewarp.
- 必須是Fermi, Kepler, Maxwell(或更新)核心的GPU
- GPU是以DrawCall為單位調度的, 所以耗時太長的DrawCall是插入不了Timewarp繪製操作的
- 需要最新的Oculus和NVIDIA驅動支持
非同步Timewarp並不是說FPS低於標準還能流暢跑, 這只是一種補救措施, 所以優化仍然要好好做-_-
驅動方面還有一些其它的優化空間, 比如強制提交渲染隊列:
如果驅動中緩存了3幀, 那延遲優化就白做了…另外就是大家耳熟能詳的Back Buffer(Double Buffer Rendering), 其實也會增加一點延遲, 不如省掉這一步, 即Front Buffer Rendering, 或者叫Direct Mode:
參考資料What is Motion-To-Photon Latency?
Optimizing VR Graphics with Late LatchingVR Direct: How NVIDIA Technology is Improving the VR ExperienceVirtual Reality with AMD LiquidVR? Technology
Lessons from Integrating the Oculus Rift into Unreal Engine 4Oculus Rift - How Does Time Warping Work?Asynchronous Timewarp Examined幀間延遲指頭部轉動經過的畫面中每一幀之間的處理與顯示時間。研究表明,頭動和視野的延遲不能超過20ms,否則會有很明顯的拖影感。而幀內延遲是指人頭轉的時候,構成畫面幀的像素點在每一幀結束時會跳回原點,這時候,人眼的視覺暫留現象會保留上一幀和這一幀的圖像,產生拖影現象。假如刷新率為60Hz,單眼960×1080的屏幕解析度,幀內延遲在頭轉速度120度/秒前提下為19像素,意味著頭顯顯示畫面將非常模糊。
國內外VR廠商也在致力於解決延遲導致的拖影、模糊問題。目前最可能實現的辦法有兩個,一、提高刷新率。當畫面更加連續切換的時候,視覺系統會持續接收信息,如果刷新率足夠高,人會徹底分辨不出現實與虛擬;二、降低餘暉。這個辦法涉及到屏幕材質,LCD屏因採用背光原理,通過額外光源投射產生圖像,涉及到一個響應時間,所以無法做到低餘暉。而OLED屏屬於主動發光顯示屏,每個像素都發光,節省了相應步驟,完全可以實現低餘暉。而低餘暉對於降低延遲率有非常大的作用。低餘暉的前提下,頭動時物體的軌跡更加接近於物理世界的真是軌跡。同樣假定60Hz的刷新率,一幀內屏幕發光2ms,單眼960×1080的屏幕解析度,幀內延遲在頭轉速度120度/秒前提下為2像素,基本不會有眩暈感[2]
[1]
手機刷新率是60,天然自帶16.6毫秒的延遲,也就是優化空間為3.4毫秒……如果75的話,應該是11點多,具體數據記不住,因為沒手機刷新率75……記也沒用所以,曾經國內很多做VR眼鏡盒子的公司號稱延遲10左右……都是騙子
延遲是指頭部動作到實際畫面改變的時間,即期望視野改變到實際生成視野改變的時間。
足夠的屏幕刷新率是降低延遲的一個必要條件,但如果畫面本身的幀率不夠,延遲也不能避免。幀率不夠造成的延遲不必用 VR 也能體驗到,30 FPS 畫面拖慢就是這個延遲,但 VR 所要求的幀率比普通屏幕也要更高一些。
如,最常見的是 60 Hz 屏幕搭配 60 FPS 畫面。 120 Hz 的屏幕上如果還是 60 FPS 畫面,就浪費了 60 Hz 的刷新率。要搭配 120 FPS 的畫面,才真正降低了延遲。推薦閱讀:
※請問在虛擬現實這個方向上,目前人類最前沿的機構研究和開發走到哪一步了?中國呢?
※阻礙VR/AR發展的瓶頸有哪些?
※參加12月18日HTC Vive發布會是怎樣的一種體驗?
※vr虛擬現實的使用感受如何?
※關於如何消除VR設備的給用戶帶來的眩暈感?