- AR開發權威指南:基于AR Foundation
- 汪祥春編著
- 4295字
- 2021-01-15 16:18:35
1.3 AR Foundation概述
2017年,Apple公司與Google公司相繼推出了各自的AR開發SDK工具包ARKit和ARCore,分別對應iOS平臺與Android平臺AR開發。ARKit和ARCore推出后,極大地促進了AR在移動端的普及發展,將AR從實驗室帶入了普通消費場景。
ARCore官方提供了Android、Android NDK、Unity、Unreal等開發包,ARKit官方只提供了XCode開發包,這也增加了利用其他工具進行開發的開發者的學習成本。在這種情況下,Unity構建了一個AR開發平臺,這就是AR Foundation,這個平臺架構在ARKit和ARCore之上,其目的就是利用Unity跨平臺能力構建一種與平臺無關的AR開發環境。換句話說,AR Foundation對ARKit和ARCore進行了再次封裝,提供給開發者一致的開發界面,并按照用戶的發布平臺自動選擇合適的底層SDK版本。
因此,AR Foundation是ARKit XR插件(com.unity.xr.arkit)和ARCore XR插件(com.unity. xr.arcore)的集合,雖然最終都會使用ARKit或ARCore,但因為Unity再次封裝,它與專業平臺(如ARKit插件和ARCore SDK for Unity)相比,C#調用與原生API略有不同。
AR Foundation的目標并不局限于ARKit與ARCore,它的目標是建成一個統一、開放的AR開發平臺,因此,AR Foundation極有可能在下一步發展中納入其他AR SDK,進一步豐富AR開發環境。在后續發展中,AR Foundation不僅會支持移動端AR設備開發,還會支持穿戴式AR設備開發。
從上面的描述我們可以看出,AR Foundation并不提供AR的底層開發API,這些與平臺相關的API均由第三方,如ARKit、ARCore、SenseAR提供,因此AR Foundation對某特定第三方功能的實現要比原生的晚(AR Foundation將某第三方SDK的特定功能集成需要時間)。
1.3.1 AR Foundation與ARCore/ARKit
AR Foundation提供了一個獨立于平臺的腳本API和MonoBehaviour,因此,開發者可以通過AR Foundation使用ARKit和ARCore共有的核心功能構建同時適用于iOS和Android兩個平臺的AR應用程序。換句話說,這可以讓開發者只需開發一次應用,就可以將其部署到兩個平臺的設備上,不必做任何改動。
如前所述,AR Foundation實現某底層SDK的功能會比原生的稍晚,因此,如果我們要開發AR Foundation尚不支持的功能,可以單獨使用對應的原生SDK。目前,如果我們只面向ARCore進行開發并希望獲取完整的功能集,可使用Google為Unity開發提供的ARCore SDK for Unity;如果只面向ARKit進行開發并希望獲取完整的功能集,可使用Unity提供的適用于Unity開發的ARKit插件(Apple并未提供Unity的ARKit SDK開發插件,在AR Foundation發展起來以后,Unity肯定不會再繼續維護ARKit插件)。
AR Foundation架構于ARKit和ARCore之上,其與ARKit、ARCore的關系如圖1-5所示。
▲圖1-5 AR Foundation與ARCore、ARKit的關系圖
在Unity引擎上,AR Foundation與ARCore、ARKit的區別如表1-1如示。
表1-1 AR Foundation、ARCore、ARKit聯系與區別
SDK |
簡介描述 |
---|---|
AR Foundation |
AR Foundation將ARKit和ARCore的底層API封裝整合到一個統一、開放的框架中,并提供一些額外的實用功能,如Session生命周期管理,以及用于展示環境中已檢測功能的MonoBehaviour |
Google ARCore SDK for Unity |
該SDK為ARCore支持Unity開發環境提供的原生API,并在Unity中向Android平臺公開這些API,以方便開發者調用 |
Unity ARKit Plugin |
該插件是Unity開發的ARKit for Unity插件,用于在Unity中構建ARKit應用,它在Unity中公開了C#的ARKit Objective-C API,以便開發者調用。該插件還提供一些輔助功能,可以兼容iOS設備的前置和后置攝像頭 |
1.3.2 AR Foundation支持的功能
AR Foundation與ARCore、ARKit都正處于快速發展中,ARCore基本保持每兩個月進行一次更新的頻率,ARKit也已經迭代到了ARKit 3,作為ARKit與ARCore上層的 AR Foundaion也已經更新到v3.0版。
但如前文所說,AR Foundation功能的實現要比底層的原生API稍晚一些,表1-2展示了AR Foundation、ARCore和ARKit功能對比。
表1-2 AR Foundation、ARCore、ARKit功能對比
支持功能 |
AR Foundation |
ARCore |
ARKit |
---|---|---|---|
垂直平面檢測 |
√ |
√ |
√ |
水平平面檢測 |
√ |
√ |
√ |
特征點檢測 |
√ |
√+支持特征點姿態 |
√ |
光照估計 |
√ |
√+Color Correction |
√+Color Temperature |
射線檢測(Hit Testing,對特征點與平面) |
√ |
√ |
√ |
圖像跟蹤 |
√ |
√ |
√ |
3D物體檢測與跟蹤 |
√ |
- |
√ |
環境光探頭(Environment Probes) |
√ |
√ |
√ |
世界地圖(World Maps) |
√ |
- |
√ |
人臉跟蹤(Pose、Mesh、Region、Blendshape) |
√ |
√ |
√(iPhoneX 及更高型號) |
云錨點(Cloud Anchors) |
√ |
√ |
- |
遠程調試(Editor Remoting) |
開發中 |
√-Instant Preview |
√-ARKit Remote |
模擬器(Editor Simulation) |
√ |
- |
- |
LWRP支持(支持使用ShaderGraph) |
√ |
開發中 |
開發中 |
攝像機圖像API(Camera Image) |
√ |
√ |
- |
人體動作捕捉(Motion Capture) |
√ |
- |
√(iPhoneXR 及更高型號) |
人形遮擋(People Occlusion) |
√ |
- |
√(iPhoneXR 及更高型號) |
多人臉檢測 |
√ |
√ |
√(iPhoneXR 及更高型號) |
多人協作(Collaborative Session) |
√ |
- |
√(iPhoneXR 及更高型號) |
多圖像識別 |
√ |
√ |
√ |
AR應用是計算密集型應用,對計算硬件要求較高,就算在應用中對虛擬對象都不進行渲染,AR也在對環境、特征點跟蹤進行實時解算。由于移動端硬件設備資源限制,一些高級AR應用只能在最新的處理器(包括CPU和GPU)上才能運行。同時得益于Apple強大的獨立生態與軟硬件整合能力,它在ARKit 3中推出了很多新功能,但由于目前Android系統碎片化嚴重,ARCore預計要等到新版Android系統發布后才能提供類似的功能。
1.3.3 AR Foundation功能概述
AR Foundation只是對ARCore和ARKit再次封裝,并不實現AR的底層API功能,換言之,AR Foundation只是一個功能的搬運工。因此,底層API沒有的功能,AR Foundation也不可能有(AR Foundation會添加一些輔助功能以方便開發者開發AR應用)。同時,AR Foundation能實現的功能也與底層SDK所在平臺相關,如ARKit有WorldMap功能,而ARCore沒有,因此,即使AR Foundation支持WorldMap功能,這個功能也只能在iOS平臺上才有效,在Android平臺編譯就會出錯。這就是說AR Foundation支持的功能與底層SDK是密切相關的,脫離底層SDK談AR Foundation功能是沒有意義的。當然,如果是ARKit和ARCore都支持的功能,AR Foundation做的工作是在編譯時根據平臺選擇無縫切換所用底層SDK,達到一次開發、跨平臺部署的目的。
當前,AR Foundation主要支持的功能如表1-3所示。
表1-3 AR Foundation主要支持的功能
功能 |
描述 |
---|---|
世界跟蹤(World Tracking) |
在物理空間中跟蹤用戶設備的位置和方向(姿態) |
平面檢測(Plane Detection) |
對水平與垂直平面進行檢測 |
參考點(Reference Points) |
對特定點的姿態跟蹤。ARCore與ARKit中稱為Anchor |
光照估計(Light Estimate) |
對物理環境中的光照強弱及方向進行估計 |
人臉跟蹤(Face Tracking) |
檢測并跟蹤人臉 |
人臉表情捕捉(Facial Expression Capture) |
檢測人臉表情 |
圖像跟蹤(Image Tracking) |
跟蹤物理空間中的2D圖像 |
物體跟蹤(Object Tracking) |
跟蹤物理空間中的物體對象,目前只支持ARKit |
Session分享 |
支持多人共享場景,這在ARKit中稱為多人協作(Collaborative session)和世界地圖(World Maps),在ARCore中稱為Cloud Anchor |
人體動作捕捉(Motion Capture) |
簡稱動捕,檢測屏幕空間或者物理空間中的人體及動作 |
人形遮擋(People Occlusion) |
利用計算機視覺判斷人體在場景中的位置,獲取人體形狀及在場景中的位置實現虛擬物體遮擋 |
攝像機圖像API |
提供攝像機圖像底層支持,方便開發人員開發計算機視覺應用 |
1.3.4 AR Foundation體系架構概述
雖然AR Foundtion是在底層SDK API之上的再次封裝,但Unity為了實現AR跨平臺應用做了大量工作,搭建了一個開放性的架構,使這個架構能夠容納各類底層SDK,能支持當前及以后其他底層SDK的加入,宏觀上看,AR Foundation希望構建一個開發各類AR應用的統一平臺。
為實現這個開放的架構,AR Foundation建立在一系列的子系統(Subsystem)之上。Subsystem隸屬于UnityEngine.XR.ARSubsystems命名空間,負責實現特定的功能模塊,而且這個實現與平臺無關,即Subsystem處理與平臺無關的特定模塊的實現。如XRPlaneSubsystem負責實現平面檢測、顯示功能,在編譯時,根據不同的運行平臺自動調用不同底層的SDK。從調用者的角度看,只需要調用XRPlaneSubsystem的功能,而不用管最終這個實現是基于iOS還是Android,即對平臺透明。
這種架構對上提供了與平臺無關的功能,對下可以在以后的發展中納入不同的底層SDK,從而實現最終的一次開發、跨平臺部署的目標。其架構如圖1-6所示。
▲圖1-6 AR Foundation體系架構
1.3.5 基本術語
1.世界跟蹤(World Tracking)
世界跟蹤指AR設備確定其在物理世界中的相對位置和方向的能力,在2D和3D空間中跟蹤用戶的運動并最終定位它們的位置是任何AR應用程序的基礎。當設備在現實世界中移動時,AR Foundation會通過一個名為并行測距與映射(Concurrent Odometry and Mapping,COM)的過程來理解移動設備相對于周圍世界的位置。AR Foundation會檢測從攝像頭圖像中捕獲的視覺差異特征(稱為特征點),并使用這些點來計算其位置變化。這些視覺信息將與設備IMU慣性測量結果結合,一起用于估測攝像頭隨著時間推移而相對于周圍世界的姿態(位置和方向)。
通過將渲染3D內容的虛擬攝像機的姿態與AR Foundation提供的設備攝像頭的姿態對齊,就能夠從正確的透視角度渲染虛擬內容,渲染的虛擬圖像可以疊加到從設備攝像頭獲取的圖像上,讓虛擬內容看起來就像真實世界的一部分。
2.可跟蹤(Trackable)
可跟蹤指可以被AR設備檢測/跟蹤的真實特征,例如特征點、平面、人臉、人形、2D圖像、3D物體等。
3.特征點(Feature Point)
AR設備使用攝像機和圖像分析來跟蹤環境中用于構建環境地圖的特定點,例如木紋表面的紋理點、書本封面的圖像,這些點通常都是視覺差異點。特征點云包含了觀察到的3D點和視覺特征點的集合,通常還附有檢測時的時間戳。
4.會話(Session)
會話的功能是管理AR系統的狀態,是AR API的主要入口。在開始使用AR API的時候,可通過對比ARSessionState狀態值來檢查當前設備是否支持AR。Session負責處理整個AR應用的生命周期,控制AR系統根據需要開始和暫停視頻幀的采集、初始化、釋放資源等。
5.Session空間(Session Space)
Session空間即AR Session初始化后建立的的坐標空間,Session空間原點(0,0,0)是指創建AR會話的位置。AR設備跟蹤的坐標信息都是處在Session空間中,因此在使用時,需要將其從Session空間轉換到其他空間,這個過程類似于模型空間和世界空間的轉換。
6.射線檢測(Ray Casting)
AR Foundation利用射線檢測來獲取對應于手機屏幕的 (x,y) 坐標(通過點按或應用支持的任何其他交互方式),將一條射線投射到攝像頭的視野中,返回這條射線貫穿的任何平面或特征點以及碰撞位置在現實世界空間中的姿態,這讓用戶可以選擇環境中的物體。
7.增強圖像(Augumented Image)
使用增強圖像(圖像檢測)可以構建能夠響應特定2D圖像(如產品包裝或電影海報)的AR應用, 用戶將手機的攝像頭對準特定圖像時觸發AR體驗,例如,他們可以將手機的攝像頭對準電影海報,使人物彈出,或者引發一個場景。可離線編譯圖像以創建圖像數據庫,也可以在運行時實時添加參考圖像,AR Foundation將檢測這些圖像、圖像邊界,然后返回相應的姿態。
8.共享(Sharing)
借助于ARKit中的多人協作Session(Collaborative Session)或者ARCore中的Cloud Anchor,可以創建適用于iOS或Android設備的多人共享應用。在Android中使用云錨點,一臺設備可以將錨點及其附近的特征點發送到云端進行托管,并可以將這些錨點與同一環境中Android或iOS設備上的其他用戶共享,從而讓用戶能夠同步擁有相同的AR體驗。在ARKit中,利用協作Session或者WorldMap也可以直接在參與方中共享AR體驗。
9.平面(Plane)
AR中大部分內容需要依托于平面進行渲染,如虛擬機器人,只有在檢測到平面網格的地方才能放置。平面可分為水平、垂直兩類,Plane描述了真實世界中的一個二維平面,如平面的中心點、平面的x和z軸方向長度、組成平面多邊形的頂點。檢測到的平面還分為三種狀態,分別是正在跟蹤、可恢復跟蹤、永不恢復跟蹤。不在跟蹤狀態的平面包含的平面信息可能不準確。兩個或者多個平面還會被自動合并。
10.姿態(Pose)
在AR Foundation的所有API中,Pose總是描述從物體的局部坐標系到世界坐標系的變換,即來自AR Foundation API的Pose可以被認同為OpenGL的模型矩陣或DirectX的世界矩陣。隨著AR Foundation對環境理解的不斷加深,它將自動調整坐標系以便其與真實世界保持一致。因此,每一幀圖像都應被認為是處于一個完全獨立的世界坐標空間中。
11.光照估計(Light Estimate)
光照估計給我們提供了一個查詢當前幀光照環境的接口,可以獲取當前相機視圖的光照強度、顏色分量以及光照方向,使用光照估計信息繪制虛擬對象照明效果會更真實,并且可以根據光照方向調整AR中虛擬物體的陰影方向,增強虛擬物體的真實感。
- Vue.js框架與Web前端開發從入門到精通
- Authorware應用案例教程
- UG NX 9.0中文版 基礎教程 (UG工程師成才之路)
- 照相館的故事:Photoshop CC 2018調色合成精修
- 3ds Max/MaxScript印象 腳本動畫制作基礎與應用
- Photoshop+Adobe Camera Raw+Lightroom(攝影后期照片潤飾實戰)
- Photoshop CC 2017從入門到精通
- Android User Interface Development: Beginner's Guide
- After Effects CC 2018影視特效與合成案例教程
- SOLIDWORKS 2020產品設計基本功特訓(第3版)
- 中文版CorelDRAW X6基礎培訓教程(第2版)
- iPhone User Interface Cookbook
- ANSYS Workbench中文版超級學習手冊
- PostgreSQL Replication
- Spark Cookbook 中文版