1999 年上映的《黑客帝国》,在科幻爱好者间引起了一股热潮,主角 Neo 在虚拟世界中有如神一般,随心所欲的瞬间切换场所,飞天入地,甚至能躲开飞速而来的子弹。
虽然这一切都只存在于Matrix的虚拟空间中,但因为各种感官刺激信号通过头部后面的接口直接传入大脑,绕过了各种感受器官。所有的感受(触觉、视觉、嗅觉 等等)都与真实无异。对于人类来说,根本区分不开现实与虚幻。
然而在人类现今技术水平下,脑后 “插管” 的方式只是科学幻想。当前的虚拟现实,还只能通过在“外部” 干预各个感官(眼睛、耳朵 等)的输入,来营造 虚拟 的氛围。比如,最常见的 VR眼镜,3D环绕音响,震动反馈手套 等等。其中以VR眼镜的实现难度最大,技术含量最高,因为人的眼睛是接收信息量最大的器官,也是最难欺骗的器官。.
一、VR与AR
VR,虚拟现实,是指视野中的整个环境都是虚拟出来的,跟现实场景可以没有任何关系。你在自己家客厅里带上VR眼镜,可以瞬间来到外星球,跟好友们一起玩太空对战游戏。电影《头号玩家》就是描绘了这样一个世界。
AR,是指视野中仍然有现实世界的影像,但是在影像之上,额外叠加上虚拟的物体,叠加的物体需要跟现实场景能有“互动”,比如 能贴合到墙壁上,能放置在桌子上等,所以是对现实的增强,于是叫做增强现实。
1.AR 与 VR 光学结构上的区别
VR的光学相对简单,其实就是一个凸透镜成像,但是,这种光学结构,也决定了它当前很难小型化,因为 屏幕和 镜片 之间需要保持一定的距离,以保证正确的成像。
AR,因为在显示影像的同时,不能耽误看前面的景物,这就使得光学变得相对麻烦很多。目前有三种主流的方案:离轴反射、Birdbath、光波导
2. AR 与 VR 在定位识别技术上的区别与联系
AR的光学结构使其能够在现实场景之上叠加现实虚拟物体,但是这只是第一步。AR要想叠的准,还要需要 “理解” 眼前的现实场景,这就用到了 SLAM(实时定位与建图)技术。它是通过摄像头拍摄现实场景,检测追踪现实环境中的各种特征点,来对现实场景进行3D建模、平面检测等。只有对把现实场景的3D形态转化成数字信息后,虚拟物体才能比较真实的“放置” 到现实场景中。
而 VR 中,因为所有的场景物体都是 虚拟 的,所以就不需要做SLAM来对现实环境进行检测和3D重建。但是为了正确地显示虚拟场景,它需要对头部的姿态做实时定位。早期的VR眼镜的六自由度定位,都是靠在场地中架设额外的设备配合眼镜里的传感器来实现定位(OutsideIn),而近年来新兴起了 InsideOut 定位技术,则是靠头盔上的自带的摄像头拍摄外部景物,来反向估计自己的姿态,进行定位。这就使得 VR 跟SLAM 也扯上了关系。
二、VR技术的发展过程
从曲线中可以看出,一个新技术的发展过程中,会存在这样一个规律:
新技术诞生 (Technology Trigger):新技术被提出,开始逐步进入大众视野,不断有原型产品被开发出来,刺激着大众的好奇心。
期望膨胀(Peak of Inflated Expectations):大众企业/研究机构 开始仓促进入新领域,意图抓住新的增长点,占领先机。在这个时期,人们往往忽视新技术的不足,盲目的投入人力物力,同时,媒介宣传上,也会盲目乐观, 迎合大众的兴趣,过高的宣传新技术的光明前景。
泡沫破灭 (Trough of Disillusionment):当一批批的产品被研发出来,并仓促投入到市场中时,人们终于发现,原来所谓的“光明前景”远远没有到来,各种负面的评价接踵而至,企业也终于认清现实,开始收紧投资,整个市场逐渐冷淡下来。
启蒙期 (Slope of Enlightenment):基于第一波产品的失败经验教训,人们开始缓慢地对新技术进行改进,逐步提升效果
稳定生产 (Plateau of Productivity):当新技术的性能/效果,最终能满足需求时,才进入实质的普及生产阶段。
其中比较有名的 Virtual Boy (任天堂出品),只支持 红黑 两色显示,单眼分辨率只有384x224,颗粒感非常严重。被玩家诟病,所以,作为 VR 的 “早产儿”,它们无一例外的迅速在市场上销声匿迹。制造者们也认清了理想与现实间的巨大壁垒,纷纷偃旗息鼓,坐等技术的进一步发展。
三、基本原理:
VR眼镜的基本原理就是把一个显示器罩在人的眼睛上,人向哪里看,就在显示器里显示对应方向的景物,从而让人感觉自己身处一个无限大的虚拟空间中。
1. 处理器
计算的核心,用来生成图像,根据陀螺仪数据计算姿态定位 等。为了防止眩晕,VR眼镜要求图像刷新率达到90Hz。这对运算速度要求很高。所以,一个VR眼镜的处理器芯片性能指标至关重要。
2. 显示器
分别向左右眼睛显示图像。一般当我们说 2k 屏幕的VR眼镜 时,是指一整块屏幕的长边的尺寸,比如 2k*1k 尺寸。但如果说:单眼2k,则是指屏幕短边的尺寸是2k。2017年,市场上主流的配置是 单眼1.5k左右。屏幕分辨率越高,要求配备的处理器也越强大。
3. 凸透镜片
如果把显示器直接贴在人眼前,人眼是很难聚焦这么近的物体的。凸透镜片的目的,就是通过折射光线,将显示器上的画面成像拉近到视网膜位置,使人的眼睛能轻松看清几乎贴在眼前的显示屏。
4. 陀螺仪
显示器里的景象,如果要随着人头部的运动而实时产生变化。则必须知道人头部的朝向,比如,当带着VR眼镜的人,向上看时,眼睛里的显示器,需要实时的显示虚拟的天空,而这个“向上看”的动作,就需要 陀螺仪 来检测。具体陀螺仪的原理就不介绍,大家只要知道,它是能检测到物体在空间中的姿态/朝向 即可。
根据VR眼镜具体实现方式,我们一般把它们分成三大类:
1. 手机盒子 嵌入机 ,Screenless Viewer,利用用户的手机,担任了 处理器 + 显示器 + 陀螺仪 的角色。
2. VR头戴显示器 PCVR,Tethered HMD,使用PC的CPU和显卡来进行运算。
3. 一体机 Standalone HMD, All in one HMD,使用移动芯片( 如 高通骁龙系列 )来进行图像和定位计算。
四、VR与3D技术:
3D电影是在观众戴上眼镜之后,会出现画面仿佛近在咫尺的感觉,空间感距离感比起裸眼看更加明显。更倾向于这是一种视觉的错觉,利用了人眼“双眼效应”,因为毕竟不能在平面的屏幕上真正弄一个立体的电影场景出来。
3D技术再厉害,也只是一个平面上的东西,也只是利用平面呈现3D的东西。但是3D并不是完美地呈现3D世界,就像相片一样,你永远只能呈现一个瞬间一个角度的东西,不能呈现每个角落。就像3D的网络游戏,仿佛你控制着人物满世界乱走,上天入地无所不能。但终究只是隔着一个平面的玻璃来观察3维的空间。
换言之就是:你站在一个角度,仅凭一块有限的屏幕,仅凭不断变化的画面来认识虚拟的世界。你看到的只是虚拟世界中的一个小角落,但是也可以认为你看到了虚拟的世界。
就像人眼一样,人眼看到的一定是一个平面的图形,因为视网膜是平面的。但是人却可以感觉得到自己处在一个真正的3维空间中,那是因为因为人凭借其他的信息推断出了自己在一个三维空间中,其他的信息可以是触摸、声音、光等等。
而VR就是现实世界的模拟,不仅仅是模拟某一个角落。3D和VR其实是重合的关系:
打个比方,这有一栋房子。3D技术就是让你看着这个房子的外型、结构、大小等,还可以将它画成图,拍成照片来欣赏。这一切的前提是你得有房子的模型做出来(至少得做一个外壳出来)。而虚拟现实则是让你直接进入房子里面(沉浸式),自由移动(自由性),还能用房子里的各种物品(交互性)。这一切的东西的最主要前提肯定是和3D一样要做个模型出来(场景),除此之外,还要做出房子里应有的布置(场景中的元素),另外还要有物理法则比如物体会自由落体下落、两个刚性物体不会重叠等(物理引擎),此外如果想在房子里拍一部电影或者表演一个话剧,还得要有剧本和动作的设计(脚本和程序)。
同样是一个立体的房子,3D只是让人看到而已,而虚拟现实,则可以让人真切地感受到自己身处其中。
五、当前 VR 行业的几大挑战
1. 清晰度
说到 清晰度,大家都会想到 视网膜屏(裸眼分辨不出像素颗粒),这是清晰度的终极目标。对于手机来说,乔布斯把 视网膜屏定义为:300 PPI(Pixel Per Inch),也就是 每英寸300个像素。而这个分辨率的屏幕,在VR眼镜里,却远远不够用。因为VR眼镜,相当于用一个放大镜看屏幕,原来肉眼看不到的像素点,当然就现了原形。
这里先引入一个更加跨平台通用的概念:PPD( Pixel Per Degree ),即,每视场角像素数。目前,业内比较流行的说法是 60 PPD 是视网膜屏。也就是说,当你视野里,每度里面有60个像素以上时,你就分辨不出像素颗粒了。
300 PPI 的视网膜屏手机,放在面前 40厘米处时,大约每一度视场角对应的就是 60个像素。如果按照 60 PPD 的标准,一个 视场角(FOV)100度的VR眼镜,单眼就需要 100 x 60 = 6000 个像素。也就是单目 6k,双目 12k(现在VR眼镜一般标称都是 双目 的分辨率)。
2. 计算性能
视频一般采用的使 分片解码 技术,简单地说就是看哪解哪。以8k视频为例,我们只需要解码 2k左右,当前的移动处理芯片完全没问题。可以说,分片解码 是未来VR视频播放必须要落实的技术,否则,视网膜清晰度的视频,对于计算能力和网络传输来说都是灾难。
3D渲染技术随着分辨率的提升,渲染一个完整的场景,需要的计算力也是越来越大,尤其是场景还有非常复杂的材质、模型、光影特效时。那么这个时候就需要另一个技术,来降低处理难度,即:注视点渲染 技术。
注视点渲染 技术,利用到了人眼的一个特性:虽然人眼的整体FOV很大,但是,同一时间内,人只能分辨清很小视场角内的景物。
根据我们的实验,当把视野中央直径40度以外的图像压缩到 1/4 的分辨率时,人眼根本不会感知到这个分辨率的下降。也就是说,对于一个100度视场角的 VR眼镜,我们可以只对 40度范围内的景物进行高清渲染,对于 40度以外的部分,只需要用 1/4 分辨率 来渲染,这样就可以大大降低渲染的计算力需求。而这个技术还需要结合 眼球追踪 技术来使用,这个技术已有较成熟的方案。但是 特定区域渲染 这个技术目前还没有推广开,需要各大厂商共同推进。
3. 软件内容
VR平台的软件游戏的数量相对于PC和手机端来说远远不够,而一个新的计算平台的普及,需要丰富的内容生态。所以需要更多的开发制作。
而最开始的VR 行业的软件标准并不统一。尤其是 移动VR平台,完全的碎片化,虽然都是安卓平台,但是每家的SDK标准都不同。后来有了OpenXR 标准组织,力图把各个平台的 接口标准统一,这样开发者只要开发一次应用,就能在不同平台上分布运行。这对VR软件行业是一大利好。
4. 眩晕问题
对于 VR 的眩晕问题的诱因之一就是 晕动症,即晕车病、晕船病、晕机病和由于各种原因引起的摇摆、颠簸、旋转、加速运动等所致疾病的统称。它也不是人类的一个固有的生理反应,不是说 只要 虚拟运动与实际运动不符就一定会晕,而是与人的意识认知紧密相关。
其实除了晕动症,还会有很多其他问题会造成用户眩晕,包括但不限于:屏幕刷新率、光学畸变、显示延迟、定位准确度 等。这些都是可解的,需要VR眼镜厂商悉心去调节就可以解决。
六、VR所需要的计算机技术
- 设备端 -
VR所涉及到的计算机软件技术有以下三大块:
1.显示技术
目前的VR设备有三大类:外接式头显(包括PCVR 和 PSVR)、一体机 和 手机盒子。这三类VR眼镜用到的操作系统,都是在现有计算设备的系统(Windows、Android 的等)。所以,从系统层面,并没有新的技术内容。但是到了显示层面,它跟现有的计算设备比却复杂了一个量级。
当游戏引擎渲染出一个VR画面后,并不能像 PC 或者 手机那样直接上屏,它还需要经过反畸变、合成、位置预测等过程,才能贴到屏幕上。这就需要很多 计算机图形学 和 操作系统 相关的知识。
另外,为了进一步提升渲染效率,还需要引入注视点渲染技术。而为了能够解决 VAC (辐辏冲突)问题,未来还要引入 光场显示 等技术,这些也都需要 计算机图形学 相关的知识。
2. 定位技术
VR中图像的生成,依赖于定位的准确性。这就又涉及到了两大块技术:头部定位 和 手柄定位。从技术路线上,定位技术可以分为下面三类:
<1> 外置激光定位 (Lighthouse)
使用外置的激光发射器扫描空间,通过计算 头盔和手柄 接收到激光信号的时间差来推导出设备的空间坐标。它的特点是:速度快,位置准,缺点是 成本高。
<2>外置视觉定位
通过外部放置摄像头,拍摄 头盔/手柄 上的光点,来推算出设备的位置,Oculus Rift(红外线) 和 PSVR (可见光)都是使用这种方式。想要准确高效地检测出光标点,就需要 图像处理、计算机视觉的知识。
<3>内置视觉定位( InsideOut 定位)
通过头盔上的摄像头拍摄画面的变化,来估计头盔运动。微软WMR、Quest使用的是这种方式。它的优势是不需要额外架设设备。但是,定位精度上,比激光定位要差一些。为了能根据画面来推断相机的运动,也是需要 计算机视觉 相关知识。InsideOut 头部定位对应的手部定位稍微复杂点,它又分为 电磁手柄定位、超声手柄定位 和 视觉手柄定位 三种方式。
前两种一般是硬件直接给出定位坐标,最后一种仍然是基于 计算机视觉,只不过摄像头从外置摄像头换成了头盔上的摄像头。
什么是计算机视觉?计算机视觉是使用计算机及相关设备对生物视觉的一种模拟。它的主要任务就是通过对采集的图片或视频进行处理以获得相应场景的三维信息,就像人类和许多其他类生物每天所做的那样。
3.识别技术
在一些特定的场合,为了能够更精准地反映用户的动作,还需要对人体的各种状态进行识别。包括:手势识别、身体姿态识别、表情识别、眼动追踪。手势识别有两个技术路线:一是需要佩戴手套,靠硬件来识别,二是基于 计算机视觉 来识别。前者优势是精准,后者的优势是使用简便。
身体姿态识别 跟手势识别类似,也是有 佩戴硬件 和 视觉 两套方案。但是现在常用的还是基于硬件。而基于视觉的姿态识别,一般还是用在监控场景中,在VR中比较少见,其准确度也比 硬件方案 差很多。
眼动追踪 则主要是计算机视觉方案,现在也有眼部肌电信号来进行眼动追踪的方法,但是只存在于实验室里。最后,表情识别 只能靠 计算机视觉 来做。以上提到的所有的识别方面的内容,都还处于比较前沿的状态,在实际应用中主要还是B端场景,C端使用的相对较少。Oculus Quest 上近期刚推出了 手势识别 的接口,预计后面会有越来越多的C端应用尝试这种新的交互方式。
- 应用端 -
1.内容开发
最常见的VR游戏应用开发,它在技术层面跟普通的3D游戏没有什么区别,大都是使用 U3D,Ureal 等引擎来开发。
2. 视频制作
VR视频的制作,目前都有比较成熟设备。用户在使用时,都免去了早期还需要拼接处理的步骤,直接输出 360度全景视频。制作是简单了,但是视频领域仍然有两个新技术需要探索:视频分片编解码 和 容积摄影。
视频分片编解码 可以解决两个难题:带宽不够 以及 芯片解码限制。未来为了能够传输和播放12K的视频,需要我们能在编解码环节进行优化。
容积摄影 技术,主要是通过多摄像头从多个角度拍摄同一个场景,最终 “拼” 出一个人可以 “走进去” 的3D的视频场景,要实现这一点,也是需要一些 图像处理 的知识。
3. 网络技术
云VR会是VR领域的一个大趋势,它需要在云端服务器对应用的显示进行编码,然后传到本地。下图是一种云VR 服务的架构。它主要考量的还是 云端内容编码 及 高效传输。
另外,未来将大行其道的虚拟社交,对网络传输要求也会比较高,形象同步需要传输的数据量跟传统网游比大了一个量级。目前最火的VR社交游戏:VRChat,同时在线人数超过了2万。单个房间同时人数上限只有30人左右。想实现 千人同服,还需要在数据同步方面做很多研究。
总的来说,VR所需要的有 计算机图形学、计算机视觉、操作系统相关的知识。而如果想在VR应用端做一些工作,则跟现在的3D游戏、影音娱乐 所需的技术知识类似。另外 ,因为VR眼镜公司也要做上层的系统应用,所以也会涉及到3D内容的开发。
七.VR开发
VR开发是3D编程引擎的语言,没有3D引擎的支持就无法开发VR。大多数3D引擎使用的都是c或C++开发的,需要使用Android NDK基于C++进行开发。接下来是C#,Unity使用,C#能作为脚本语言。还有Javascript,它也是 Unity 的一种脚本语言。
VR的设计流程
按优先级排序,分为四个部分:1、工作流程,各角色在团队中需要关注的内容和分工。2、设计工具的使用。3、用户研究方法,用户需求管理。4、设计原则(设计规范)归纳和建立。如下图所示:
明确职责分工
1、建立工作流程:针对VR设计各个主要环节的流程及配合方式进行了梳理,绘制流程图。
2、梳理工作内容:主要包括流程各部分人员职责、主要产出物、配合方式。
设计工具的使用
研究并确定需要使用哪些工具进行设计,并进行试用。
传统的2D类设计软件(如Axure)已不能快速、方便的展现3D空间类产品的设计思路,在2D的限制下做3D的东西,流程繁琐、没有办法迭代修改。因此各个设计环节掌握3D类主要工具基础的使用非常必要。
如何建立空间立体思维?最好的方式莫过于使用3D设计软件进行设计,在设计过程中传统2D设计师能够很好地将思路拓宽到空间中进行表现。另外针对游戏引擎(Unity)的基本学习、使用,也可以更好地帮助大家学习理解3D游戏、VR产品的设计和实现原理,避免设计师的设计内容无法实现。
建立用研&需求池
用研需求池建立:针对VR方向的用户研究和VR用户需求建立框架和内容规划,梳理ijb流程和需求池模板。
设计原则、规范
设计规范框架的制定:建立VR设计规范的框架,列举VR设计规范所涉及的内容和方向。
具体分工:
产品设计师
1、功能设计:产品应实现的功能有哪些,功能背后的业务逻辑是什么。
2、场景规划:划分出不同的场景进行罗列,输出场景列表。
3、VR场景构建:对每个场景需要实现的功能和业务逻辑进行具体描述,绘制出2D场景平面图,图中应包含当前场景中的所有对象。
交互设计师
1、对3D场景进行设计优化、搭建3D场景原型(C4D完成)。
2、细化3D场景。
3、设计交互设计流程,完成交互设计原型文档(直接用C4D做好截图到Axure 中添加交互说明)。
分别把各个场景串起来,完成交互原型。
界面设计师&美术设定
2D美术概念稿:绘制美术场景、角色等概念稿
FUI:主要针对FUI平面资源进行设计及输出。
3D资源&开发
根据设计稿及美术设定输出3D资源,输出到后续开发流程。
最后由开发实现产品完整功能。