随着虚拟现实渐渐兴起,国内现在做虚拟现实的厂商也增多了起来。但是我经常听到有体验者向我表示:他戴上国外大厂诸如Oculus、Sony和Valve的VR头显的时候,体验十分出色,但是戴上国产的VR头显,不动的时候还好,一动起来就会让人极度眩晕,这是为什么?按照一般的看法,VR头显无非是戴在头上的显示器,晕动(Motion Sickness)到底是怎么回事?

实际上人对于VR的眩晕很大程度上,与晕船晕车没啥区别:人耳朵里的前庭系统所感受到的运动状态和视觉系统不一致,就会在大脑里“打架”——人就会觉得晕乎乎的。总的来说,晕动症分为三种:

你看到动了,感觉没有动:比方说打FPS游戏就是这种情况;

你感觉动了,但是看到没有动:比方说晕车晕船晕机就是这种情况;

感觉的运动情况与看到的运动情况不匹配:宇航员在做离心机训练的时候就会遇到这种情况。

对于VR,情况可能要更加复杂一些。用户的全部视野都被VR头显所覆盖,VR头显极力欺骗你已经到了另一个世界,此时视觉系统所感受到的东西就不仅仅是视野中的一块屏幕上显示的画面,而是整个视野,在这种情况下,VR导致的晕动症就会有很多种因素。

第一个因素当然是你身体的运动和你的视野中所观测到的运动不匹配。

比如说你在坐VR的过山车的时候,视觉上是在高速运动,但是前庭系统却表示你并没有在运动,这时就会导致头晕。从逻辑上,这与打FPS游戏造成的头晕没有什么区别,每个人都会有不同的感受。

第二个很重要的原因,是头部运动和视觉观测到的头部运动的不匹配。

这才是今天我们要说的重点,也是VR头显能够从技术上加以改善的部分。其中这一点包括两个部分:帧间延迟和帧内延迟。

帧间延迟很好理解。人类对于头部转动和相对应的视野的变化是极度敏感的。如果用户的头转动了,而相对的,视野转动有延迟,只要很微小的延迟就能感觉得到。有多微小呢?研究表明,头动和视野的延迟不能超过20ms,不然就会非常明显。

不要小看20ms:实际上人头部运动的速度很容易就能够达到每秒上百的度数。假设头部转动速度为100度/秒(其实随便转头就能达到这个速度),20ms的延迟意味着视野中物体的转动延迟为2度,把手伸直,竖起大拇指,大拇指的宽度大概就是2度。

20ms的延迟时间对于VR头显而言是一个非常大的挑战。首先设备需要足够精确的办法来测定头部转动的速度、角度和距离,这可以使用惯性陀螺仪(反应灵敏但是精度差)或者光学方法来实现。然后计算机需要及时渲染出画面,显示器也需要及时地显示出画面,这一切都需要在20ms以内完成。相应的,如果每一帧显示的时间距离上一帧超过20ms,那么人眼同样也会感到延迟。所以,VR头显的画面刷新率应该超过50FPS,目前来说60FPS是一个基准线。要在这么短的时间内搞定这一切,本身就是巨大的挑战。

那么是不是单纯把帧率提高到60FPS以上,拼死将延迟做到20ms以内就可以了呢?其实除了帧间延迟之外,VR所造成的眩晕还有更加复杂的成因。下面我用几张示意图演示。

 

 我们可以看到,左边这张图是真实的世界中,一个物体从左往右移动时眼睛看到的情况:随着时间的推移,物体的轨迹是一条线;而右边的图则是任何一种显示器显示出来的情况:物体的图像在每一个点显示一段时间之后,就跳到下一个点;它并非是连续的运动。

但是一旦当人的头部运动,那么人眼也会相对于显示的物体有相对的运动,这时物体在人眼中的轨迹就变了一个样子:

 

右图中头部往左转时,原来静止不动的物体的轨迹就变成了右图这个样子,不再是一个点,而是在每一帧结束之时跳回到它“应该”在的位置。然而人眼的视觉暂留现象则会保留上一帧和这一帧的图像,于是图像就会造成拖影,从而导致眩晕。

假如我们仍然假设60hz的刷新率,头部转动速度为120度/秒,那么一帧内头部转动为2度,以DK2的分辨率,一帧内的延迟为19像素,这个时候头显显示的图像将会是相当模糊的。而分辨率越高,这个问题就越严重。以人眼理论极限分辨率来计算,一帧内延迟会达到600像素。

这个问题怎么解决呢?想要让物体的图像更加连续的移动,最好也是最简单粗暴的办法是提高刷新率。

从60到90,到120,到200……可能最后到1000hz,那时我们的视觉系统就彻底分辨不出真实或者是虚拟了。 但显然我们现在无法将刷新率提高到1000hz,目前Oculus Rift CV1和HTC Vive采用了90hz刷新率,而Sony Project Morpheus采用的是120hz刷新率。

另外一个办法,就是降低余晖(Persistence)。

余晖(Persistence)是一个在CRT显示器时期的概念。CRT显示器是电子束激发屏幕上的荧光粉发光,所以实际上CRT显示每一帧之内只有很短一段时间像素是发光的,其余时间像素是暗的,示意图如下:

  

可以看到液晶显示器,每一帧内像素总是在发光,所以液晶显示器就被称之为“全余晖”(Full Persistence)显示。

中间这张图只有一半时间像素发光;而右边这张图是理想情况下只有非常短的时间内屏幕在发光,也就是“零余晖”(Zero Persistence)。由于人眼的视觉暂留效应,刷新率足够高就不会察觉到屏幕只有每一帧很短时间发光。但是为了弥补亮度的不足,每一帧内像素发光的强度要大大提升。

低余晖显示对VR头显的意义在于,头动时物体的轨迹更加接近于物理世界的真实轨迹:

这时头部运动带来的拖影会大大降低。假设假设同样头部转动为120度/秒,头显刷新率60hz,一帧内屏幕发光2ms,以DK2分辨率和视角计,那么在发光2ms之内头部转动人眼所观察到的视觉延迟仅为2像素,眩晕感就随之而去。

但是我们都知道LCD的基本显示原理:通过让液晶翻转来选择性透过光线。这意味着LCD很难使用低余晖显示。

(TN-LCD的基本显示原理)

液晶翻转的响应时间最快也有2-4ms,而背光原理也导致LCD不能做到全黑。相比之下传统的CRT显示器是天然的低余晖显示。

想要解决这个问题,VR头显必须使用主动发光的显示屏,比方说OLED。由于其每个像素都是主动发光的,所以OLED屏幕可以做到低余晖。

实际上,Oculus和Valve都使用了AMOLED的低余晖显示屏,Sony则使用了自家的OLED显示屏。目前国产的VR头显大多采用传统的LCD显示屏,所以其造成眩晕是很自然的。

但是低余晖也并不是什么都好。它也会带来副作用:由于每一帧图像显示的时间都很短,所以移动的物体显示出的轨迹是断续的,视觉系统会认为其为不同的物体,而在显示屏全亮的情况下,视觉系统则有足够的时间将其界定为同一个物体。从这个意义来说,这是一个trade-off:在解决晕动和拖影的同时,低余晖显示会导致头动时物体闪烁和跳跃。

好了,说了这么多,我想大家也都明白了:虚拟现实并不是在眼睛前面放两块显示屏加一个陀螺仪就能搞定的。在此也希望国内的厂商能够沉下心做好产品,把虚拟现实的基本体验做好,我们才能够像智能手机那样从苹果谷歌到小米华为。

声明:本文在技术描述中参考了现Oculus首席科学家Michael Abrash的工作,部分图片来自于他在Valve的博客,原文地址