Table of Contents

EasyAR Unity 頭顯擴展包

本文檔介紹了 EasyAR Unity 頭顯擴展包的概念、能力邊界以及創建頭顯擴展包所需的背景知識。

開始之前

EasyAR Unity 頭顯擴展包是什麼

EasyAR Unity 頭顯擴展包是一個 Unity package,包含一系列代碼和示例,幫助您在您的頭顯設備上使用 EasyAR Sense 的功能。通過這個擴展包,您可以將 EasyAR Sense 的大部分功能(如圖像跟蹤、稠密空間地圖等)集成到您的設備上,從而利用 EasyAR 提供的強大 AR 功能。

使用 EasyAR Unity 頭顯擴展包是 EasyAR 頭顯支持的其中一種方式。下圖展示了 EasyAR 在 Unity 中的整體架構,以及頭顯擴展包在其中的位置。

block
  columns 4
  block:groupApp:4
    block:groupAppWrapper
      space
      App1["EasyAR + Device A<br>App"]
      space
      App2["EasyAR<br>App"]
      space
      App3["EasyAR + Device B<br>App"]
    end
  end
  
  block:groupSensePluginExtension
    columns 1
    SensePluginExtension["EasyAR Sense Unity Plugin<br>Extension for Device A"]
    space
  end
  block:groupSensePlugin
    columns 1
    SensePlugin["EasyAR Sense Unity Plugin"]
    space
  end
  block:groupXRI
    columns 1
    XRI["XR Interaction Toolkit"]
    space
  end
  block:groupARF
    columns 1
    ARF["AR Foundation"]
    space
  end
  
  block:groupDeviceAUnity
    columns 1
    DeviceAUnity["Device A<br>Unity SDK"]
    space
  end
  block:groupSense
    columns 1
    Sense["EasyAR Sense"]
    block:groupSenseWrapper
      MDeviceB["Device B<br>CameraDevice"]
      Others["..."]
    end
  end
  block:groupXRSubsystem:2
    columns 1
    XRSubsystem["XR Subsystems"]
    XRSDK["Unity XR SDK"]
  end

  block:groupSystem:4
    columns 1
    System["Native Library"]
    block:groupSystemWrapper
      space
      DeviceA["Device A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      space
      DeviceB["Device B<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
  
  SensePluginExtension --> App1
  SensePlugin --> App1
  SensePlugin --> App2
  SensePlugin --> App3
  ARF --> App3
  XRI --> App1
  XRI --> App3
  groupSense --> SensePlugin
  groupDeviceAUnity --> SensePluginExtension
  SensePlugin --> SensePluginExtension
  DeviceA --> groupDeviceAUnity
  DeviceA --> XRSDK
  XRSubsystem --> ARF
  XRSubsystem --> XRI
  DeviceB --> MDeviceB
  DeviceB --> 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 DeviceAUnity fill:none,stroke:none,stroke-width:0px
  style Sense fill:none,stroke:none,stroke-width:0px,color
  style groupSenseWrapper fill:none,stroke:none,stroke-width:0px
  style XRSubsystem fill:none,stroke:none,stroke-width:0px
  style System fill:none,stroke:none,stroke-width:0px
  style groupSystemWrapper fill:none,stroke:none,stroke-width:0px
  style groupSensePluginExtension fill:none,stroke:none,stroke-width:0px  

  classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff
  class SensePluginExtension EasyAR

圖中列出了兩種典型的頭顯支持方式:通過 Unity 頭顯擴展包對接設備 SDK(Device A),以及在 EasyAR Sense 庫中直接對接設備 SDK(Device B)。本文檔主要介紹前者。

我可以創建自己的頭顯擴展包嗎?

目前,AR/VR/MR/XR 行業內還沒有形成非常統一的接口方案,雖然 OpenXR 是個很好的候選,但規範演化和行業實現還需要時間。所以通常來說市販設備直接運行 EasyAR 並不那麼容易,大概率存在數據接口缺失的情況。隨着行業的發展,一些新興設備也可能具備良好的接口支持,比如 2024 年蘋果公司開放了 Vision Pro 的相關接口,這些接口已經足夠用來支撐 EasyAR 運行,不過使用起來還是需要一些專業知識。

如果您無法做出判斷,建議聯繫硬件製造商或 EasyAR 商務以獲取相應的設備支持。

如果您是硬件製造商,並且希望在您的設備上支持 EasyAR 的功能,您可以參考接下來的文檔內容來創建一個頭顯擴展包,從而讓 EasyAR 的大部分功能可以在您的設備上運行。本文檔在提供數據和接口規範的同時並不限定所有實現細節,任何實現方式或接口定義都可以討論,歡迎通過商務渠道聯繫溝通。

本文檔覆蓋的硬件自身需要有運動跟蹤或 SLAM 能力,EasyAR 的功能需要運行在良好的設備跟蹤能力之上,通常不建議靠 EasyAR 的功能優化設備的跟蹤,這會產生循環依賴進而理論上放大誤差並導致整體系統趨於不穩。如果設備本身沒有運動跟蹤能力,那麼支持方案並不在本文檔覆蓋範圍之內,如有需要可通過商務渠道進行溝通。

頭顯擴展包的能力邊界

頭顯擴展包的目標是讓 EasyAR Sense 的大部分功能可以在您的設備上運行。爲了實現這個目標,您需要了解頭顯擴展包的能力邊界。

頭顯擴展包所包含的內容

您將實現的擴展是:

  • 使用 自定義相機功能,從您的設備 API 抓取數據併發送進 EasyAR Sense 的一系列代碼。
  • 在 Unity 中,頭顯擴展會使用 外部幀數據源EasyAR Sense Unity Plugin 定義的一套 EasyAR Sense 數據流來簡化自定義相機開發。
  • 在 Unity 中,頭顯擴展是一個 Unity package,包含運行時腳本,編輯器腳本和擴展的 sample,您或 EasyAR 可以將它分發給下游用戶。
提示

如果您不希望將對接細節暴露在外部系統中,可以聯繫 EasyAR 進行溝通。在 EasyAR Sense 內部使用 C 接口直接對接是可行且有先例的。

您在實現擴展的時候,可能會:

  • 修改您 SDK 的接口設計和內部實現
  • 與您的團隊一起討論確認數據獲取和使用方案。
  • 大量時間進行數據正確性驗證而不是寫代碼。

完成擴展後,您將會看到:

  • 大多數 EasyAR Sense 功能在您的設備上可以使用,這些功能會利用您設備的運動跟蹤能力。
  • EasyAR Sense 內支持的 EasyAR 雲服務在您的設備上可以使用。
  • 只能使用 EasyAR XR license。個人版、專業版以及經典版的 license 無法在您的設備上使用。
  • 使用自定義相機時的所有 EasyAR license 的限制以相同方式適用於您的設備。

頭顯擴展包所不包含的內容

這個擴展不能脫離 EasyAR Sense 使用:

  • 這個頭顯擴展不會獨立運行,作爲依賴,EasyAR Sense 也是需要的。在 Unity 中則必須使用 EasyAR Sense Unity Plugin
  • 它不會直接調用 EasyAR 雲服務 API(比如 EasyAR Mega 定位服務),這些調用會在 EasyAR Sense 內部完成。
  • 在 Unity 中,它不會直接調用 AR 功能(比如圖像跟蹤)的接口方法,它們在 EasyAR Sense Unity Plugin 內部完成。
  • 在 Unity 中,它不會修改場景中物體或跟蹤目標的 transform,它們在 EasyAR Sense Unity Plugin 內部完成。

這個擴展不能脫離您的設備 SDK 使用:

  • 在 Unity 中,頭顯擴展或 EasyAR Sense Unity Plugin 不會修改場景中相機的 transform,這必須在您的設備 SDK 或其依賴路徑中完成。

通過頭顯擴展有一些 EasyAR 功能仍是無法使用的:

  • 表面跟蹤功能將無法使用。
  • EasyAR 自身的運動跟蹤將無法使用。
  • 平面檢測(EasyAR 運動跟蹤的一部分)將無法使用。

如何在我的設備上使用 Mega?

在設備上運行 Mega 是很多用戶關心的問題。在 Unity 中,Mega 服務是運行在 EasyAR Sense 諸多基礎功能之上的一個功能模塊,所以只要您的設備完整支持 EasyAR Sense,那麼 Mega 也會被支持。

一般來說,不建議在一開始就直接在設備上運行 Mega 示例來驗證設備對 Mega 的支持情況,因爲 Mega 會綜合利用所有輸入數據,並且其對這些數據的誤差容忍度較大。直接運行 Mega 示例很可能會因爲數據接口不匹配或數據質量不佳而導致無法獲得合理的運行效果,並且無法判斷問題出在哪裏,這會爲日後的調試帶來很大困難。

重要事項

Mega 服務對設備的運動跟蹤能力有一定要求。如果設備的運動跟蹤能力不佳,那麼 Mega 的表現也會受到影響。在大範圍 AR 場景中,還需要特別關注室內外的表現差異。

重要事項

Mega 一般服務於大空間場景,因此需要格外關注遠距離物體以及轉動頭部或移動時物體的 顯示 效果。如果設備的顯示系統誤差較大,那麼即使 Mega 本身運行正常,用戶也會感覺虛擬物體無法正確貼合現實物體。

需要的背景知識和團隊配置

創建頭顯擴展包不是一個簡單的任務,需要您和您的團隊在多個領域進行深入的工作。通常來說,要完成頭顯擴展,需要 Unity 開發參與的同時投入 Unity 開發之外的團隊人員。由於缺少標準,只在 3D 引擎上面修改通常無法完成頭顯擴展,建議從第一天起就讓系統工程師和 SDK 工程師等底層開發工程師參與進來。

打造 AR/VR 設備需要一些領域知識,相似地,在設備上運行和驗證 EasyAR Sense 將需要您或您的團隊是如下領域的專家:

  • 您設備的物理結構和渲染系統
  • 相機系統幾何
  • SDK 開發
  • 常規 Android debug 技能,比如 adb(中國大陸國際

如果您工作在 Unity 上,您還需要知道這些:

另外,有一點在這些領域的知識將幫助您更好地理解系統,尤其是如何發送正確的數據到 EasyAR:

  • Android 開發(中國大陸國際
  • 幾何視覺,尤其是圖像匹配和 3D 重建

後續步驟

在接下來的文章中,您將瞭解創建頭顯擴展包的完整流程:

相關主題