圖像追蹤示例
此示例演示了(le)如何檢測和(hé)增強真實世界中的(de)圖像目标。
有關自定義可(kě)追蹤對(duì)象更新和(hé) Unreal Engine 的(de) AR Trackable Notify 組件的(de)基本信息,請參閱 Unreal Engine 文檔,要使用(yòng)此功能,需要在 OpenXR 插件設置中啓用(yòng),路徑爲:Project Settings > Snapdragon Spaces 插件。
示例工作原理(lǐ)
默認情況下(xià),當示例運行并識别到圖像時(shí),會在物(wù)理(lǐ)目标上生成一個(gè)小工具。當前示例僅能識别一個(gè)圖像,并在地圖中包含的(de) UI 面闆上顯示該圖像的(de)世界位置。
圖像 AR
BP_ImageTrackingManager 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)負責通(tōng)過事件系統創建和(hé)銷毀 BP_Gizmo_AugmentedImage 參與者,它将來(lái)自 AR Trackable Notify 組件的(de)事件綁定起來(lái),以響應 AR 可(kě)追蹤圖像的(de)變化(huà),當系統檢測到圖像時(shí),會觸發 On Add/Update/Remove Tracked Image 事件。在示例藍圖中,如果要啓動檢測,需将 Toggle AR Capture 設置爲 ON;如果要停止檢測并銷毀所有生成的(de) AR 圖像,則将其設置爲 OFF,也(yě)可(kě)以使用(yòng) Toggle Spaces Feature 作爲啓用(yòng)該功能的(de)替代方法。此外,必須将 Scene Understanding 設置爲該節點的(de)捕捉類型。
圖像 AR 會話(huà)配置
系統使用(yòng) D_SpacesSessionConfig_ImageTracking 資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Core)來(lái)檢測圖像。該資産是從 SpacesSessionConfig 類派生的(de)數據資産。
會話(huà)配置文件提供了(le)三個(gè)字段:一個(gè)用(yòng)于定義圖像的(de)大(dà)小,一個(gè)用(yòng)于指定應跟蹤的(de)最大(dà)同時(shí)圖像數量,另一個(gè)用(yòng)于引用(yòng)候選圖像進行跟蹤。
圖像跟蹤器的(de)創建是在異步線程中進行的(de),以避免在跟蹤圖像數量非常多(duō)時(shí)出現凍結問題。因此,圖像跟蹤有時(shí)可(kě)能會出現啓動延遲。請監聽(tīng) On Spaces Image Tracking Is Ready 委托,以了(le)解圖像何時(shí)準備好進行跟蹤。
AR 候選圖像
Unreal Engine 使用(yòng)名爲 AR Candidate Image(https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/ARSettings/AddCandidateImage?application_version=4.27) 的(de)專用(yòng)資産類型來(lái)創建 XR 系統需要跟蹤的(de)圖像引用(yòng),開發者可(kě)以添加任意數量的(de) AR Candidate Images,并将它們分(fēn)配到 AR Session Config 中指定的(de)數組。
要創建 AR Candidate Image,首先需要将要跟蹤的(de)圖像導入爲紋理(lǐ)資産到 Content 文件夾中。創建的(de)紋理(lǐ)資産應在壓縮設置中選擇 UserInterface2D (RGBA),并建議(yì)關閉 mip maps。
提示! 您可(kě)以在“測試圖像目标”部分(fēn)找到所使用(yòng)的(de)參考圖像。 |
接下(xià)來(lái)需要創建 AR Candidate Image 資産,其中 Candidate Texture 字段需要引用(yòng)已創建的(de)紋理(lǐ)資産,每個(gè) AR Candidate Image 應該有一個(gè)唯一的(de)标識符,可(kě)以在 Friendly Name 字段中設置,如果在同一個(gè) AR Session Config 中使用(yòng)了(le)相同的(de)名稱,将會導緻哈希碼沖突。
最後一步是通(tōng)過寬度/高(gāo)度字段定義圖像的(de)物(wù)理(lǐ)尺寸(以厘米爲單位),準确的(de)尺寸對(duì)于正确的(de)姿态估計和(hé)後續的(de)增強顯示非常重要。這(zhè)些數據會根據圖像的(de)比例和(hé) Orientation 字段中定義的(de)方向自動填充,不幸的(de)是,Unreal Engine 當前的(de)方向設置是颠倒的(de),因此開發者需要将 Portrait 設置爲用(yòng)于橫向圖像,将 Landscape 設置爲用(yòng)于縱向圖像。
如果 AR Candidate Image 資産的(de)父級是 Spaces AR Candidate Image,Snapdragon Spaces 插件提供了(le)幾種不同的(de)跟蹤模式供選擇:
● 動态模式:每幀更新跟蹤圖像的(de)位置,适用(yòng)于移動和(hé)靜态目标。如果無法找到跟蹤圖像,則不會報告位置或姿态。默認使用(yòng)此模式。
● 自适應模式:周期性地更新靜态圖像的(de)位置(大(dà)約每 5 幀更新一次),當圖像稍微移動時(shí)進行更新。這(zhè)在靜态圖像的(de)功耗和(hé)準确性之間找到平衡。
● 靜态模式:适用(yòng)于已知爲靜态的(de)圖像,在此模式下(xià),圖像在首次檢測時(shí)會固定位置,之後不會更新,這(zhè)可(kě)以減少功耗并提高(gāo)性能,但如果圖像發生漂移,位置将不會更新。
跟蹤模式可(kě)以在應用(yòng)程序運行時(shí)通(tōng)過以下(xià)節點更改,而無需停止或重啓 AR 會話(huà):
● 按友好名稱設置圖像目标跟蹤模式(Set Image Target Tracking Mode by Friendly Name)
● 按候選圖像設置圖像目标跟蹤模式(Set Image Target Tracking Mode by Candidate Image)
● 按友好名稱設置圖像目标跟蹤模式(Set Image Targets Tracking Mode by Friendly Name)
● 按候選圖像設置圖像目标跟蹤模式(Set Image Targets Tracking Mode by Candidate Image)
SetImageTrackedModeByID 已在 0.15.0 版本中棄用(yòng)。
示例使用(yòng)了(le) D_SpacesARCandidateImage_SpaceTown 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)。該圖像目标在打印成 DIN A4 或 US letter 尺寸時(shí),高(gāo)度爲 26 厘米。BP_Gizmo_AugmentedImage 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)在物(wù)理(lǐ)圖像目标上渲染一個(gè) gizmo,指示其在識别和(hé)跟蹤後的(de)方向。