圖像跟蹤示例
此示例演示了如何檢測和增強現實世界中(zhōng)的圖像目标。有(yǒu)關圖像跟蹤的基本信息以及 AR Foundation 的 AR Tracked Image Manager 組件的功能(néng),請參閱 Unity 文(wén)檔。要使用(yòng)此功能(néng),必須在 OpenXR 插件設置中(zhōng)啓用(yòng)它,路徑為(wèi) Project Settings > XR Plug-in Management > OpenXR (> Android Tab)。
示例工(gōng)作(zuò)原理(lǐ)
首先,确保在 OpenXR 項目設置中(zhōng)啓用(yòng)了圖像跟蹤功能(néng)。
提示! 你可(kě)以在“測試用(yòng)圖像目标”部分(fēn)找到使用(yòng)的參考圖像。 |
圖像目标通過 XR Reference Image Library 提供給底層 XR 插件。添加的圖像需要有(yǒu)一個名(míng)稱,這将有(yǒu)助于以後識别被跟蹤的目标。此外,還需要将“Keep Texture at Runtime”标志(zhì)設置為(wèi) true。這将使子系統能(néng)夠将紋理(lǐ)數據傳遞給 Snapdragon Spaces Services 以進行跟蹤。
此外,在示例中(zhōng),圖像目标的高度為(wèi) 26 厘米(當打印為(wèi) DIN A4 或 US letter 尺寸時)。正确的尺寸對于準确的姿态估計和後續的增強現實放置至關重要。因此,啓用(yòng)“Specify Size”選項後,必須指定圖像目标的實際尺寸。
在導入設置中(zhōng),紋理(lǐ)的“讀取/寫入”标志(zhì)應啓用(yòng),并将格式設置為(wèi) RGB 24 位(也可(kě)能(néng)顯示為(wèi) RGB8)。如果格式設置為(wèi)“自動”,項目的圖形設置可(kě)能(néng)會錯誤地指定格式。
将 ARTrackedImageManager 組件添加到 ARSessionOrigin GameObject 中(zhōng),将啓用(yòng) Snapdragon Spaces 包中(zhōng)的圖像跟蹤子系統。該組件提供了三個字段:一個用(yòng)于之前創建的 RuntimeReferenceImageLibrary,一個用(yòng)于指定最大移動圖像數量,另一個用(yòng)于定義在檢測到跟蹤圖像時生成的預制體(tǐ)。所使用(yòng)的預制體(tǐ)是一個指示跟蹤圖像方向的 gizmo。
通過訂閱 ARTrackedImageManager 的方法以監聽跟蹤圖像的變化,可(kě)以為(wèi)跟蹤圖像的狀态和位置設置相應的 UI 信息,如下方的簡化代碼示例所示。
警告! 為(wèi)了使此示例正常工(gōng)作(zuò),XR Reference Image Library 中(zhōng)設置的參考圖像名(míng)稱必須唯一。任何重複的名(míng)稱會導緻 _trackedImages 字典中(zhōng)的哈希碼沖突。 |
可(kě)選的 Spaces Reference Image Configurator 組件也可(kě)以添加到與 ARTrackedImageManager 相同的 GameObject 上。該組件為(wèi)每個跟蹤圖像提供了額外的配置選項。
Tracking Mode 字段允許為(wèi)每個圖像定義三種不同的跟蹤模式之一:
● 動态(默認) - 動态模式每幀更新(xīn)跟蹤圖像的位置,适用(yòng)于移動和靜态目标。如果找不到跟蹤圖像,則不會報告位置或姿态。相較于其他(tā)跟蹤模式,此模式的功耗較高。如果沒有(yǒu)找到 Spaces Reference Image Configurator 組件,所有(yǒu)跟蹤圖像将默認使用(yòng)此模式。
● 靜态 - 靜态模式适用(yòng)于已知為(wèi)靜态的圖像,這樣可(kě)以降低功耗并提高性能(néng)。例如,這些圖像可(kě)能(néng)固定在地闆或牆壁上。此模式适用(yòng)于持續顯示增強現實效果,即使圖像不再可(kě)見。靜态模式下的圖像位置不會更新(xīn),無論圖像是否移動或超出視線(xiàn)。
● 自适應 - 自适應模式适用(yòng)于靜态圖像,但如果圖像移動,會定期更新(xīn)跟蹤圖像的姿态,大約每 5 幀更新(xīn)一次。如果頭戴顯示器(HMD)移動了,圖像姿态會根據顯示刷新(xīn)率進行調整。對于超出視線(xiàn)的圖像,跟蹤最終會丢失。此模式在功耗和跟蹤精(jīng)度之間取得平衡,适用(yòng)于将保持固定位置的圖像。
模式 | 添加 | 更新(xīn) | 移除 |
動态(默認) | 進入幀時 | 每幀更新(xīn) | 退出幀時 |
靜态 | 進入幀時 | 不更新(xīn) | 新(xīn)圖像被跟蹤 |
自适應 | 進入幀時 | 周期性更新(xīn)(大約每 5 幀更新(xīn)一次,圖像移動時) | 退出幀時 |
在啓動應用(yòng)程序時,每個被跟蹤的圖像會初始使用(yòng)在 Spaces Reference Image Configurator 組件中(zhōng)定義的跟蹤模式,但如果需要,可(kě)以在運行時更新(xīn)此值,如下面的簡化示例代碼所示。
運行時切換參考庫
可(kě)以在運行時更換 AR Tracked Image Manager 使用(yòng)的參考圖像庫,而無需切換場景,為(wèi)實現這一點,請注意以下事項;
● 必須重新(xīn)啓動圖像跟蹤子系統以使庫更改生效。這可(kě)以通過重新(xīn)啓用(yòng) AR Tracked Image Manager 組件來完成。
● 必須在 Spaces Reference Image Configurator 組件中(zhōng)重新(xīn)同步新(xīn)的庫的跟蹤模式,使用(yòng)組件的 SyncTrackingModes 函數。需要提供一個包含參考圖像名(míng)稱和所需初始跟蹤模式的 Dictionary<string, SpacesImageTrackingMode> 作(zuò)為(wèi)參數。
警告! 如果在更換庫時未重新(xīn)應用(yòng)跟蹤模式,則 Spaces Reference Image Configurator 的 SetTrackingModeForReferenceImage 函數在未找到先前庫中(zhōng)的參考圖像名(míng)稱時會失敗。 在這種情況下,動态模式将作(zuò)為(wèi)參考圖像的默認跟蹤模式。 |
下面的示例代碼實現了一個 SwapTargetLibrary 函數,用(yòng)于在運行時切換到不同的參考圖像庫。首先禁用(yòng) Tracked Image Manager 組件,然後在 Spaces Reference Image Configurator 組件的 SyncTrackingModes 函數中(zhōng)重新(xīn)同步圖像跟蹤模式。參考圖像名(míng)稱和所需初始跟蹤模式的 Dictionary<string, SpacesImageTrackingMode> 由輔助函數 CreateTrackingModesDictionary 提供。最後,将新(xīn)的參考庫應用(yòng)于 AR Tracked Image Manager 組件,并重新(xīn)啓用(yòng)該組件。