首先,ARKit目前不支持前置攝像頭。
ARKit主要由兩部分功能組成:
利用攝像頭探索真實世界建立空間坐標系;
在真實世界渲染出虛擬3D模型。
其中第二部分的渲染能力不是新推出的,而是利用已有的一些框架,如下:
SceneKit -- ios8推出的3D圖形游戲框架,也是目前ARKit開發(fā)主要會使用的渲染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。
第一部分的利用攝像頭將拍攝到的現(xiàn)實世界空間化的功能,也是基于一些已有的框架,如AVFoundation的攝像頭模塊,CoreMotion重力感應,加速儀,陀螺儀等,結合一些AR相關的圖像算法,來實現(xiàn)的。
相關類的關系樹如下:

ARKit工作流程:
- 創(chuàng)建AR視圖類ARSCNView,初始化;
- 創(chuàng)建一個AR配置類,來啟動視圖類里的AR攝像頭;
- 攝像頭將初始位置的坐標設定為世界原點,來建立一個三維坐標系;
- 攝像頭可以探測到真實世界里面的水平面,并回調??梢栽谄矫嫔戏胖锰摂M物體。
也可以直接將虛擬物體放到自己指定的坐標上,但這樣會像漂浮在空中一樣,沒有放在平面上那種真實的感覺。

ARKit與谷歌Tango的對比:
Tango首先需要手機集成它的硬件模塊:超廣角魚眼鏡頭,紅外傳感器等,這使得只有少量的最新款安卓手機才具有AR的功能。谷歌通過硬件來達到AR中運動追蹤、深度感知和區(qū)域學習的能力。
ARKit只通過單個攝像頭,依靠強大的算法實現(xiàn)了AR的功能,并從演示的demo以及實際運行測試工程來看,定位非常穩(wěn)定且準確,渲染的Demo模型很復雜,但是感覺很流暢,說明實時性和算法能耗都深度優(yōu)化過。
由于硬件上的不足,ARKit可能無法用于復雜場景和功能,但好處卻是讓A9及以上機型瞬間變成了AR設備,用戶不需要購買最新的機型;而在即將發(fā)布的iPhone8中很可能會配備配合AR的雙攝像頭,紅外線傳感器等,使得ARKit在性能上也趕超Tango。