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。