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