VR介绍,学习笔记

前言

刚刚在逛Udacity的时候,突然发现有个VR简介的课程。正好一直对VR的技术原理比较感兴趣,就点进去看了下,实在佩服其教学视频的制作水准,短短1个多点小时,却总结了不少有用的东西。写下来记录一下:

原理介绍

显然VR设备中最重要的东西就是VR头盔(headset)了,上面有着组成VR系统的重要元件比如:镜头(lens),镜头后面的显示屏(display),有的还继承了用于定位的硬件(tracking hardware)。但是,仅仅一个头盔是远远不够构建一个以假乱真让人信服的虚拟世界的,这需要硬件和软件的精密合作。下面的东西非常重要,只有了解了这些概念才能真正理解VR。

  • 光学器件
    头盔中的镜头或者镜片是用来干什么的?本质目的只有一个,聚焦,通过光学系统的转换,让离我们非常近的显示屏中的图像也能够成像在我们的视网膜中。你可以试试把手机屏幕放在离眼球几个厘米的地方,显然是无法看清东西的。而光学系统为我们做到了这一点。但仅仅是满足这一点显然不够。镜头的用至关重要,它是VR系统是否完美的必要条件,它的形状,尺寸,位置,对最终的体验影响很大,因此,每一个VR头盔的厂商都要在选择镜头的时候,在视野、焦距、舒适度、光学变形、最终成本等等之间做出权衡。

  • 显示屏(Display)
    1.高分辨率。在VR头盔的镜头后面,我们可以看到一个或多个高分辨率的OLED显示屏。有的是内嵌在头盔中的,比如HTC Vive,有的要使用手机的显示屏,比如Google Cardboard。根据Oculus的首席科学家Michael Abrash的观点,单眼需要16,000 X 16,000的像素点才能够获得完全清晰的图像,但目前的Vive也只能达到单眼1080 X 1200的分辨率。因此,我们需要显示屏是尽可能高的分辨率。
    2.低延迟(low persistence)。低延迟指的是在任意时刻,显示屏仅仅只显示图像的一部分,而不是完整的图像。这使得显示屏就像一个滚动的快门,或者可以把它想象成舞池中的频闪灯,只不过频率更高。有什么用呢?答案是,减少或消除运动模糊,你四处摆头查看的时候,才不至于画面模糊到一起。OLED的每个像素点无法通过快速改变颜色来消除运动模糊,因此才需要低延迟来解决这个问题。

  • 跟踪技术(Tracking)
    VR不能没有跟踪技术,很容易理解,计算机需要它来告诉自己你目前所处的位置。一个完整的VR系统需要跟踪两个参数:
    1.头部的旋转。目前VR系统都要借助于IMU(Inertial Measurement Unit)芯片来实现跟踪头部旋转的功能。IMU是一个集成了陀螺仪、加速度计等电子设备的MEMS设备,其中的微型计算机能够精确地计算出你面部所朝的方向。
    2.位置跟踪(Position tracking)。这个是用来判断你在VR环境中具体所处的位置坐标点,现在的技术手段很多,比如用摄像机,激光,磁场等,目前还没有一个很完美的解决方案。但这些都是系统如何让身体来协调地控制VR世界的关键。

  • VR技术面临的挑战
    最大的一个是叫做模拟器综合征(simulator sickness)。也即是一个VR系统要如何构建才能消除由于进入虚拟世界,而导致的身体产生的不适。一个粗糙的VR系统可能会让人产生恶心,眩晕的身体反应。

平台和例子

  • 3DOF
    DOF表示自由度(degree of freedom)。顾名思义,3DOF表示3个自由度,主要指的就是以仅仅只有IMU为代表的移动VR设备,这个只能记录头部的旋转运动,通过内置的陀螺仪等东西计算出你的面朝方向。
    mobile VR

  • 6DOF
    6DOF比3DOF多了人在三维空间中位置的检测。尽管判断头部的旋转都清一色采用了IMU,但实现位置检测的方式却很多,比如Oculus Rift采用的constellation的方式,原理大致是在头盔的许多位置增加不断闪烁的红外发光点,由放在空间中的摄像机,采集数据,由计算机将这些2D的图片结合IMU的数据建模成3D图像,从而判断位置。
    mobile VR
    又比如HTC Vive采用的Lighthouse技术,通过红外激光扫描空间,通过检测激光扫过头盔上的光电传感器所需的时间,结合IMU的数据就可以计算位置。
    mobile VR
    位置的实现方式还有很多,但目前主要还是采用光学(Optics)的方式

  • 移动VR设备和桌面VR设备的区别
    桌面VR功能更强大,一般都6DOF。而移动VR设备目前的优势仅仅就是便携,随时随地,并且不存在被电线绊倒的风险。

  • VR开发平台
    目前主要有两种渲染3D环境的方式。可以编写代码,或者使用基于图形编辑器的环境。
    1.使用游戏引擎
    游戏引擎是一种让开发游戏更加方便快捷的软件框架,它通常为我们提供了3D渲染,物理,声音,脚本处理,动画等等功能。有很多游戏引擎可以供我们使用,比如当下比较热门的Unity,或者Unreal Engine, CryEngine, Lumberyard等等。
    2.使用原生开发工具(Native Development Tools)
    比如大名鼎鼎的OpenGL, DirectX。当选择是用这个来构建你的VR应用时,你即是在使用计算机图形世界中最原始的材料,你需要自己动手去组装每一个组件,而不是使用一堆提前封装好的工具和游戏引擎。结果就是,性能更好,灵活性更强,但是却需要更长的开发周期。除非你要构建一个像Oculus Medium一样的性能需求极高的数据密集型模拟,或者构建一个让他人能够使用的VR框架可以采用原生开发工具外。作为一般的VR开发者,游戏引擎应该是比较合适的选择。
    3.网页浏览器(WebVR)
    目前还不够成熟。

总结

VR的原理似乎简单易懂,也并不是近年才有的概念,只是因为技术壁垒被打破,再加上资本的融入(以Facebook高价收购Oculus为导火线),才导致了现在如火如荼地发展。十年前的我们都难以想象虚拟世界能够如此快速地融入现实世界,期待VR技术的发展。

参考

优达学城VR纳米课程:
https://classroom.udacity.com/courses/ud1012