[技術] 目前三大VR設備使用的再投影技術簡介

作者: luyaoting (luyaoting)   2016-10-15 19:45:36
什麼是Reprojection(再投影)?
Reprojection是能夠降低延遲、避免暈眩的安全機制,HTC Vive、Oculus Rift、Playsta
tion VR等VR設備都有使用Reprojection。
Reprojection會應用在下面兩種情形:
A.VR設備先取得使用者頭部的位置,再交由電腦運算畫面,但電腦運算、資料處理需要一
段時間,畫面運算完成後使用者頭部已經移動到新的位置了。
B.電腦無法在時間內畫面將畫面運算完成(例如無法達到90FPS)。
遇到上述兩種情形時,如果透過Reprojection,便能夠校正畫面的位置,產生一張新的畫
面,更接近使用者新的位置。
其中最主要需要校正的項目包括使用者頭部轉動、頭部移動以及虛擬物體的移動(例如VR
世界中有一隻飛鳥)。
各家Reprojection的做法略有不同,以下會分開介紹。
HTC Vive + SteamVR , Interleaved Reprojection:
為了克服上述的情形A,Vive沒有使用Reprojection技術,而是動作預測。定位系統會預
測使用者在24.22ms後的位置,藉此克服電腦運算、資料處理造成的時間差。
當遇到情形B,SteamVR偵測到軟體跑不到90FPS(發生掉幀),SteamVR會讓軟體改成跑在
45FPS,再將這45張畫面經過Reprojection處理(稍微扭轉原本的畫面),產生新的45張
畫面。運算出的45張畫面跟校正後的45張畫面交錯顯示,如此便不會有暈眩的問題。
然而由於目前SteamVR的Interleaved Reprojection只校正頭部轉動,因此如果使用者移
動了頭部或是遇到移動中的虛擬物體,便會產生有誤差的畫面,正確的畫面和有誤差的畫
面交錯顯示,便會形成類似殘影的效果。
下圖左側是90FPS看起來的樣子,下圖右側則是45FPS+Interleaved Reprojection看起來
的樣子。
http://i.imgur.com/wZgy7WC.png
10/26更新:
SteamVR在10/26的Beta版更新中加入了Asynchronous Reprojection功能(目前版本只校
正頭部轉動,類似下方介紹的Asynchronous Timewarp),再過不久應該就會將此功能加
到正式版中。可以自行選擇是否開啟Asynchronous Reprojection、是否開啟
Interleaved Reprojection(兩者可以並存,也可以只開啟其中一種)。
https://goo.gl/MZEs8d
https://goo.gl/Fnojx1
更多相關資訊可以參考:
Advanced VR Rendering
https://goo.gl/svX8Jf
Advanced VR Rendering Performance
https://goo.gl/BIio9R
Oculus Rift + Oculus SDK , Asynchronous Timewarp + Asynchronous Spacewarp:
Oculus將他們使用的Reprojection技術稱為Timewarp和Spacewarp,而Asynchronous則是
表示Reprojection這個動作是獨立運行的,不受CPU、GPU正在進行的工作影響。
Oculus也有動作預測技術,配合上Asynchronous Timewarp,顯示的每一張畫面都會先經
過校正(只校正頭部轉動)。電腦如果在時間內處理完畫面,會先經過校正再顯示,電腦
如果來不及處理完,則會自動拿前一張舊畫面,經過校正再顯示。當遇到偶發性來不及處
理完畫面的情形,Asynchronous Timewarp能夠即時補上,使用者不易感覺到掉幀,是其
一大優點。
Asynchronous Spacewarp是和Asynchronous Timewarp互補,當Asynchronous Spacewarp
啟用時,會讓軟體跑在45FPS,並利用前兩張畫面預估使用者頭部、虛擬物體"未來"的動
向,對使用者頭部和虛擬物體的移動進行校正,補上不足的45張畫面。
Asynchronous Spacewarp不會有前述的殘影問題,但由於不可能用兩張舊畫面就100%準
確預測未來的動作,而且假設一顆球由A點移到B點,也不可能憑空得知原本在A點後面有
什麼東西,因此Asynchronous Spacewarp會造成移動的物體邊緣有一些變形的情形,但比
起只校正轉動造成殘影仍是好得多。
下面連結中的圖片可以看到Asynchronous Spacewarp造成移動中的藍色球邊緣變形(第1
、3、5張圖是電腦一般運算出來的,第2、4張圖是透過Asynchronous Spacewarp補上的,
圖片中殘影則是拍攝者相機造成的)
http://imgur.com/a/V6XeP
可以說目前Oculus使用的Reprojection技術是最進步的,造成的「副作用」也最少。
更多相關資訊可以參考:
The Latent Power of Prediction
https://goo.gl/1Rl9Ea
Asynchronous Timewarp on Oculus Rift
https://goo.gl/OmJT8E
Asynchronous Spacewarp
https://goo.gl/lBVjhi
Under the Hood of the Rift SDK Building for Touch
https://youtu.be/eAl2l_1KfqQ
Playstation VR , Asynchronous Reprojection:
有關Playstation VR使用的Reprojection技術的資料不多,只知道其頭戴顯示器螢幕支援
90Hz和120Hz的更新頻率,開發者可以選擇讓其軟體跑在90FPS、120FPS,或者是跑在60FP
S並透過Reprojection補上不足的60FPS。(但考量到PS4性能較弱,多數軟體可能會選擇6
0FPS+Reprojection。)
此外開發者也可以選擇是否要每一張畫面都經過Reprojection校正再顯示。
更多相關資訊可以參考:
Embrace Virtual Reality with PlayStation® VR
https://youtu.be/3RNbZpcfAhE
總的來說,Reprojection能夠有效地降低延遲、避免暈眩,但經過Reprojection產生的畫
面多少會有些「副作用」,提升硬體性能、軟體效率、畫面更新率仍舊是帶來流暢VR體驗
的最佳解!
作者: kuma660224 (kuma660224)   2016-10-15 20:03:00
之前的資料,Daydream也會有類似技術。
作者: nfsong (圖書館我來了)   2016-10-15 20:04:00
專業推 24.22ms感覺wireless 很困難阿
作者: luyaoting (luyaoting)   2016-10-15 20:10:00
不知道Vive的定位系統能夠有效預測到多久以後,能預測越久,就有越多時間來做無線傳輸
作者: akilight (OWeeeeeeeee~)   2016-10-15 20:21:00
不過Oculus其實也有說,ATW終究只是輔助手段,不是萬靈丹單純的轉動沒問題,但是最麻煩的還是位移處理在一些情形下,ATW處理位移補差造成的judder會被使用者注意到,就會失去減少暈眩的效果而在最壞的情形中反而會增加使用者的暈眩,所以他們建議開發者還是盡量不要依賴這個效果,盡量讓畫面能達到原生90FPS,ATW當作偶爾掉格時的應急手段就好不過最新的ASW看起來有大幅改善ATW在位移處理上的短處似乎還滿不錯的至於PSVR,之前看到的一些資訊是只有類似ATW的處理沒有ASW,所以在某些情形下會出現一些artifacts
作者: luyaoting (luyaoting)   2016-10-15 20:48:00
PSVR看國外體驗心得,有些人有提到快速移動的物體有殘影,感覺是比較像ATW
作者: SULAjardin (愛與勇氣比基尼戰士)   2016-10-15 21:07:00
1080玩Onward, Reprojection直接關掉(原始設定on), 否則只能超級取樣1.0, 還要把遊戲內畫質降為low ...聽教我的老外說, 每次SteamVR更新都要去關一次,SteamVR更新完常會又把Reprojection打開...
作者: luyaoting (luyaoting)   2016-10-15 21:21:00
SteamVR的Interleaved Reprojection是比較單純的安全機制,能跑到90FPS的話不會作用。我沒玩Onward,你可以照我前一篇文的方式,分別在允許/不允許再投影的情況下檢查看看CPU、GPU負載。
作者: ashinet (米克)   2016-10-16 00:57:00
好文,的確daydream也有動手腳
作者: SULAjardin (愛與勇氣比基尼戰士)   2016-10-16 01:31:00
謝謝, 剛依照你教的方法執行, 發現多人駁火時, CPU會像針刺一樣超過11.11ms ,GPU一直都在安全範圍內.把Reprojection又打開了, 當初為了最佳化Onward效果,同時嘗試了許多步驟有成, 現在想想, 關Reprojection或許是不必要DER, 非常感謝
作者: abc2090614 (casperxdd)   2016-10-16 03:10:00
啟動onward時按住alt把電腦螢幕的視窗拉小可以改善很多掉禎的問題 這算是Unity遊戲的問題
作者: SULAjardin (愛與勇氣比基尼戰士)   2016-10-16 13:40:00
我是把電腦桌面的Onward遊戲畫面最小化,當初抓超採和顯卡風扇轉速&溫度時, 發現這樣可以降GPU溫度5~10度.
作者: zebb   2016-10-17 09:04:00
推好文!
作者: yannicklatte (Brandy)   2016-10-18 19:55:00
作者: giintaipei   2016-10-20 18:53:00
好清楚呀!! 推

Links booklink

Contact Us: admin [ a t ] ucptt.com