學(xué)習(xí)ARKit(二)

前言

前面一節(jié)學(xué)習(xí)ARKit(一)簡(jiǎn)單的介紹了AR與ARKit的相關(guān)概念,下面將深入到ARKit中來(lái)了解一下ARKit的工作原理與流程。

在介紹ARKit之前,先了解一下SpriteKitSceneKit。

SpriteKit

SpriteKit——使用優(yōu)化的動(dòng)畫系統(tǒng),物理模擬和事件處理支持創(chuàng)建基于2D游戲。

SpriteKit是一種圖形渲染和動(dòng)畫的框架,你可以使用它將任意紋理圖像動(dòng)畫化。 SpriteKit提供了一個(gè)傳統(tǒng)的渲染循環(huán),可以在確定內(nèi)容和渲染幀之間進(jìn)行交替。你可以決定框架的內(nèi)容以及這些內(nèi)容如何更改。 SpriteKit會(huì)使用圖形硬件有效地渲染該框架。 SpriteKit針對(duì)你的內(nèi)容使用任意動(dòng)畫或更改內(nèi)容進(jìn)行了優(yōu)化。這種設(shè)計(jì)使SpriteKit更適合需要靈活處理動(dòng)畫的游戲和應(yīng)用程序。

SceneKit

SceneKit——使用高級(jí)場(chǎng)景描述創(chuàng)建3D游戲并向應(yīng)用添加3D內(nèi)容。輕松地添加動(dòng)畫、物理模擬、粒子效果和逼真的物理渲染。

SceneKit將高性能渲染引擎與用于導(dǎo)入、處理和渲染3D素材的描述性API相結(jié)合。與Metal和OpenGL的低級(jí)API不同,他們需要你精確地實(shí)現(xiàn)顯示場(chǎng)景的渲染算法,而SceneKit只需要描述場(chǎng)景內(nèi)容以及你希望執(zhí)行的動(dòng)作或動(dòng)畫即可。

兩者特點(diǎn)

SpriteKit使用主機(jī)設(shè)備提供的圖形硬件來(lái)高幀速率合成2D圖片,同時(shí)還支持很多不同的內(nèi)容,比如文本、視頻等。SpriteKit支持豐富的渲染結(jié)構(gòu)并接管了所有向OpenGL發(fā)出繪畫指令的的底層工作,所以你可以將你的重心放在解決高層次的設(shè)計(jì)問(wèn)題以及偉大的游戲交互設(shè)計(jì)上。

SceneKit是用來(lái)構(gòu)建3D場(chǎng)景的框架,且可以與Core Animation和SpriteKit無(wú)縫交互。在SceneKit中可以直接引入COLLADA行業(yè)標(biāo)準(zhǔn)文件制作好的3D模型或場(chǎng)景。與SpriteKit一樣,SceneKit通過(guò)場(chǎng)景來(lái)顯示物體,場(chǎng)景包含在SCNView。場(chǎng)景內(nèi)同樣是以節(jié)點(diǎn)的結(jié)構(gòu)來(lái)呈現(xiàn)物體。

ARKit框架

ARKit框架提供了兩種AR技術(shù),一種是基于3D場(chǎng)景(SceneKit)實(shí)現(xiàn)的增強(qiáng)現(xiàn)實(shí),一種是基于2D場(chǎng)景(SpriktKit)實(shí)現(xiàn)的增強(qiáng)現(xiàn)實(shí)。
我們主要介紹一下3D場(chǎng)景的AR的框架與實(shí)現(xiàn)。
通俗的講,AR就是我們攝像頭捕捉到現(xiàn)實(shí)世界中的圖像后,在圖像上顯示虛擬的3D模型,這就是最簡(jiǎn)單的增強(qiáng)現(xiàn)實(shí)。其過(guò)程就是上面的兩步:

  1. 攝像頭捕捉現(xiàn)實(shí)世界的圖像(ARKit實(shí)現(xiàn))
  2. 在圖像上現(xiàn)實(shí)虛擬的3D模型(SceneKit實(shí)現(xiàn))

下面展示一下ARKit框架關(guān)系圖(摘自ARKit從入門到精通(2)-ARKit工作原理及流程介紹

ARKit框架圖.png

注釋:
圖中我們可以看到,ARKit是通過(guò)ARScnView來(lái)展示3D場(chǎng)景的,這個(gè)3D場(chǎng)景是攝像頭通過(guò)拍攝將現(xiàn)實(shí)世界的圖像與虛擬的3D模型結(jié)合所構(gòu)成的。ARScnView繼承自SceneKit中的SCNView,而SCNView則繼承自我們非常熟悉的UIView。
在AR中,ARKit負(fù)責(zé)將現(xiàn)實(shí)世界轉(zhuǎn)換成3D場(chǎng)景,而SceneKit則是在3D場(chǎng)景中添加自己的場(chǎng)景與虛擬3D模型。

ARKit的工作原理

在上圖中,我們可以看到ARKit中比較重要的幾個(gè)類:ARSCNView、ARSession、ARCamera,此外還有ARConfiguration、ARFrame等。

  1. ARCamera是通過(guò)相機(jī)來(lái)捕捉真實(shí)世界的圖像,ARScnView則是展示將相機(jī)捕捉的畫面作為3D場(chǎng)景,它們兩個(gè)之前是通過(guò)ARSession來(lái)建立聯(lián)系的。
  2. ARSession與iOS中其他的session一樣,就是會(huì)話的意思。創(chuàng)建一個(gè)AR的場(chǎng)景,首先要?jiǎng)?chuàng)建一個(gè)AR會(huì)話。一個(gè)ARSession對(duì)象協(xié)調(diào)ARKit來(lái)代表執(zhí)行的主要過(guò)程,這些過(guò)程包括從設(shè)備的運(yùn)動(dòng)感測(cè)硬件讀取數(shù)據(jù),控制設(shè)備的內(nèi)置相機(jī),以及對(duì)捕獲的相機(jī)圖像執(zhí)行圖像分析。會(huì)話綜合了所有這些結(jié)果,以建立設(shè)備所在的真實(shí)世界空間與模擬AR內(nèi)容的虛擬空間之間的對(duì)應(yīng)關(guān)系。
  3. 運(yùn)行會(huì)話需要會(huì)話配置:ARConfiguration類的實(shí)例或其子類。
    這些類確定ARKit如何跟蹤設(shè)備相對(duì)于現(xiàn)實(shí)世界的位置和運(yùn)動(dòng),從而影響您可以創(chuàng)建的AR體驗(yàn)的種類。
    ARConfiguration的子類主要有以下三種:
    ARWorldTrackingConfiguration:提供高品質(zhì)的AR體驗(yàn),使用后置攝像頭精確跟蹤設(shè)備的位置和方向,并允許平面檢測(cè)和點(diǎn)擊測(cè)試。
    AROrientationTrackingConfiguration:提供使用后置攝像頭并僅跟蹤設(shè)備方向的基本AR體驗(yàn)。
    ARFaceTrackingConfiguration:提供使用前置攝像頭并跟蹤用戶臉部的移動(dòng)和表情的AR體驗(yàn)。
  4. ARFrame作為ARSession的一部分用來(lái)捕獲視頻圖像和位置跟蹤信息。ARCamera會(huì)連續(xù)地捕獲視頻幀,傳到ARSession。對(duì)于每一幀,ARKit將圖像與設(shè)備運(yùn)動(dòng)感應(yīng)硬件所得的數(shù)據(jù)(數(shù)據(jù)由ARConfiguration中封裝了復(fù)雜的算法來(lái)計(jì)算得出的)一起進(jìn)行分析,以估計(jì)設(shè)備在現(xiàn)實(shí)世界的位置。ARKit傳輸跟蹤信息和圖像參數(shù)就是以ARFrame為對(duì)象來(lái)傳輸?shù)摹?/li>
大概的工作流程是這樣的:
  1. 打開(kāi)應(yīng)用,開(kāi)啟攝像頭,通過(guò)ARSCNView來(lái)加載AR 3D場(chǎng)景SCNScene
  2. SCNScene通過(guò)ARCamera捕捉場(chǎng)景
  3. 捕捉場(chǎng)景后,ARCamera會(huì)將視頻幀傳到ARSession,然后再傳到ARSCNView展示場(chǎng)景。
  4. ARSCNView將場(chǎng)景數(shù)據(jù)交給ARSession。
  5. ARSession通過(guò)管理ARConfiguration實(shí)現(xiàn)場(chǎng)景的追蹤并返回一個(gè)ARFrame。
  6. 再ARSCNView的場(chǎng)景中添加3D模型(即ARSCNNode)

ARConfiguration捕捉相機(jī)3D位置的意義就在于能夠在添加3D物體模型的時(shí)候計(jì)算出3D物體模型相對(duì)于相機(jī)的真實(shí)的矩陣位置。
在3D坐標(biāo)系統(tǒng)中,有一個(gè)世界坐標(biāo)系和一個(gè)本地坐標(biāo)系。類似于UIView的Frame和Bounds的區(qū)別,這種坐標(biāo)之間的轉(zhuǎn)換可以說(shuō)是ARKit中最難的部分。

流程圖如下:(摘自ARKit從入門到精通(2)-ARKit工作原理及流程介紹

ARKit流程圖.png

下一節(jié)學(xué)習(xí)ARKit(三)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容