什么是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体验
的最佳解!