EasyAR 對 Unity XR 框架的支援
EasyAR 並不依賴 Unity XR 框架來提供 AR 功能,但可以支援 Unity XR 框架中的部分元件包,以便在 Unity 中使用 EasyAR 的 AR 功能時可以利用 Unity XR 框架提供的功能。以下內容介紹了 EasyAR 對 Unity XR 框架的支援情況,以及在什麼情況下可以考慮使用 AR Foundation。
Unity XR 支援
Unity 透過其 外掛框架及一系列功能包和工具包 支援 XR 開發。EasyAR 也支援這些 Unity XR 元件包,以便在 Unity 中使用 EasyAR 的 AR 功能時可以利用 Unity XR 框架提供的功能。
EasyAR 支援以下 Unity XR 元件包:
| 顯示名稱 | 包名 | 最低支援版本 | 是否必需 | 用途 |
|---|---|---|---|---|
| XR Core Utilities | com.unity.xr.core-utils | 2.0.0 | 否 | 提供 Unity.XR.CoreUtils.XROrigin 支援 |
| AR Foundation | com.unity.xr.arfoundation | 5.0.0 | 否 | 提供 AR Foundation 支援 |
| XR Plugin Management | com.unity.xr.management | 3.0.0 | 否 | 提供 ARCore SDK 管理相容及取得執行時 XR Loader 類型 |
| XR Interaction Toolkit | com.unity.xr.interaction.toolkit | 2.0.0 | 否 | 未直接使用 |
| PolySpatial visionOS | com.unity.polyspatial.visionos | 2.0.41 | 否 | 未直接使用 |
| Apple visionOS XR Plugin | com.unity.xr.visionos | 2.0.41 | 否 | 未直接使用 |
| Apple ARKit XR Plugin | com.unity.xr.arkit | 5.0.0 | 否 | 未直接使用 |
| Google ARCore XR Plugin | com.unity.xr.arcore | 5.0.0 | 否 | 提供 ARCore SDK 管理相容 |
附註
EasyAR 並不依賴 Unity XR 框架來提供 AR 功能。因此,在沒有 AR Foundation 等 Unity XR 元件的使用需求時,可以不安裝這些元件包,EasyAR 仍然可以在受支援的裝置上正常工作。
AR Foundation 支援
AR Foundation 是 Unity 提供的 AR 開發框架,其 AR 功能透過底層系統或第三方實現,常用於支援 ARCore、ARKit 以及部分頭顯。
EasyAR 與 AR Foundation 的關係
block
columns 6
block:groupApp:6
block:groupAppWrapper
space
App1["EasyAR<br>App"]
space
App2["EasyAR + AR Foundation<br>App"]
space
App3["AR Foundation<br>App"]
end
end
block:groupSensePlugin:4
columns 1
SensePlugin["EasyAR Sense Unity Plugin"]
space
end
block:groupARF
columns 1
ARF["AR Foundation"]
space
end
block:groupXRI
columns 1
XRI["XR Interaction Toolkit"]
space
end
block:groupAREngineInterop
columns 1
AREngineInterop["EasyAR<br>AR Engine Interop"]
space
end
block:groupSense:3
columns 1
Sense["EasyAR Sense"]
block:groupSenseWrapper
Image["Image<br>Tracker"]
Object["Sparse<br>SpatialMap"]
MotionTracker["Motion<br>Tracker"]
MARCore["ARCore"]
MARKit["ARKit"]
Others["..."]
end
end
block:groupXRSubsystem:2
columns 1
XRSubsystem["XR Subsystems"]
XRSDK["Unity XR SDK"]
end
block:groupSystem:6
columns 1
System["System Library"]
block:groupSystemWrapper
space
AREngine["AR Engine<br> Library "]
space
ARCore["ARCore<br> Library "]
space
ARKit["ARKit<br> Library "]
space
end
end
SensePlugin --> App1
SensePlugin --> App2
ARF --> App2
ARF --> App3
groupSense --> SensePlugin
groupAREngineInterop --> SensePlugin
AREngine --> groupAREngineInterop
XRSubsystem --> ARF
XRSubsystem --> XRI
ARCore --> MARCore
ARKit --> MARKit
ARCore --> XRSDK
ARKit --> XRSDK
style groupApp fill:none,stroke:none,stroke-width:0px
style groupAppWrapper fill:none,stroke:none,stroke-width:0px
style groupSensePlugin fill:none,stroke:none,stroke-width:0px
style groupARF fill:none,stroke:none,stroke-width:0px
style groupXRI fill:none,stroke:none,stroke-width:0px
style AREngineInterop fill:none,stroke:none,stroke-width:0px,color:#fff
style Sense fill:none,stroke:none,stroke-width:0px,color:#fff
style groupSenseWrapper fill:none,stroke:none,stroke-width:0px
style XRSubsystem fill:none,stroke:none,stroke-width:0px,color:#fff
style System fill:none,stroke:none,stroke-width:0px
style groupSystemWrapper fill:none,stroke:none,stroke-width:0px
classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff
class groupAREngineInterop EasyAR
class groupSense EasyAR
class SensePlugin EasyAR
classDef Unity fill:#636,stroke:#333,color:#fff
class groupXRSubsystem Unity
class ARF Unity
class XRI Unity
EasyAR 與 AR Foundation 是兩個獨立的 AR 框架,EasyAR 並不依賴 AR Foundation 來實現其 AR 功能。EasyAR 也可以透過系統中的 ARKit、ARCore 等系統庫來實現運動追蹤能力。同時,EasyAR 還提供了 AR Foundation 所不具備的兩種運動追蹤實現:EasyAR 自身的運動追蹤實現以及透過 AR Engine 提供的運動追蹤實現,從而提供了相比 AR Foundation 更加廣泛的裝置支援。
同時,EasyAR 可以取得 AR Foundation 執行時的資料,在 AR Foundation 執行時利用它所提供的運動追蹤能力驅動其它 AR 功能執行,從而提供對 AR Foundation 的相容性。這些功能包括:
- Mega
- 稀疏空間地圖
- 稠密空間地圖
- 使用運動融合的影像追蹤和物體追蹤
可以參考 運動追蹤與 EasyAR 功能 了解更詳細的運動追蹤與 EasyAR 功能的關係。
什麼情況下需要使用 AR Foundation
多數情況下,可以不使用 AR Foundation,EasyAR 會在比 AR Foundation 所支援的更加廣泛的裝置上正常工作。通常在以下兩種情況下可以考慮使用 AR Foundation:
需要使用 EasyAR 未封裝的 ARKit 及 ARCore 功能
如果需要使用的 ARCore 或 ARKit 提供的一些功能在 EasyAR 中未封裝,可以使用 AR Foundation。比如 AR Foundation 提供了對 ARKit 人臉追蹤的支援 ARFaceManager,EasyAR 並沒有封裝這個功能。
在部分系統存在問題的小米手機上使用 ARCore 而非 EasyAR 實現的運動追蹤
如果需要在所有支援 ARCore 的小米和紅米手機上使用 ARCore,可以考慮啟用 AR Foundation。由於部分小米和紅米手機系統存在問題,EasyAR 的 ARCore 封裝不支援這些裝置,包括米 9、米 10、紅米 K20、紅米 K30、紅米 K40 等系列(這裡列出的不全,裝置支援會持續更新)。在這些手機上,預設配置下將不會使用 ARCore,在支援 EasyAR 運動追蹤的手機會使用EasyAR 運動追蹤。
使用 AR Foundation 時 EasyAR 的功能效果並不是最優的。存在兩種情況:
- 在 EasyAR 不直接支援的那部分小米和紅米手機上,輸入 EasyAR 的資料是灰階圖而非彩色圖,這會影響部分演算法的效果。由於裝置自身問題,這是無法透過配置解決的。
- 在使用 Mega 時,AR Foundation 預設使用的配置並不是最優的。
注意
可以透過修改 AR Foundation 的 ARCameraManager.currentConfiguration 來取得更優的資料輸入,啟用 ARCoreARFoundationFrameSource.OptimizeConfigurationForTracking 可以自動完成最佳 ARCameraManager.currentConfiguration 選擇。但需要注意部分手機自身(比如小米 10)存在問題,在修改配置之後無法取得影像,EasyAR 將無法使用(應用有影像背景但 EasyAR 功能沒有任何反應),因此通常並不建議啟用,如需使用需要做好 EasyAR 無法使用時的降級方案。
頭顯支援
由於 Unity XR 框架未提供足夠充分的資料介面,因此 EasyAR 並不透過 Unity XR 框架來支援頭顯。
在支援 Unity XR 框架的頭顯上,EasyAR 會透過 XR Core Utilities 支援 Unity.XR.CoreUtils.XROrigin 的使用,但並不使用 Unity XR 框架來實現頭顯的支援。EasyAR 不會影響 XR Interaction Toolkit 的功能,只要裝置支援就可以正常使用。
一般來說,頭顯廠商各自提供了 SDK 或系統介面來提供這些資料,EasyAR 透過系統介面以及廠商的 SDK 來支援頭顯。有些時候這些 SDK 並不是完全公開的,EasyAR 會與廠商合作提供完整支援。Unity 中的頭顯支援 介紹了 EasyAR 支援的頭顯及其使用方法。
後續步驟
- 了解如何 在 EasyAR 專案中啟用 AR Foundation
- 了解 EasyAR 專案中的 AR Foundation 場景配置和用法
- 了解如何根據裝置支援情況 自動切換 AR Foundation