警告! 空间网格功能被标记为实验性,因为当前包和 Snapdragon Spaces 服务的优化可能导致版本间的不兼容。 |
此示例演示了如何生成和可视化空间网格,从而近似现实世界中的环境。有关空间网格的基本信息以及 AR Foundation 的 AR Mesh Manager 组件的功能,请参考 Unity 文档。要使用此功能,必须在 OpenXR 插件设置中启用它,路径为:Project Settings > XR Plug-in Management > OpenXR (> Android Tab)。
示例工作原理
ARMeshManager
ARMeshManager 组件必须附加到 ARSessionOrigin GameObject 的子对象上,该组件会引用当网格可用时生成的 MeshFilter。
警告! 将 ARMeshManager 组件附加到相机对象上会导致该对象的缩放发生变化,从原始的 (1, 1, 1) 变为 (10, 10, 10)。这会导致佩戴设备上的应用程序渲染出现问题,直到将相机缩放恢复到原始状态。 |
以下属性不受支持:
● 当前不支持更改生成网格的密度。
● 切线、纹理坐标和颜色不会作为网格的一部分生成。访问 ARMeshManager 组件中这些属性的缓冲区可能会返回空值。
● Concurrent Queue Size目前不支持更改。
Normals默认情况下启用该属性。
提示! 对不受支持的 ARMeshManager 组件属性进行更改时,在构建应用程序时会在控制台中显示警告。 |
通过订阅 ARMeshManager 组件的 meshesChanged 回调,可以获取有关网格添加、更新或删除的相关数据。
示例代码
Spaces AR Mesh Manger 配置
ARMeshManager 组件包含一些 Snapdragon Spaces Unity 包的子系统实现不支持的属性。尝试使用这些不受支持的属性时,构建时会显示警告,且如果启用了空间网格(实验性)功能,可能会出现问题。建议使用(可选的)Spaces AR Mesh Manager Config 组件,它提供了更多配置生成网格的选项。使用此组件后,空间网格提供器还可以处理来自运行时的 TrackingOriginMode.Floor 相关的相机高度偏移。如果不使用此组件,网格可能会出现在错误的位置。
此组件必须附加到与 ARMeshManager 组件相同的 GameObject 上。
● 计算 CPU 法线:
○ 如果启用,将为网格中的每个顶点计算 CPU 法线。
○ 网格中可能会出现重复的顶点(使用不同的索引)。
○ 这可能导致生成的网格中出现可见的缝隙。
○ 对于网格中的每个索引,每个引用该索引的三角形都会对最终的法线产生影响,但不同的索引(即重复的顶点)可能具有不同的法线。
○ 如果 Calculate CPU Normals 属性和 ARMeshManager 组件上的 Normals 属性没有同时启用或同时禁用,构建应用程序时控制台会显示解释性警告。
使用平滑法线:
○ 如果启用,CPU 法线会对每个顶点进行平滑处理
○ 所有引用具有相同空间但不同索引的顶点的三角形会将这些重复的顶点视为相同的顶点。
○ 这可能会导致检测到的几何体中的硬边缘不够清晰,但可以减少缝隙的出现。
○ 计算平滑法线会增加处理能力的消耗,对性能产生影响。
默认情况下,打开示例时,生成的网格会根据检测到的环境进行适配。
● 当启用 Calculate CPU Normals 属性时,网格将使用 Mesh With Cpu Normals Material 和标准着色器进行可视化。
● 禁用 Calculate CPU Normals 属性时,网格将使用自定义的 MeshVisualization.shader 进行可视化,仅用于生成法线以便显示。