让你头晕的VR头显,背后发生了什么?
随着虚拟现实渐渐兴起,国内现在做虚拟现实的厂商也增多了起来。但是我经常听到有体验者向我表示:他戴上国外大厂诸如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的博客,原文地址。
让你头晕的VR头显,背后发生了什么?的更多相关文章
- 想要见识外太空?一款VR头显就能帮你实现梦想
除了宇航员,我们中的大多数人一生都没有机会前往地球之外的宇宙空间,只能在图片和纪录片中感受浩瀚宇宙的震撼. 美国肯尼迪航天中心和BrandVR合作推出的VR头显 而NASA在VR中的投资,创造的新的V ...
- 应用于Oculus Quest的VR头显应用
项目需要一个VR头显项目来展示算法成果,设备为Oculus Quest一体机,基于android平台(平台要切换为android),体验了下设备效果还行,但还是有点沙窗效应.记录一下开发流程. 先贴个 ...
- 深入VR之前 你应该知道VR头显透镜原理
转自:http://www.gamelook.com.cn/2016/03/246817 要理解虚拟现实头显透镜的工作原理,首先要搞懂眼睛是如何看到事物的. 眼睛瞳孔后有晶状体,也就是眼珠子.眼睛的背 ...
- 觉得VR头显太笨重?轻便的VR“神器”来了
一直以来需要搭配手机才能使用的VRBOX(VR眼镜盒子)都被大家诟病携带不便.比较笨重.不透气等等问题.大家也一直期待能够有轻便的搭配手机的VR设备出现,最好是可以随身携带的.另外一方面,作为手机最常 ...
- 头显HTC Vive北美直降100美元,中国区降价活动今日公布
如果你现在想要购买一台VR头显,591ARVR资讯网www.591arvr.com的小编提醒大家可以等一等,在即将到来的年末促销中各种VR设备都将迎来大力度降价.目前北美市场的HTC Vive已经直降 ...
- 科技部专家王涌天:移动AR头显将“让人类重新站起来”
目前,业内普遍认为VR和AR技术将是继移动手机之后的下一代计算平台,将给社会的方方面面带来全新的改变.近日,北京理工大学信息与电子学部主任.科技部863信息技术领域专家组成员王涌天教授对头戴式增强现实 ...
- 《VR入门系列教程》之2---VR头显
什么是虚拟现实? 虚拟现实的目标:让人们相信真实地处于一个虚拟世界中.要达到这个目标就得让人们的大脑(负责视觉和运动感知部分)欺骗他们.不同技术合在一起才可以创造这种幻觉,包括: 全立 ...
- 国内首家MR头显公司于CES惊艳亮相
在刚刚过去的CES2017大会上,我们看到了许多较为优秀的VR产品,而在这里面,有一家名不见经传的中国公司易瞳发布了一款兼具VR和AR功能的头显VMG-MARK.它的外观与联想VR和骁龙VR820等产 ...
- jvm大局观之内存管理篇(二):当java中new一个对象,背后发生了什么
https://zhuanlan.zhihu.com/p/257863129?utm_source=ZHShareTargetIDMore 番茄番茄我是西瓜 那是我日夜思念深深爱着的人啊~ 已关注 ...
随机推荐
- kbmmw 5.09 发布
New stuff ========= - Added kbmMWSmartBind.pas unit with optional kbmMWSmartBindVCL.pa ...
- 基于EasyDarwin云平台实现的EasyClient客户端与EasyCamera摄像机之间的对讲与云台控制功能
本文转自EasyDarwin团队Kim的博客,感谢Kim长期对EasyDarwin开源项目的贡献:http://blog.csdn.net/jinlong0603 EasyDarwin云平台是一套由E ...
- Go Web(一)
Beego环境搭建和bee工具安装使:http://blog.csdn.net/qq_534019165/article/details/48288133 Go语言beego框架环境搭建:http:/ ...
- 解析json的方式
一.Javascrip操作json 原始方式: var str1 = '{ "name": "jacun", "addr": "b ...
- Spring 4.2框架中注释驱动的事件监听器详解
事件交互已经成为很多应用程序不可或缺的一部分,spring框架提供了一个完整的基础设施来处理瞬时事件.下面我们来看看Spring 4.2框架中基于注释驱动的事件监听器. 1.早期的方式 在早期,组件要 ...
- js 链接传入中文参数乱码解决
传入时,可能出现中文的参数用encodeURI进行两次转码,如: lethref="http://www.zzdblog.cn?keyword='+encodeURI(encodeURI(k ...
- [haoi2014]穿越封锁线
这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格. dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0 dcmp(v ...
- Appium——WebDriverException: Message: A new session could not be created.
每次启动完一次脚本再次启动的时候会报这个错误,会话没有被创建 查看了下Appium日志: 查看下设备是否准备好,我用的是模拟器,就cmd下查看下设备: 可以看到设备掉线了... 好吧,重启下设备 脚本 ...
- 对xml文件的sax解析(增删改查)之一
crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...
- phpcms 内容模块PC标签调用
PHPcms 调用命令的基本格式: 开始:{pc:content action="模块操作名" catid="调用栏目ID" num="数据调用数量& ...