首先,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重力感應,加速儀褂傀,陀螺儀等忍啤,結(jié)合一些AR相關(guān)的圖像算法,來實現(xiàn)的仙辟。
相關(guān)類的關(guān)系樹如下:
ARKit工作流程:
- 創(chuàng)建AR視圖類ARSCNView同波,初始化;
- 創(chuàng)建一個AR配置類叠国,來啟動視圖類里的AR攝像頭未檩;
- 攝像頭將初始位置的坐標設定為世界原點,來建立一個三維坐標系粟焊;
- 攝像頭可以探測到真實世界里面的水平面冤狡,并回調(diào)孙蒙。可以在平面上放置虛擬物體悲雳。
也可以直接將虛擬物體放到自己指定的坐標上挎峦,但這樣會像漂浮在空中一樣,沒有放在平面上那種真實的感覺合瓢。
ARKit與谷歌Tango的對比:
Tango首先需要手機集成它的硬件模塊:超廣角魚眼鏡頭坦胶,紅外傳感器等,這使得只有少量的最新款安卓手機才具有AR的功能晴楔。谷歌通過硬件來達到AR中運動追蹤顿苇、深度感知和區(qū)域?qū)W習的能力。
ARKit只通過單個攝像頭滥崩,依靠強大的算法實現(xiàn)了AR的功能岖圈,并從演示的demo以及實際運行測試工程來看讹语,定位非常穩(wěn)定且準確钙皮,渲染的Demo模型很復雜,但是感覺很流暢顽决,說明實時性和算法能耗都深度優(yōu)化過短条。
由于硬件上的不足,ARKit可能無法用于復雜場景和功能才菠,但好處卻是讓A9及以上機型瞬間變成了AR設備茸时,用戶不需要購買最新的機型;而在即將發(fā)布的iPhone8中很可能會配備配合AR的雙攝像頭赋访,紅外線傳感器等可都,使得ARKit在性能上也趕超Tango。