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