警告! 空间网格功能目前被标记为实验性,因为包和 Snapdragon Spaces 服务端的优化可能会导致不同版本之间的兼容性问题。此外,网格法线功能尚未实现。 |
这个示例展示了如何生成和可视化一个空间网格,该网格近似于现实世界中的环境,并如何将其用作碰撞体。有关自定义可追踪对象更新和 Unreal Engine 的 AR Trackable Notify 组件的基本信息,请参考 Unreal Engine 文档。要使用此功能,必须在项目设置中的 Snapdragon Spaces 插件设置中启用它。
示例工作原理
默认情况下,当示例运行时,它会生成适应检测到的环境的几何体和多边形。用户可以通过 UI 滑块调整空间网格的不透明度,隐藏或显示网格,选择使用 CPU 还是 GPU 计算法线,生成碰撞体(这会停止网格更新),并生成一个球体来展示碰撞体的物理交互。
空间网格 AR 管理器
BP_SpatialMeshingARManager 蓝图文件(位于 SnapdragonSpacesSamples 内容 > SnapdragonSpaces > Samples > Spatial Meshing > Placeable)用于集中管理创建和销毁增强几何体网格的操作,并通过事件系统来实现。该蓝图将 AR Trackable Notify 组件的事件绑定,以响应 AR 可追踪几何体的变化。当系统不使用法线来检测几何体时,它会触发 On Add/Update/Remove Tracked Geometry 事件。与其他情况不同,注册为 UARTrackedGeometry 的对象需要其分类为 EARObjectClassification::Unknown 才能确认它是空间网格。可以使用 GetObjectClassification 函数来检查分类。
Render Spatial Mesh 节点返回一个包含检测到的几何体并应用法线的 Actor。由于 Unreal Engine 通过引用返回参数,因此必须传递表示几何体的 Actor 的引用以及之前索引数量的变量,否则会重复创建多个 Actor。可以监听 On Spatial Mesh Normals Computed 委托,避免不必要的调用,仅在法线计算完成后更新网格的可视化(使用 Render Spatial Mesh 节点)。此计算在异步线程中进行,以提高性能,并在完成后调用该委托。
Set Spatial Meshing Normals Calculation State 节点用于启用或禁用 CPU 的法线计算,如果法线计算已启用,Get Spatial Meshing Normals Calculation State 节点将返回 true。
在示例蓝图中,要开始检测,请将 Toggle AR Capture 设置为 ON,要停止检测,请将其设置为 OFF,停止检测会销毁所有生成的 AR 几何体。此外,该节点的捕获类型必须设置为 Scene Understanding。
空间网格 AR 会话配置
系统使用 D_SpacesSessionConfig_SpatialMeshing 资产(位于 SnapdragonSpacesSamples 内容 > SnapdragonSpaces > Samples > Spatial Meshing > Core)来检测几何体。该资产是从 SpacesSessionConfig 类派生的数据资产。
会话配置文件提供了一个字段用于添加边界。每个边界表示一个体积,完全在该体积之外的几何体不会显示。为了跟踪网格,边界的数量必须大于零。