EasyAR Unity 頭顯擴展包
本文檔介紹了 EasyAR Unity 頭顯擴展包的概念、能力邊界以及創建頭顯擴展包所需的背景知識。
開始之前
- 閱讀 EasyAR 的頭顯支持 瞭解 EasyAR 已經支持的頭顯類型和頭顯上可以運行的 EasyAR 功能。
- 閱讀 Unity 中的 EasyAR 頭顯支持 瞭解在 Unity 中 EasyAR 頭顯支持的整體架構。
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> Library "]
space
space
DeviceB["Device B<br> Library "]
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 將需要您或您的團隊是如下領域的專家:
如果您工作在 Unity 上,您還需要知道這些:
- Unity 開發基礎和 package 使用
- Unity package 開發
- C# 語言基礎,包括 IDisposable 等
另外,有一點在這些領域的知識將幫助您更好地理解系統,尤其是如何發送正確的數據到 EasyAR:
後續步驟
在接下來的文章中,您將瞭解創建頭顯擴展包的完整流程:
- 讓頭顯支持 EasyAR 介紹瞭如何使用模板來創建一個新的頭顯擴展包,並完成基本的輸入擴展開發
- 運行驗證(bring-up) 介紹瞭如何在設備上驗證輸入擴展的正確性
- 發佈擴展包 介紹瞭如何將頭顯擴展包打包並分發給下游用戶