[技术] 目前三大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