首先,ARKit目前不支持前置摄像头。
ARKit主要由两部分功能组成:
利用摄像头探索真实世界建立空间坐标系;
在真实世界渲染出虚拟3D模型。
其中第二部分的渲染能力不是新推出的,而是利用已有的一些框架,如下:
SceneKit -- ios8推出的3D图形游戏框架,也是目前ARKit开发主要会使用的渲染3D模型的框架。引用官方的描述: Create 3D games and add 3D content to apps using high-level scene descriptions. Easily add animations, physics simulation, particle effects, and realistic physically based rendering.
SpriteKit -- ios7推出的2D图形游戏框架,由于是2D的,在ARKit中实际的应用可能不多。
Metal -- iOS8推出的接口,是一个支持GPU加速的3D绘图API,负责和3D绘图硬件交互。两大最著名第三方游戏引擎Unreal 和 Unity 也已支持Metal。
第一部分的利用摄像头将拍摄到的现实世界空间化的功能,也是基于一些已有的框架,如AVFoundation的摄像头模块,CoreMotion重力感应,加速仪,陀螺仪等,结合一些AR相关的图像算法,来实现的。
相关类的关系树如下:
ARKit工作流程:
- 创建AR视图类ARSCNView,初始化;
- 创建一个AR配置类,来启动视图类里的AR摄像头;
- 摄像头将初始位置的坐标设定为世界原点,来建立一个三维坐标系;
- 摄像头可以探测到真实世界里面的水平面,并回调。可以在平面上放置虚拟物体。
也可以直接将虚拟物体放到自己指定的坐标上,但这样会像漂浮在空中一样,没有放在平面上那种真实的感觉。
ARKit与谷歌Tango的对比:
Tango首先需要手机集成它的硬件模块:超广角鱼眼镜头,红外传感器等,这使得只有少量的最新款安卓手机才具有AR的功能。谷歌通过硬件来达到AR中运动追踪、深度感知和区域学习的能力。
ARKit只通过单个摄像头,依靠强大的算法实现了AR的功能,并从演示的demo以及实际运行测试工程来看,定位非常稳定且准确,渲染的Demo模型很复杂,但是感觉很流畅,说明实时性和算法能耗都深度优化过。
由于硬件上的不足,ARKit可能无法用于复杂场景和功能,但好处却是让A9及以上机型瞬间变成了AR设备,用户不需要购买最新的机型;而在即将发布的iPhone8中很可能会配备配合AR的双摄像头,红外线传感器等,使得ARKit在性能上也赶超Tango。