看板 VR 關於我們 聯絡資訊
什麼是Reprojection(再投影)? Reprojection是能夠降低延遲、避免暈眩的安全機制,HTC Vive、Oculus Rift、Playstation VR等VR設備都有使用Reprojection。 Reprojection會應用在下面兩種情形: A.VR設備先取得使用者頭部的位置,再交由電腦運算畫面,但電腦運算、資料處理需要一段時間,畫面運算完成後使用者頭部已經移動到新的位置了。 B.電腦無法在時間內畫面將畫面運算完成(例如無法達到90FPS)。 遇到上述兩種情形時,如果透過Reprojection,便能夠校正畫面的位置,產生一張新的畫面,更接近使用者新的位置。 其中最主要需要校正的項目包括使用者頭部轉動、頭部移動以及虛擬物體的移動(例如VR世界中有一隻飛鳥)。 各家Reprojection的做法略有不同,以下會分開介紹。 HTC Vive + SteamVR , Asynchronous Reprojection(ASR) + Interleaved Reprojection 11/16更新:SteamVR在此次更新中加入了Asynchronous Reprojection功能,目前版本僅校正頭部轉動,類似下方介紹Oculus的Asynchronous Timewarp。可以自行選擇是否開啟Asynchronous Reprojection、是否開啟Interleaved Reprojection(預設是兩種都開啟)。 https://goo.gl/BMtiJk HTC Vive的定位系統會預測使用者在24.22ms後的位置,藉此克服電腦運算、資料處理造成的時間差,以減輕上述情形A造成的影響。 Asynchronous Reprojection,其中Asynchronous是表示Reprojection這個動作是獨立運行的,不受CPU、GPU正在進行的工作影響,每一張畫面都會先經過校正(稍微扭轉原本的畫面,只校正頭部轉動)再顯示。電腦如果在時間內處理完畫面,會先經過校正再顯示,電腦如果來不及處理完,則會自動拿前一張舊畫面,經過校正再顯示。當遇到偶發性來不及處理完畫面的情形,Asynchronou Reprojection能夠即時補上,使用者不易感覺到掉幀,是其一大優點。透過Asynchronous Reprojection,能夠同時減輕上述情形A和情形B所造成的影響。 然而由於目前SteamVR的Asynchronous Reprojection只校正頭部轉動,沒有校正頭部移動以及虛擬物體的移動,如果軟體跑不到90FPS,會看到移動中的物體動作不連貫、不流暢(物體會突然跳一下或是跳來跳去),如果前後左右上下移動身體、頭部,也會看到場景一震一震的。 為了避免場景一震一震或是物體跳來跳去造成不好的觀感,甚至導致暈眩,SteamVR發現軟體一直跑不到90FPS時,SteamVR會啟用Interleaved Reprojection,讓軟體改成跑在45FPS,再將這45張畫面經過Reprojection處理,產生新的45張畫面。運算出的45張畫面(正確的畫面)跟校正後的45張畫面(有誤差的畫面)交錯顯示,便會形成類似殘影的效果。由於固定在45FPS,殘影是穩定的(不會跳來跳去),因此不會有暈眩的問題。 下圖左側是90FPS看起來的樣子,下圖右側則是45FPS+Interleaved Reprojection看起來的樣子。 http://i.imgur.com/wZgy7WC.png
依據個人實測結果,在只有轉動頭部的時候,Asynchronous Reprojection效果很好,不容易察覺掉幀,適合坐著玩的VR遊戲。不過對於Room-scale遊戲來說,常常需要前後左右上下移動身體、頭部,或者是在眼前揮舞兩支動態定位控制器,這時就很容易看出 Asynchronous Reprojection造成的副作用。 由於開啟Asynchronous Reprojection後每一張畫面都會經過校正,會耗用額外的效能,因此如果軟體本來就將電腦性能使用到接近極限,開啟Asynchronous Reprojection後反而會一直觸發Asynchronous Reprojection,導致效果變得更差。 若是最佳化做得比較差的軟體,CPU、GPU使用率不穩定,可能會一下子觸發Asynchronous Reprojection、一下子觸發Interleaved Reprojection,這種狀況就相當惱人了。 因此如果發現畫面一直震、移動的物體跳來跳去,這時關閉Asynchronous Reprojection、Interleaved Reprojection其中一個,可能會有較好的效果。 未來Valve有打算替SteamVR加入「motion-vector frame generation technique」,能夠校正物體移動,類似下方介紹Oculus的Asynchronous Spacewarp,相信到時用在Room-scale遊戲上會有更好的效果。 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(ATW) + Asynchronous Spacewarp(ASW): 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/d7ZDZg 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,或者是跑在60FPS並透過Reprojection補上不足的60FPS。(但考量到PS4性能較弱,多數軟體可能會選擇60FPS+Reprojection。) 此外開發者也可以選擇是否要每一張畫面都經過Reprojection校正再顯示。 更多相關資訊可以參考: Embrace Virtual Reality with PlayStation® VR https://youtu.be/3RNbZpcfAhE
總的來說,Reprojection能夠有效地降低延遲、避免暈眩,但經過Reprojection產生的畫面多少會有些「副作用」,提升硬體性能、軟體效率、畫面更新率仍舊是帶來流暢VR體驗的最佳解! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.241.149.29 ※ 文章網址: https://www.ptt.cc/bbs/VR/M.1476531943.A.C4E.html ※ 編輯: luyaoting (111.241.149.29), 10/15/2016 19:52:33
kuma660224: 之前的資料,Daydream也會有類似技術。10/15 20:03
※ 編輯: luyaoting (111.241.149.29), 10/15/2016 20:04:01
nfsong: 專業推 24.22ms感覺wireless 很困難阿10/15 20:04
luyaoting: 不知道Vive的定位系統能夠有效預測到多久以後,能預測10/15 20:10
luyaoting: 越久,就有越多時間來做無線傳輸 10/15 20:10
akilight: 不過Oculus其實也有說,ATW終究只是輔助手段,不是萬靈丹 10/15 20:21
akilight: 單純的轉動沒問題,但是最麻煩的還是位移處理10/15 20:22
akilight: 在一些情形下,ATW處理位移補差造成的judder會被使用者10/15 20:22
akilight: 注意到,就會失去減少暈眩的效果10/15 20:23
akilight: 而在最壞的情形中反而會增加使用者的暈眩,所以他們建議10/15 20:23
akilight: 開發者還是盡量不要依賴這個效果,盡量讓畫面能達到原生10/15 20:23
akilight: 90FPS,ATW當作偶爾掉格時的應急手段就好10/15 20:24
akilight: 不過最新的ASW看起來有大幅改善ATW在位移處理上的短處10/15 20:29
akilight: 似乎還滿不錯的10/15 20:30
akilight: 至於PSVR,之前看到的一些資訊是只有類似ATW的處理10/15 20:30
akilight: 沒有ASW,所以在某些情形下會出現一些artifacts10/15 20:31
luyaoting: PSVR看國外體驗心得,有些人有提到快速移動的物體有殘10/15 20:48
luyaoting: 影,感覺是比較像ATW10/15 20:48
SULAjardin: 1080玩Onward, Reprojection直接關掉(原始設定on), 否10/15 21:07
SULAjardin: 則只能超級取樣1.0, 還要把遊戲內畫質降為low ...10/15 21:09
SULAjardin: 聽教我的老外說, 每次SteamVR更新都要去關一次,10/15 21:11
SULAjardin: SteamVR更新完常會又把Reprojection打開...10/15 21:12
※ 編輯: luyaoting (111.241.149.29), 10/15/2016 21:15:01 ※ 編輯: luyaoting (111.241.149.29), 10/15/2016 21:16:02
luyaoting: SteamVR的Interleaved Reprojection是比較單純的安全 10/15 21:21
luyaoting: 機制,能跑到90FPS的話不會作用。我沒玩Onward,你可10/15 21:21
luyaoting: 以照我前一篇文的方式,分別在允許/不允許再投影的情 10/15 21:21
luyaoting: 況下檢查看看CPU、GPU負載。 10/15 21:21
※ 編輯: luyaoting (111.241.149.29), 10/15/2016 21:53:58
ashinet: 好文,的確daydream也有動手腳 10/16 00:57
SULAjardin: 謝謝, 剛依照你教的方法執行, 發現多人駁火時, CPU會 10/16 01:31
SULAjardin: 像針刺一樣超過11.11ms ,GPU一直都在安全範圍內. 10/16 01:32
SULAjardin: 把Reprojection又打開了, 當初為了最佳化Onward效果,10/16 01:33
SULAjardin: 同時嘗試了許多步驟有成, 現在想想, 關Reprojection 10/16 01:34
SULAjardin: 或許是不必要DER, 非常感謝 10/16 01:34
abc2090614: 啟動onward時按住alt把電腦螢幕的視窗拉小可以改善10/16 03:10
abc2090614: 很多掉禎的問題 這算是Unity遊戲的問題10/16 03:10
SULAjardin: 我是把電腦桌面的Onward遊戲畫面最小化,當初抓超採和10/16 13:40
SULAjardin: 顯卡風扇轉速&溫度時, 發現這樣可以降GPU溫度5~10度. 10/16 13:41
※ 編輯: luyaoting (1.160.112.53), 10/16/2016 19:55:13 ※ 編輯: luyaoting (1.160.112.53), 10/16/2016 19:59:09 ※ 編輯: luyaoting (1.160.112.53), 10/16/2016 20:00:08
zebb: 推好文! 10/17 09:04
yannicklatte: 推 10/18 19:55
giintaipei: 好清楚呀!! 推 10/20 18:53
※ 編輯: luyaoting (220.141.115.38), 10/26/2016 06:57:29 ※ 編輯: luyaoting (36.227.245.57), 11/20/2016 17:32:29