场景理解观察程序 - MRTK2
场景理解返回场景实体的语义表示形式,以及其在 HoloLens 2(不支持 HoloLens 第一代)上的几何形式。
此技术的一些预期用例如下:
- 将对象放在最近的某种表面(例如墙壁和地板)上
- 为平台风格的游戏构建导航网格
- 提供物理引擎友好的几何图形作为四边形
- 通过避免编写类似的算法来加快开发过程
场景理解作为 MRTK 2.6 中的一项试验性功能引入。 它作为空间观察程序集成到 MRTK 中,称为 WindowsSceneUnderstandingObserver
。 场景理解适用于旧版 XR 管道和 XR SDK 管道,它们是 OpenXR(从 MRTK 2.7 开始)和 Windows XR 插件。 这两种情况均使用了 WindowsSceneUnderstandingObserver
。
注意
仅在 MRTK 2.7.3 及更高版本中支持在远程处理中使用场景理解。 仅支持使用 OpenXR 的项目。 不支持使用旧版 XR 管道或 Windows XR 插件的项目。
观察程序概述
收到请求时,WindowsSceneUnderstandingObserver
将返回 SpatialAwarenessSceneObject 以及对应用程序了解其周围环境有用的属性。 观察频率、返回的对象类型(例如墙壁、地板)和其他观察程序行为取决于通过配置文件实现的观察程序配置。 例如,如果需要遮挡蒙板,则必须将观察程序配置为生成四边形。 观察到的场景可以保存为序列化文件,稍后可以加载该文件以在编辑器播放模式下重新创建该场景。
安装
重要
场景理解仅在 HoloLens 2 和 Unity 2019.4 及更高版本上受支持。
- 确保在生成设置中将平台设置为 UWP。
- 通过混合现实功能工具获取场景理解包。
使用场景理解
开始使用场景理解的最快方法是查看示例场景。
场景理解示例场景
在 Unity 中,使用项目资源管理器打开 Examples/Experimental/SceneUnderstanding/Scenes/SceneUnderstandingExample.unity
中的场景文件,然后按“播放”!
重要
仅适用于 MRTK 2.6.0 - 使用混合现实功能工具或通过 UPM 导入时,请导入演示 SpatialAwareness 示例,然后导入试验性的 SceneUnderstanding 示例,因为存在依赖关系问题。 有关详细信息,请参阅此 GitHub 问题。
该场景演示了以下内容:
- 应用程序 UI 中观察到的场景对象的可视化效果,用于配置观察程序
DemoSceneUnderstandingController
脚本示例,展示如何更改观察程序设置和侦听相关事件- 将场景数据保存到设备进行离线开发
- 加载之前保存的场景数据(.bytes 文件)以支持编辑器内开发工作流
重要
默认情况下,观察程序的 ShouldLoadFromFile
属性设置为 false。 为了查看序列化的示例空间的可视化效果,请参阅下面的配置观察程序服务部分,并在编辑器中将属性设置为 true。
注意
示例场景基于旧版 XR 管道。 如果使用的是 XR SDK 管道,则应相应地修改配置文件。 提供的场景理解空间感知系统配置文件 (DemoSceneUnderstandingSystemProfile
) 和场景理解观察程序配置文件(DefaultSceneUnderstandingObserverProfile
和 DemoSceneUnderstandingObserverProfile
)适用于这两个管道。
注意
由于初始化/线程执行顺序,示例场景在某些情况下会记录 There is no active AsyncCoroutineRunner when an action is posted.
警告。 如果可以确认 AsyncCoroutineRunner
组件已附加到“演示控制器”GameObject,并且该组件/GameObject 在场景中保持启用/活动状态(默认情况下),则可以安全地忽略该警告。 但是,在使用场景理解创建新场景时,请确保在根目录下创建一个空的 GameObject 并将 AsyncCoroutineRunner
脚本附加到其中,否则场景理解可能无法正常运行。
配置观察程序服务
选择“MixedRealityToolkit”游戏对象并查看检查器。
这些选项允许配置 WindowsSceneUnderstandingObserver
。
示例脚本
示例脚本 DemoSceneUnderstandingController.cs 演示了使用场景理解服务的主要概念。
- 订阅场景理解事件
- 处理场景理解事件
- 在运行时配置
WindowsSceneUnderstandingObserver
场景中面板上的切换通过调用此示例脚本的公共函数来更改场景理解观察程序的行为。
打开实例化预制件,将演示如何创建可调节大小以适应所有 SpatialAwarenessSceneObject 的对象,这些对象整齐地聚集在父对象下。
生成的应用说明
以标准方式生成和部署到 HoloLens。 运行后,应会显示许多与这些功能一起使用的按钮。
请注意,在向观察程序进行查询时存在一些陷阱。 错误配置获取请求会导致事件负载不包含预期数据。 例如,如果未请求四边形,则不会出现遮挡蒙板纹理。 同样,如果观察程序未配置为请求网格,则不会显示世界网格。 DemoSceneUnderstandingController
脚本负责处理其中一些依赖项,但不是全部。
可以通过设备门户在 User Folders/LocalAppData/[APP_NAME]/LocalState/PREFIX_yyyyMMdd_hhmmss.bytes
下访问保存的场景文件。 可以通过在检查器中找到的观察程序配置文件中指定这些场景文件,在编辑器中使用它们。