Table of Contents

讓頭顯支持 EasyAR

本文介紹如何使用 EasyAR Sense Unity Plugin 的頭顯擴展包模板來開發一個支持頭顯設備的 EasyAR 擴展包。

開始之前

在進入開發之前,需要先了解如何使用 EasyAR Sense Unity Plugin。

  • 快速入門
  • 運行 AR Session 示例、圖像跟蹤示例 ImageTracking_Targets 和稠密空間地圖示例 SpatialMap_Dense_BallGame,它們的運行效果在手機上和頭顯上是相似的。

頭顯插件開發會涉及一些基礎功能,需要先了解這些內容:

此外,還需要熟悉 如何開發一個 Unity 的 package。

爲 AR/MR 準備設備

  • 準備運動跟蹤/VIO 系統

    確保設備跟蹤誤差受控。一些 EasyAR 功能比如 Mega 可以在某種程度上降低設備累積誤差,但大的局部誤差也會讓 EasyAR 的算法變得不穩定。通常來講,通常我們期望 VIO 漂移在 1‰ 以內。

  • 準備顯示系統

    確保當一個與現實中某個物體大小和輪廓相同的虛擬物體被放置在虛擬世界中,且它與虛擬攝像機的相對變換關係與真實世界中對應物體與設備的變換關係相同時,虛擬物體可以貼合顯示在真實物體上,且移動設備或轉頭不會打破顯示效果。可以參考 Vision Pro 的效果。

  • 準備設備 SDK

    確保已經有 API 可以提供 外部輸入幀數據 。這些數據應該由系統中的兩個且只有兩個時間點產生,需要確保不會出現數據無法對齊的情況。

使用頭顯擴展包模板

通過 Unity 的 Package Manager window 來 使用本地 tarball 文件安裝插件 導入 EasyAR Sense Unity Plugin (package com.easyar.sense)。解壓頭顯擴展模板 (package com.easyar.sense.ext.hmdtemplate)到 Unity 工程的 Packages 目錄,並重命名 Samples~ 文件夾爲 Samples 。

這時應看到這樣的目錄結構:

.
├── Assets
└── Packages
    └── com.easyar.sense.ext.hmdtemplate
        ├── CHANGELOG.md
        ├── Documentation~
        ├── Editor
        ├── LICENSE.md
        ├── package.json
        ├── Runtime
        └── Samples
            └── Combination_BasedOn_HMD
提示

如有需要,可以使用任何 Unity 允許的方式來導入 EasyAR Sense Unity Plugin 和存放頭顯擴展模板。

如果不使用模板,也可以參考 Unity 創建自定義 package 的指南 來創建一個新的 package。

如果設備 SDK 未使用 Unity 的 package 來組織,需要解壓頭顯擴展模板到 Unity 的 Assets 文件夾,然後從解壓的文件中刪除 package.json 以及任何以 .asmdef 爲後綴名的文件。請注意在這種使用方式下,同時使用設備 SDK 與 EasyAR 的用戶將無法獲得合理的版本依賴。

完成運行時輸入擴展

遵循 創建圖像和設備運動數據輸入擴展 方法,修改 Runtime/HMDTemplateFrameSource.cs 並完成適用於頭顯的輸入擴展。這是擴展包最主要的開發工作。

完成編輯器菜單

修改 MenuItems 類中的 "HMD Template" 字符串爲代表設備的名稱。如果需要其它自定義編輯器功能,也可以添加其它腳本。

開發者在 Hierarchy 視圖中選中 AR Session (EasyAR) 並點擊右鍵時會出現這些菜單項:

  • EasyAR Sense > Extensions > Frame Source : [Device Name]:在當前 session 中添加一個該設備的幀數據源。
  • EasyAR Sense > Extensions > Frame Source : [Device Name (keep it only)]:在當前 session 中添加並僅保留一個該設備的幀數據源。

alt text

完成應用示例

示例位於 Samples/Combination_BasedOn_HMD。簡單起見,示例模板中沒有代碼,全部 AR 功能靠場景內容及配置即可完成。

  1. 添加支持設備運行的內容到場景中。

    提示

    如有需要,也可以反過來做,使用一個可以在設備上運行的場景,然後添加 EasyAR 組件和 sample 場景中的其它物體到場景中。

  2. 修改設計用來放在 session 原點下的物體。

    如果場景中定義了 session 原點,移動 EasyARPanda 和 UI 到原點節點下。

    alt text

    EasyARPanda 會提供一個設備運動跟蹤行爲的參照,這會幫助判斷跟蹤不穩定時候的原因。

    這些物體名稱括號內的文字是給擴展開發者看的提示,可以刪除:

    • (Move into Origin if there is any)
    • (Move into Origin if there is any, set constraint source to your rendering camera)
  3. 配置 HUD 按鈕行爲。

    設置 UI 的 constraint source 爲虛擬攝像機,以確保 HUD 按鈕可以按預期工作。

    alt text

  4. 配置 Canvas 的 raycast 功能。

    修改 UI 節點下的 Canvas,確保 raycast 可以工作,以保證所有 UI 按鈕和開關可以按預期工作。

    模板中已經在 Canvas 節點下預先添加了 XR Interaction Toolkit 的 Tracked Device Graphic Raycaster,導入對應的 package 之後即可看到。

    alt text

    如果在設備上運行時不使用 XR Interaction Toolkit,會看到類似下面的缺少腳本提示,可以將其刪除,並添加設備所需的 raycaster 組件。

    alt text

後續步驟

相關主題