Unity 2017虚拟现实开发标准教程
上QQ阅读APP看书,第一时间看更新

1.5 虚拟现实技术基础知识

1.5.1 虚拟现实技术原理

虚拟现实技术通过计算单元(计算机、手机等)塑造一个三维环境,呈现在两块屏幕上,屏幕一般由头显承载,用户通过焦距透镜观看内容,达到沉浸式的VR体验。

1.5.2 虚拟现实常见术语

延时和帧率

延时越低,用户体验的流畅度越高。需要注意的是,虽然硬件表明了其设备的刷新率,但是整个VR体验的流畅度还要由软件决定,不同的代码优化程度、场景内容的多少,都决定了最终应用程序的帧率。所以在VR内容制作过程中,总是要本着性能优化的原则进行。

6DoF 和 3DoF

DoF(DegreesOf Freedom)是物体在三维空间中的运动自由度,主要分为两种类型:旋转的自由度和移动的自由度。在 VR 情境下,自由度体现在设备的移动和旋转信息方面。追踪技术不同,设备所能提供的自由度也不同。3DoF 的 VR 设备仅能提供3个轴向(xyz)上的旋转信息,6DoF 的 VR 设备除能提供3个轴向上的旋转信息外,还能提供3个轴向上的位置信息。Oculus Rift、HTC VIVE 的头显和手柄控制器均为 6DoF 设备,而 Cardboard、Gear VR、Oculus Go 的头显和手柄为 3DoF 设备,体验者可以自由观看360度空间展示的内容,而当设备移动位置时,VR 内容并不会响应其移动。

Inside-Out和Outside-In

对于 6DoF 的运动追踪技术,目前存在两种实现方案,分别是由外而内(Outside-In)的位置追踪、由内而外(Inside-Out)的位置追踪。对于前者,一般是使用固定的基站(如 HTC VIVE 的 Lighthouse)对追踪范围内的设备进行定位。这种方式的优势是定位精确,定位延时低;其劣势是受限于追踪空间,用户只能在有限的范围内移动。同时,对于存在多台设备的情况,容易造成追踪信号干扰。对于后者,一般使用头显前置的一个或多个摄像头,通过计算机图形学算法,如即时定位与地图构建(SLAM)技术,结合头显内部的惯性测量单元(IMU)实现用户的位置追踪。这种方式的优势是不受空间约束,体验者可以在更大范围内移动,多台设备亦能顺畅追踪,不受干扰;其劣势是图形计算受环境光线和环境内容影响较大,在某些情况下会定位不精确,视野出现“漂移”的情况,对于超出摄像机视野的手柄,会出现“冻结”现象,只有待重新进入摄像机视野后才会正常跟踪。

惯性测量单元(IMU)

惯性测量单元一般包括陀螺仪、加速度计、磁力计等一系列传感器,用来测量被跟踪设备在三个维度(xyz)上的旋转、速度等指标,以此计算物体在三维空间中的姿态,是实现VR体验的关键部件。惯性测量单元将测量数据反馈给计算单元,计算单元根据这些数据将相应的画面内容呈现在头显的屏幕上。

1.5.3 体验虚拟现实过程中会遇到的挑战

晕动症

基于人体的生理结构,眼睛负责接收环境信息,反馈给负责感受运动的前庭系统,当人眼看到的运动过程与前庭系统感受的不一致时,体验者就会感到不适,即会产生晕动症,类似于晕车晕船的体验。这种情况在快速运动的 VR 场景中容易出现,尤其是快速上升或下降的境况。

除此之外,在应用程序层面,这主要受屏幕刷新率的影响,帧率越低的VR内容,越容易引起晕动症,所以在不改变硬件条件的情况下,尽可能地优化应用程序性能,以达到比较理想的帧率。

纱窗效应

当前主流VR头显的屏幕分辨率一般在2K,少数能够达到4K及以上,要达到视网膜级别的分辨率,需要至少8K分辨率的屏幕。分辨率越高,显卡数据吞吐量也越高。图1-4所示为显示的是因分辨率不足造成人眼可以明显觉察出的纱窗效应。

图1-4 纱窗效应

安全性

在 VR 体验过程中,体验者完全沉浸在虚拟环境中,对于现实环境缺乏足够的视觉感知,体验区域内的障碍物容易阻碍体验者的移动,激烈的动作如躲闪、跳跃等更增加了受伤的概率。多数 VR 硬件设备都配有手柄控制器,在一些需要频繁交互的 VR 环境中,运动幅度较大或移动速度过快时,体验者还容易误伤他人,损坏设备。所以在体验之前,务必将手柄上的腕带佩戴至手腕,以防设备脱落;保证周围环境空旷无阻挡;尽量保持坐姿体验;必要时需要有专人辅助体验,以保障安全;在公共场合例如地铁、广场等处,尽量不要使用 VR 设备。

1.5.4 虚拟现实(VR)与增强现实(AR)的区别

增强现实(Augmented Reality,简称 AR )是将虚拟事物叠加到现实世界显示的技术,虚拟内容与现实环境能够产生交互;而在虚拟现实中,体验者则完全沉浸在数字化的虚拟环境中。

目前多数 AR 内容的承载设备是智能手机和头戴式眼镜,头戴式 AR 设备中比较有代表性的是 Microsoft HoloLens、Meta。开发 AR 应用程序的工具主要有 iOS ARKit、Google ARCore、Vuforia等,Unity对这些工具均有良好的支持。图1-5所示是使用Vuforia开发的AR应用。

图1-5 使用Vuforia开发的AR应用