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