AR相關(guān) - ARKit的理解
要想很好的開(kāi)發(fā)AR項(xiàng)目,首先還是要對(duì)ARKit有個(gè)基本的了解,那我們現(xiàn)在就來(lái)看看一些常用類的含義
現(xiàn)實(shí) - ARKit
1.ARSession
負(fù)責(zé)采集現(xiàn)實(shí)世界的信息 - 世界追蹤
這是一個(gè)管理增強(qiáng)現(xiàn)實(shí)所需要的 設(shè)備攝像頭和動(dòng)作處理 的共享的對(duì)象。
-
ARSession對(duì)象會(huì)協(xié)調(diào) 增強(qiáng)現(xiàn)實(shí)過(guò)程中的大部分處理:
- 從設(shè)備的動(dòng)作感應(yīng)硬件讀取數(shù)據(jù)
- 控制設(shè)備內(nèi)置攝像頭
- 對(duì)捕捉到的攝像圖像進(jìn)行分析
ARSession會(huì)整合這些結(jié)果,并在設(shè)備反饋的現(xiàn)實(shí)空間和模型化AR內(nèi)容的虛擬空間之間建議一種對(duì)應(yīng)關(guān)系
注意:session是一個(gè)管理類,捕捉真實(shí)世界、世界追蹤、渲染都是由session完成的。
任何一個(gè)用ARKit實(shí)現(xiàn)的AR場(chǎng)景都需要一個(gè)單獨(dú)的ARSession對(duì)象
- 如果是使用了'ARSCNView'或者'ARSKView'對(duì)象來(lái)創(chuàng)建AR場(chǎng)景的話,一個(gè)ARSession實(shí)例是已經(jīng)包含在這個(gè)view之中了。
- 如果是通過(guò)別的渲染器來(lái)建立AR內(nèi)容的話,就需要手動(dòng)創(chuàng)建并維持一個(gè)ARSession對(duì)象。
2.ARConfiguration
ARConfiguration類決定了ARKit如何追蹤一個(gè)設(shè)備的位置以及相對(duì)于現(xiàn)實(shí)世界的運(yùn)動(dòng),是決定創(chuàng)建的AR體驗(yàn)的關(guān)鍵。
-
ARConfiguration子類:
-
AROrientationTrackingConfiguration
- 使用后置攝像頭并僅追蹤設(shè)備方向來(lái)提供基本的AR體驗(yàn)。
- 從三個(gè)自由度上來(lái)追蹤設(shè)備的運(yùn)動(dòng)方向 - 3個(gè)旋轉(zhuǎn)
-
ARWorldTrackingConfiguration - (平時(shí)相對(duì)用的最多)
- 使用后置攝像頭精確追蹤設(shè)備的位置和方向并允許平面檢測(cè)和碰撞測(cè)試來(lái)提供高品質(zhì)的AR體驗(yàn)。
- 從六個(gè)自由度上來(lái)追蹤設(shè)備的運(yùn)動(dòng)方向 - 3個(gè)平移 & 3個(gè)旋轉(zhuǎn)
-
ARFaceTrackingConfiguration
- 使用前置攝像頭并追蹤用戶面部的移動(dòng)和表情來(lái)提供AR體驗(yàn)。(目前只有iphone X可用)
-
AROrientationTrackingConfiguration
- 所有的AR Configuration都是用來(lái)建立現(xiàn)實(shí)世界和虛擬3D坐標(biāo)空間的對(duì)應(yīng)關(guān)系的。當(dāng)app將這些虛擬內(nèi)容和實(shí)時(shí)捕捉到的攝像機(jī)畫(huà)面一起展示給用戶,用戶會(huì)產(chǎn)生一種這些虛擬內(nèi)容和現(xiàn)實(shí)世界的一部分的錯(cuò)覺(jué)。
3.ARFrame
ARSession采集到的現(xiàn)實(shí)世界的信息以ARFrame的形式返回
ARFrame中包含了渲染虛擬世界所有要的所有信息
ARFrame包含了兩部分:ARAnchor 和 ARFrame
4.ARCamera
捕捉現(xiàn)實(shí)世界,并把信息交由ARSession處理。
AR seaaion中一個(gè)被捕獲的視圖幀相關(guān)的相機(jī)位置和視圖特征的信息
ARCamera捕獲的數(shù)據(jù)是一個(gè)一個(gè)的ARFrame構(gòu)成。
指的是當(dāng)前攝像機(jī)的位置和旋轉(zhuǎn)信息。
這一部分 ARKit 已經(jīng)為我們配置好,不用特別配置。
5.ARAnchor
指的是現(xiàn)實(shí)世界中的錨點(diǎn)
一個(gè)真實(shí)世界的位置和方向,可以用于在AR場(chǎng)景中放置物體。
可以把 ARAnchor(錨點(diǎn))理解為真實(shí)世界中的某個(gè)點(diǎn)或平面,anchor 中包含位置信息和旋轉(zhuǎn)信息。拿到 anchor 后,可以在該 anchor 處放置一些虛擬物體。
與SCNNode可以綁定
子類:ARPlaneAnchor
- 專門指的是一個(gè)代表水平面的錨點(diǎn)。
虛擬 - SceneKit
ARSCNView 是繼承自 SCNView 的
展示關(guān)于3D物體的屬性、方法的都是SCNView(比如:SCNScene、SCNNode)
scene是負(fù)責(zé)虛擬化的類
1.SCNScene
ARSCNView - 3D
是一個(gè)用來(lái)展示增強(qiáng)相機(jī)視圖和3D SceneKit內(nèi)容的AR體驗(yàn)的界面。將虛擬的3D內(nèi)容和設(shè)備相機(jī)反應(yīng)的真實(shí)世界結(jié)合起來(lái)。
-
主要功能:
- 將設(shè)備相機(jī)捕捉到的真實(shí)世界的影像作為場(chǎng)景的背景
- 將真實(shí)世界的坐標(biāo)系統(tǒng)直接映射成AR虛擬世界的坐標(biāo)系統(tǒng)
- 自動(dòng)移動(dòng)SceneKit相機(jī)來(lái)配合真實(shí)世界中設(shè)備的移動(dòng)
ARSKView - 2D
- 這個(gè)是使用2D SpriteKit制作的。
2.SCNNode
指的是虛擬世界中的節(jié)點(diǎn)
根據(jù)真實(shí)世界的錨點(diǎn)映射成對(duì)應(yīng)的虛擬世界的節(jié)點(diǎn)
每個(gè)虛擬化的物體都有一個(gè)節(jié)點(diǎn),所有的節(jié)點(diǎn)都有一個(gè)公共的父節(jié)點(diǎn)(rootNide)。
渲染 - ARSCNView
- 主要負(fù)責(zé)綜合 由SceneKit構(gòu)建的虛擬世界的信息 和 ARSession類采集到的現(xiàn)實(shí)世界的信息,然后將它們綜合渲染呈現(xiàn)出一個(gè)AR世界
總結(jié):
ARSCNView結(jié)合 SCNScene中的虛擬世界的信息 和 ARSession捕捉到的現(xiàn)實(shí)世界的信息,渲染出AR世界。
ARConfiguration指導(dǎo)ARSession如何追蹤世界,追蹤的結(jié)果以ARFrame返回。
ARFrame中的ARAnchor信息為SceneKit中的SCNNode提供的一些放置的點(diǎn),以便將虛擬節(jié)點(diǎn)和現(xiàn)實(shí)錨點(diǎn)綁定。

參考文章:
- 官方文檔:https://developer.apple.com/documentation/arkit
- https://blog.csdn.net/hdg34jk/article/details/79299496
- http://www.itdecent.cn/p/176e355555fe
- http://www.itdecent.cn/p/7faa4a3af589
- http://www.itdecent.cn/p/5aea431e8d6f
- http://www.itdecent.cn/u/d56910566910
有什么寫(xiě)的不對(duì)或者不好的地方歡迎指教,我會(huì)及時(shí)改正的,謝謝大家!