一、基础知识
1、AR、VR与MR区别
VR特点:以沉浸式、私密性以及个人体验为主等,代表产品:Oculus、Pico等。
AR特点:与现实产生交互、现实增强。与AI结合产生更大的价值,代表作品MagicLeap等。
MR特点:在AR之上,可与现实产生3维交互,用户可以自然手势、视线以及语音交互方式来操作周遭的一切虚拟物体,结合物联网概念,可以周遭一切真实物体进行虚实自然交互。代表作品:微软 Hololens2,苹果 Vision Pro等。
其中沉浸体验的商业本质即提供了一整套方法论,这套方法论以传统工业的方式来模拟个性化的体验。虽然沉浸体验依旧是工业制作的产物,但却能使消费者主观上认为自身获得了个性化的体验。这便是沉浸体验的商业本质和精髓,极大化满足了参与者个人的个性化需求。
2、3DOF和6DOF定义
DOF:在结构力学上的自由度(Degrees of freedom),或称动不定度(Degrees of kinematic indeterminacy),意指分析结构系统时,有效的结构节点上的未知节点变位数。自由度大致有两种型式:旋转的自由度和移动的自由度。在平面中,只有三个自由度,一者为面旋转,二者为前后及左右两个移动。在立体中,有六个自由度,三个为前后、上下及左右三个移动和前后、上下及左右三面旋转。简单来说就是沿三个坐标轴的移动和绕三个坐标轴的转动 把构建相对于参考系具有独立运动参数的数目称为构件的自由度
3DOF:就是指物体具备在X、Y、Z 三轴上旋转的能力。常规方法是使用陀螺仪来捕捉用户头部旋转,并呈现全景画面中相对应的部分,从而使用户在视觉上拥有被场景包裹的感受,实现基础的视觉沉浸。
6DOF:就是指物体除了具备在X、Y、Z 三轴上旋转的能力之外,也具备在X、Y、Z三轴上移动的能力。人体的运动也可以大致分为旋转和位移两大类,6DOF的VR设备几乎可以模拟所有的头部动态。并且,利用位移数据,也可以标定用户身高。这在多人VR互动内容中,是极其重要的一点。
3、IMU(惯性测量单元)
要实现各个方向和角度的追踪,需要用到 IMU 装置,IMU 是测量物体三轴姿态角及加速度的装置。
一般IMU包括三轴陀螺仪及三轴加速度计,某些9轴IMU还包括三轴磁力计。这些传感器的功能如下:
-
陀螺仪:陀螺仪可以检测物体转动时三个轴向上的角速度,单位为弧度/秒。静止时角速度为零。
-
加速度计:加速度计可以检测物理移动时的加速度,单位为米/平方秒。静止时输出的是重力加速度值。
-
磁力计:可用于测试磁场强度和方向,定位设备的方位,磁力计的原理跟指南针原理类似,可以测量出当前设备与东南西北四个方向上的夹角。
在开始追踪前,首先要建立坐标系。以右手坐标系为例,坐标系原点和各轴朝向的建立方法为:
-
原点:追踪算法启动时HMD所在的位置为原点
-
X轴正方向:与屏幕平行的水平方向,并指向屏幕右侧
-
Y轴正方向:重力方向的反方向
-
Z轴正方向:垂直于屏幕,并且朝向用户的一侧
4、追踪原理
3Dof追踪主要是追踪三个轴向的旋转状态,结果可以用欧拉角来表示:
-
俯仰角(Pitch):绕X轴旋转的角度
-
偏航角(Yaw):绕Y轴旋转的角度
-
滚动角(Roll):绕Z轴旋转的角度
俯仰角(Pitch) 偏航角(Yaw) 滚动角(Roll)
知道了各个方向上的旋转角度,并进行持续的追踪,就可以确定用户没有发生位移姿态下的动作,比如转头、点头、摇头等动作,追踪过程如下:
-
确定初始状态:依靠加速度计,可以确定俯仰角和滚动角的旋转状态,这两个角度的变化,会引起加速度计在重力加速度方向上的变化;偏航角处于水平方向上,因此初始旋转状态定义为0度。
-
计算各方向上的角速度:依靠陀螺仪可以检测三个方向上的角速度,单位为弧度/秒,静止时角速度为0。假设陀螺仪数据更新的时间间隔为ΔT,那么旋转角度的计算公式为:
旋转角度 = 角速度 x ΔT
各轴向初始旋转状态已知,每个ΔT转动的角度也知道,这样不停的累加,就可以持续的追踪各个轴向最新的旋转状态。
随着用户的头部移动和转动,各个轴向上的角速度是不停变化的,因此陀螺仪数据更新时间间隔越小,那么得到的旋转角度就越接近角速度,追踪的结果也就越准确。
-
累积误差消除:陀螺仪作为一个测量设备,数据更新的时间间隔总是存在一定的误差,长时间运行后,角度的计算也会出现误差,因此需要对追踪结果进行修正:
-
俯仰角和滚动角:使用加速度计进行修正
-
偏航角:使用磁力计进行修正
-
6Dof追踪是在3Dof追踪的基础上,增加对空间位移的追踪。目前空间位移的追踪方案主要有两大流派:外向内追踪技术(Outside-in)和内向外追踪技术(Inside-out)。
-
外向追踪技术:将摄像头放置在环境中,通过拍摄HMD上的Mark点或者光球等方式,确定HMD和摄像头的相对位置,然后转换成HMD在各个轴向上位移的距离。
-
内向追踪技术:将摄像头安装到HMD上。通过SLAM算法获取环境中的特征点信息,并构建一个基于特征点的地图来实现定位。目前大部分XR设备都采用的这种方式,特别是一体机设备,全部都采用了内向外的追踪方案。
二、开发步骤
1、开启Oculus开发者模式及电脑连接Oculus
-
注册facebook账号、oculus的开发者账号----https://developer.oculus.com/manage/organizations/create/
-
手机下载oculus软件(若没有goolgle play软件则使用第三方87870虚拟现实网),苹果手机需要非国服才能下载,需要在账户里设置一下所在地区。(87870虚拟现实网)
-
手机连接oculus设备,然后在手机里将设备开启为开发者模式(oculus里开启开发者模式没用)
-
将ADC的库配置上去,进入系统里面的高级设置中进行环境变量的配置,将ADC的地址粘贴上去(adb下载安装及使用-CSDN博客)
-
设备与电脑进行连接,VR设备需点击允许电脑读取设备数据。
2、核心部件
Oculus 集成 SDK 包含OVRCameraRig预制件,该预制件提供变换对象来表示 Oculus 跟踪空间。
它包含一个跟踪空间游戏对象,用于微调头部跟踪参考框架与用户的世界之间的关系。在跟踪空间对象下,会找到一个中心眼锚,它是 Unity 的主摄像头,每只眼睛有两个锚游戏对象,以及控制器的左右手锚。它还包含一个定制的 VR 摄像头,它取代了 Unity 的传统摄像头。
当用户在 Unity 中启用 VR 支持时,头戴设备会自动将头部和位置跟踪参考传递给 Unity。这使相机位置和方向与现实世界中的用户位置和方向精确匹配。头部跟踪的姿势值会覆盖相机的变换值,这意味着相机始终处于相对于用户对象的位置
3、常见VR问题
①Oculus属于移动平台还是VR平台,Oculus的帧速率如何调整以及Oculus的默认帧速率为多少?
答:Oculus属于VR平台,Oculus的帧速率大概73帧每秒,无法使用Application.targetFrameRate进行调节,Unity编辑器默认帧速率为175帧每秒,受Application.targetFrameRate影响。
Application.targetFrameRate和QualitySettings.vSyncCount让您可以控制游戏的帧速率以获得更流畅的性能。targetFrameRate通过指定游戏每秒尝试渲染的帧数来控制帧速率,而vSyncCount指定帧之间允许的屏幕刷新次数。
②移动平台忽略QualitySettings.vSyncCount。使用Application.targetFrameRate控制移动平台上的帧速率。
移动设备可实现的最大帧速率是屏幕的刷新率。例如,刷新率为 60 赫兹的设备的最大可实现帧速率为每秒 60 帧。
要以最大可实现的帧速率为目标,请设置Application.targetFrameRate为屏幕的刷新率Screen.currentResolution包含屏幕的刷新率。
为了节省电池电量,移动平台上的默认帧速率低于可实现的最大帧速率。通常,移动平台上的默认帧速率为 30 fps。要以默认帧速率为目标,请将Application.targetFrameRate设置为 -1。
③VR 平台忽略QualitySettings.vSyncCount和Application.targetFrameRate。相反,VR SDK 控制帧速率。
④Unity Editor 在编辑器中,Application.targetFrameRate仅影响 Game View。它对其他编辑器窗口没有影响。