LV. 33
GP 1k

【討論】目前三大VR設備使用的Reprojection(再投影)技術簡介

樓主 luyaoting luyaoting
什麼是Reprojection(再投影)?

Reprojection是能夠降低延遲、避免暈眩的安全機制,HTC Vive、Oculus Rift、Playstation 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看起來
的樣子。



更多相關資訊可以參考:


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補上的,圖片中殘影則是拍攝者相機造成的)

可以說目前Oculus使用的Reprojection技術是最進步的,造成的「副作用」也最少。

更多相關資訊可以參考:


Playstation VR , Asynchronous Reprojection

有關Playstation VR使用的Reprojection技術的資料不多,只知道其頭戴顯示器螢幕支援90Hz和120Hz的更新頻率,開發者可以選擇讓其軟體跑在90FPS、120FPS,或者是跑在60FPS並透過Reprojection補上不足的60FPS。(但考量到PS4性能較弱,多數軟體可能會選擇60FPS+Reprojection。)
此外開發者也可以選擇是否要每一張畫面都經過Reprojection校正再顯示。

更多相關資訊可以參考:

==================================================

總的來說,Reprojection能夠有效地降低延遲、避免暈眩,但經過Reprojection產生的畫面多少會有些「副作用」,提升硬體性能、軟體效率、畫面更新率仍舊是帶來流暢VR體驗的最佳解!

板務人員: