一、ARKit概述
ARKit是iOS11的原生框架,这也就意味着开发者在接入时不需要考虑是否会占用APP包大小,可以使用Objective-C与Swift语言进行开发。
框架涉及了机器视觉、传感器融合、相机调校、惯性视觉导航、光照估算、SLAM[即时定位和地图构建]
等。
因为ARKit实时运算很大,所以对CPU有一定要求使用设备如下:
- iOS系统:iOS11及以上
- Mac系统:Mac OS10.12.4及以上
- IDE:Xcode9及以上
- iOS设备:iPhone6s 及以上、iPhone SE
- iPad设备:不支持iPad mini、iPad Air全系列,支持iPad 2017版及以上、iPad Pro全系列
- 第三方游戏引擎:Unity、Unreal Engine[虚幻引擎]
二、ARKit处理模块
- 世界跟踪
当相机捕捉到实时画面后,在画面中添加一个几何模型。此时手机开始运动。
运动对手机的位置和姿态产品产生的变化都会对这个几何模型产生影响。
ARKit使用视觉惯性里程计[VIO]
的技术来实时跟踪设备的位置和姿态变化。
因为是对手机在现实世界中的运动进行跟踪,所以叫世界跟踪。
- 场景理解
当实时获取到手机运动的轨迹和姿态变化后,就需要在相机画面中添加虚拟的几何模型。
场景理解是指手机通过一系列软件算法来分析相机图像,以此得到相机所处环境的信息。
- 几何渲染
紧接着是要解决几何模型如何添加到场景中的问题。
场景是以二维画面的形式展示在手机屏幕上的,而几何模型就需要把自己从三维模型转为二维图像。
在转换的过程中,需要考虑到手机位姿信息、场景信息、光照亮度。虽然之前已经得到了这些信息,但是ARKit并不具备绘制渲染的能力。
ARKit在渲染框架上有多项选择,可使用系统原生的SceneKit[3D]
、SpriteKit[2D]
、Metal框架,也可以使用第三方游戏引擎Unity、Unreal Engine。
- 人脸跟踪
人脸跟踪只适用于iPhone X,因为Apple所有的机型中只有iPhone X配备了原深感摄像头。
通过原深感摄像头可直接根据检测到的面部表情来驱动3D几何模型。
因为原深感摄像头是前置的,所以人脸跟踪也是使用的前置摄像头,而前三个模块是使用的后置摄像头。
三、ARKit结构
ARSession是ARKit中最重要的类,它使用ARConfiguration类来运行自己开启跟踪,会处理输出ARFrame类。
ARFrame类中包含了场景信息[ARLightEstimate类、ARAnchor类、ARPointCloud类]
与跟踪信息[ARCamera类]
。
从当前场景中检测出来的用户面部[ARFaceAnchor类]
、水平面[ARPlaneAnchor类]
都以ARAnchor类的子类出现。得到这两个信息之后,就可以进行渲染了。