警告! 空間網格功能(néng)目前被标記為(wèi)實驗性,因為(wèi)包和 Snapdragon Spaces 服務(wù)端的優化可(kě)能(néng)會導緻不同版本之間的兼容性問題。此外,網格法線(xiàn)功能(néng)尚未實現。 |
這個示例展示了如何生成和可(kě)視化一個空間網格,該網格近似于現實世界中(zhōng)的環境,并如何将其用(yòng)作(zuò)碰撞體(tǐ)。有(yǒu)關自定義可(kě)追蹤對象更新(xīn)和 Unreal Engine 的 AR Trackable Notify 組件的基本信息,請參考 Unreal Engine 文(wén)檔。要使用(yòng)此功能(néng),必須在項目設置中(zhōng)的 Snapdragon Spaces 插件設置中(zhōng)啓用(yòng)它。
示例工(gōng)作(zuò)原理(lǐ)
默認情況下,當示例運行時,它會生成适應檢測到的環境的幾何體(tǐ)和多(duō)邊形。用(yòng)戶可(kě)以通過 UI 滑塊調整空間網格的不透明度,隐藏或顯示網格,選擇使用(yòng) CPU 還是 GPU 計算法線(xiàn),生成碰撞體(tǐ)(這會停止網格更新(xīn)),并生成一個球體(tǐ)來展示碰撞體(tǐ)的物(wù)理(lǐ)交互。
空間網格 AR 管理(lǐ)器
BP_SpatialMeshingARManager 藍圖文(wén)件(位于 SnapdragonSpacesSamples 内容 > SnapdragonSpaces > Samples > Spatial Meshing > Placeable)用(yòng)于集中(zhōng)管理(lǐ)創建和銷毀增強幾何體(tǐ)網格的操作(zuò),并通過事件系統來實現。該藍圖将 AR Trackable Notify 組件的事件綁定,以響應 AR 可(kě)追蹤幾何體(tǐ)的變化。當系統不使用(yòng)法線(xiàn)來檢測幾何體(tǐ)時,它會觸發 On Add/Update/Remove Tracked Geometry 事件。與其他(tā)情況不同,注冊為(wèi) UARTrackedGeometry 的對象需要其分(fēn)類為(wèi) EARObjectClassification::Unknown 才能(néng)确認它是空間網格。可(kě)以使用(yòng) GetObjectClassification 函數來檢查分(fēn)類。
Render Spatial Mesh 節點返回一個包含檢測到的幾何體(tǐ)并應用(yòng)法線(xiàn)的 Actor。由于 Unreal Engine 通過引用(yòng)返回參數,因此必須傳遞表示幾何體(tǐ)的 Actor 的引用(yòng)以及之前索引數量的變量,否則會重複創建多(duō)個 Actor。可(kě)以監聽 On Spatial Mesh Normals Computed 委托,避免不必要的調用(yòng),僅在法線(xiàn)計算完成後更新(xīn)網格的可(kě)視化(使用(yòng) Render Spatial Mesh 節點)。此計算在異步線(xiàn)程中(zhōng)進行,以提高性能(néng),并在完成後調用(yòng)該委托。
Set Spatial Meshing Normals Calculation State 節點用(yòng)于啓用(yòng)或禁用(yòng) CPU 的法線(xiàn)計算,如果法線(xiàn)計算已啓用(yòng),Get Spatial Meshing Normals Calculation State 節點将返回 true。
在示例藍圖中(zhōng),要開始檢測,請将 Toggle AR Capture 設置為(wèi) ON,要停止檢測,請将其設置為(wèi) OFF,停止檢測會銷毀所有(yǒu)生成的 AR 幾何體(tǐ)。此外,該節點的捕獲類型必須設置為(wèi) Scene Understanding。
空間網格 AR 會話配置
系統使用(yòng) D_SpacesSessionConfig_SpatialMeshing 資産(chǎn)(位于 SnapdragonSpacesSamples 内容 > SnapdragonSpaces > Samples > Spatial Meshing > Core)來檢測幾何體(tǐ)。該資産(chǎn)是從 SpacesSessionConfig 類派生的數據資産(chǎn)。
會話配置文(wén)件提供了一個字段用(yòng)于添加邊界。每個邊界表示一個體(tǐ)積,完全在該體(tǐ)積之外的幾何體(tǐ)不會顯示。為(wèi)了跟蹤網格,邊界的數量必須大于零。