Table of Contents

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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARCore["ARCore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARKit["ARKit<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"] 
      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:

  1. 需要使用 EasyAR 未封裝的 ARKit 及 ARCore 功能

    如果需要使用的 ARCore 或 ARKit 提供的一些功能在 EasyAR 中未封裝,可以使用 AR Foundation。比如 AR Foundation 提供了對 ARKit 人臉跟蹤的支持 ARFaceManager,EasyAR 並沒有封裝這個功能。

  2. 在部分系統存在問題的小米手機上使用 ARCore 而非 EasyAR 實現的運動跟蹤

    如果需要在所有支持 ARCore 的小米和紅米手機上使用 ARCore,可以考慮啓用 AR Foundation。由於部分小米和紅米手機系統存在問題,EasyAR 的 ARCore 封裝不支持這些設備,包括米 9、米 10、紅米 K20、紅米 K30、紅米 K40 等系列(這裏列出的不全,設備支持會持續更新)。在這些手機上,默認配置下將不會使用 ARCore,在支持 EasyAR 運動跟蹤的手機上會使用EasyAR 運動跟蹤。

使用 AR Foundation 時 EasyAR 的功能效果並不是最優的。存在兩種情況:

  1. 在 EasyAR 不直接支持的那部分小米和紅米手機上,輸入 EasyAR 的數據是灰度圖而非彩色圖,這會影響部分算法的效果。由於設備自身問題,這是無法通過配置解決的。
  2. 在使用 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 支持的頭顯及其使用方法。

後續步驟

相關主題


  1. Unity 6 及更新版本中,最低支持 2.0.4。Unity 2022.3 中,最低支持 1.2.3,不支持 1.3.x。