圖像跟蹤

圖像跟蹤示例


此示例演示了(le)如何檢測和(hé)增強現實世界中的(de)圖像目标。有關圖像跟蹤的(de)基本信息以及 AR Foundation 的(de) AR Tracked Image Manager 組件的(de)功能,請參閱 Unity 文檔。要使用(yòng)此功能,必須在 OpenXR 插件設置中啓用(yòng)它,路徑爲 Project Settings > XR Plug-in Management > OpenXR (> Android Tab)。

 

示例工作原理(lǐ)

首先,确保在 OpenXR 項目設置中啓用(yòng)了(le)圖像跟蹤功能。


提示!

你可(kě)以在“測試用(yòng)圖像目标”部分(fēn)找到使用(yòng)的(de)參考圖像。


圖像目标通(tōng)過 XR Reference Image Library 提供給底層 XR 插件。添加的(de)圖像需要有一個(gè)名稱,這(zhè)将有助于以後識别被跟蹤的(de)目标。此外,還(hái)需要将“Keep Texture at Runtime”标志設置爲 true。這(zhè)将使子系統能夠将紋理(lǐ)數據傳遞給 Snapdragon Spaces Services 以進行跟蹤。

 

此外,在示例中,圖像目标的(de)高(gāo)度爲 26 厘米(當打印爲 DIN A4 或 US letter 尺寸時(shí))。正确的(de)尺寸對(duì)于準确的(de)姿态估計和(hé)後續的(de)增強現實放置至關重要。因此,啓用(yòng)“Specify Size”選項後,必須指定圖像目标的(de)實際尺寸。

 

圖片3.png


在導入設置中,紋理(lǐ)的(de)“讀取/寫入”标志應啓用(yòng),并将格式設置爲 RGB 24 位(也(yě)可(kě)能顯示爲 RGB8)。如果格式設置爲“自動”,項目的(de)圖形設置可(kě)能會錯誤地指定格式。


圖片4.png

 

将 ARTrackedImageManager 組件添加到 ARSessionOrigin GameObject 中,将啓用(yòng) Snapdragon Spaces 包中的(de)圖像跟蹤子系統。該組件提供了(le)三個(gè)字段:一個(gè)用(yòng)于之前創建的(de) RuntimeReferenceImageLibrary,一個(gè)用(yòng)于指定最大(dà)移動圖像數量,另一個(gè)用(yòng)于定義在檢測到跟蹤圖像時(shí)生成的(de)預制體。所使用(yòng)的(de)預制體是一個(gè)指示跟蹤圖像方向的(de) gizmo。

 

通(tōng)過訂閱 ARTrackedImageManager 的(de)方法以監聽(tīng)跟蹤圖像的(de)變化(huà),可(kě)以爲跟蹤圖像的(de)狀态和(hé)位置設置相應的(de) UI 信息,如下(xià)方的(de)簡化(huà)代碼示例所示。

 

警告!

爲了(le)使此示例正常工作,XR Reference Image Library 中設置的(de)參考圖像名稱必須唯一。任何重複的(de)名稱會導緻 _trackedImages 字典中的(de)哈希碼沖突。


圖片5.png


可(kě)選的(de) Spaces Reference Image Configurator 組件也(yě)可(kě)以添加到與 ARTrackedImageManager 相同的(de) GameObject 上。該組件爲每個(gè)跟蹤圖像提供了(le)額外的(de)配置選項。

 

Tracking Mode 字段允許爲每個(gè)圖像定義三種不同的(de)跟蹤模式之一:

● 動态(默認) - 動态模式每幀更新跟蹤圖像的(de)位置,适用(yòng)于移動和(hé)靜态目标。如果找不到跟蹤圖像,則不會報告位置或姿态。相較于其他(tā)跟蹤模式,此模式的(de)功耗較高(gāo)。如果沒有找到 Spaces Reference Image Configurator 組件,所有跟蹤圖像将默認使用(yòng)此模式。

 

● 靜态 - 靜态模式适用(yòng)于已知爲靜态的(de)圖像,這(zhè)樣可(kě)以降低功耗并提高(gāo)性能。例如,這(zhè)些圖像可(kě)能固定在地闆或牆壁上。此模式适用(yòng)于持續顯示增強現實效果,即使圖像不再可(kě)見。靜态模式下(xià)的(de)圖像位置不會更新,無論圖像是否移動或超出視線。

 

● 自适應 - 自适應模式适用(yòng)于靜态圖像,但如果圖像移動,會定期更新跟蹤圖像的(de)姿态,大(dà)約每 5 幀更新一次。如果頭戴顯示器(HMD)移動了(le),圖像姿态會根據顯示刷新率進行調整。對(duì)于超出視線的(de)圖像,跟蹤最終會丢失。此模式在功耗和(hé)跟蹤精度之間取得(de)平衡,适用(yòng)于将保持固定位置的(de)圖像。


模式

添加

更新

移除

動态(默認)

進入幀時(shí)

每幀更新

退出幀時(shí)

靜态

進入幀時(shí)

不更新

新圖像被跟蹤

自适應

進入幀時(shí)

周期性更新(大(dà)約每 5 幀更新一次,圖像移動時(shí))

退出幀時(shí)


在啓動應用(yòng)程序時(shí),每個(gè)被跟蹤的(de)圖像會初始使用(yòng)在 Spaces Reference Image Configurator 組件中定義的(de)跟蹤模式,但如果需要,可(kě)以在運行時(shí)更新此值,如下(xià)面的(de)簡化(huà)示例代碼所示。

 

圖片6.png


運行時(shí)切換參考庫

可(kě)以在運行時(shí)更換 AR Tracked Image Manager 使用(yòng)的(de)參考圖像庫,而無需切換場(chǎng)景,爲實現這(zhè)一點,請注意以下(xià)事項;

 

● 必須重新啓動圖像跟蹤子系統以使庫更改生效。這(zhè)可(kě)以通(tōng)過重新啓用(yòng) AR Tracked Image Manager 組件來(lái)完成。

● 必須在 Spaces Reference Image Configurator 組件中重新同步新的(de)庫的(de)跟蹤模式,使用(yòng)組件的(de) SyncTrackingModes 函數。需要提供一個(gè)包含參考圖像名稱和(hé)所需初始跟蹤模式的(de) Dictionary<string, SpacesImageTrackingMode> 作爲參數。

 

警告!

如果在更換庫時(shí)未重新應用(yòng)跟蹤模式,則 Spaces Reference Image Configurator 的(de) SetTrackingModeForReferenceImage 函數在未找到先前庫中的(de)參考圖像名稱時(shí)會失敗。

在這(zhè)種情況下(xià),動态模式将作爲參考圖像的(de)默認跟蹤模式。


下(xià)面的(de)示例代碼實現了(le)一個(gè) SwapTargetLibrary 函數,用(yòng)于在運行時(shí)切換到不同的(de)參考圖像庫。首先禁用(yòng) Tracked Image Manager 組件,然後在 Spaces Reference Image Configurator 組件的(de) SyncTrackingModes 函數中重新同步圖像跟蹤模式。參考圖像名稱和(hé)所需初始跟蹤模式的(de) Dictionary<string, SpacesImageTrackingMode> 由輔助函數 CreateTrackingModesDictionary 提供。最後,将新的(de)參考庫應用(yòng)于 AR Tracked Image Manager 組件,并重新啓用(yòng)該組件。


圖片7.png