2025-04-07 NO.3 Quest3 MR 配置
文章目录
- 1 MR 介绍
- 1.1 透视
- 1.2 场景理解
- 1.3 空间设置
- 2 配置 MR 环境
- 2.1 场景配置
- 2.2 MR 配置
- 3 运行测试
配置环境:
- Windows 11
- Unity 6000.0.42f1
- Meta SDK v74.0.2
- Quest3
1 MR 介绍
1.1 透视
透视(Passthrough)是将应用的背景从虚拟的图层替换成现实图层,类似于 P 图更换背景,虚拟物体相当于叠加在现实图层之上的元素。
在单纯的透视下,虚拟物体和现实物体二者之间并不会进行交互。

1.2 场景理解
场景理解(Scene Understanding,Meta 用 Scene API 实现)能用 2D 平面或 3D 立方体来代表现实物体的位置和范围。在系统中,现实世界由不同的 2D 平面和 3D 立方体组成。
此外,场景理解用语义标签来标识不同的 2D 平面或 3D 立方体,让系统理解标识出的东西具体代表哪一种现实中的物体。

加上场景理解,设备能够理解现实环境,分辨出现实物体在什么位置。通过场景理解,识别出的现实物体和虚拟物体均属于 MR 世界中的一部分,因此能够实现虚拟物体和现实物体之间的交互。
场景模型(Scene Model)
Scene Model 由许多场景锚点(Scene Anchor)组成。每个 Scene Anchor 存储数据组件(Component),这些数据组件可能存储着不同种类的数据,用来表示几何和语义信息。
Scene Anchor 的内部结构类似于 ECS 结构
- C:Component。包含数据。
- E:Entity。是一系列 Component 组件的集合。相当于一个 ID 标识物体。
- S:System。用来处理 Component 的数据,执行逻辑(因为 ECS 使用面向数据的思想,所以最终处理的还是 Component 中的数据)。

场景锚点(Scene Anchor)
在 Scene Model 中,每个 Scene Anchor 相当于一个 Entity。一个 Scene Anchor 中包含不同种类的 Component 组件,不同种类的组件里存储着不同类型的数据。
- 如果用于表示整个房间,Scene Anchor 需包含 RoomLayout 组件和 AnchorContainer 组件。
- RoomLayout:表示整个房间布局,包含天花板,地板,墙壁的布局(这三个元素可以构成一个房间)。
- AnchorContainer:包含房间内的所有Scene Anchor。
- 如果用于表示房间内单独的物体,Scene Anchor 需包含 Locatable 组件,Bounded2D 或者 Bounded3D 组件(取决于物体是 2D 平面还是 3D 物体),Semantic Classification(语义分
类)组件。- Locatable:定位物体,表示物体在房间中的位置。
- Bounded2D/3D:表示物体的边界框,一个 Scene Anchor 也可以同时拥有 2D 和 3D 组件(桌子,桌面可以用 2D,整个桌子可以用 3D)。
- Semantic Classification:用标签来表示物体是哪一种。
空间锚点(Spatial Anchor)
Scene Anchor 和 Spatial Anchor 的区别:
- Scene Anchor 由 Quest 系统创建,受系统管理。
- Spatial Anchor 由应用本身创建,受用户管理。
1.3 空间设置
空间设置(Space Setup,以前称为场景捕获)是捕获场景模型的过程,由 Quest 系统管理,因此在设备上运行的所有应用都可以访问相同的环境数据。
空间设置是一个用户引导的过程:
- 在设置之前,需要先允许应用访问设备的空间数据。
- 开启权限后,自动扫描环境,获取空间网格,提取空间信息(如地板和天花板的高度,墙壁的位置)。
- 最后由用户修正错误(校准墙壁位置)和添加缺失信息(房间物体)。
空间设置无法在串流模式下进行。在 Quest 中,依次点击“设置”->“实际空间”->“空间设置”进行设置。

2 配置 MR 环境
前置条件:
- 配置 Meta SDK 开发环境。参考:2025-03-17 NO.1 Quest3 开发环境配置教程_quest3 unity 开发流程-CSDN博客。
- 熟悉 Quest3 抓取物体操作。参考:2025-04-06 NO.2 Quest3 基础配置与打包-CSDN博客。
2.1 场景配置
创建新场景 MRDemo,删除 Main Camera,并添加 OVRCameraRig,并更改 Gravity Factor 改为 0,防止玩家下坠。(具体操作参考条件 2)。

选择菜单栏中的“Meta”,依次点击“Tools”->“Building Blocks”。

找到 Passthrough 模块,将其拖拽到 Hierarchy 窗口中。

拖拽这一步会自动将 OVRCameraRig 下 CenterEyeAnchor 的相机背景改为纯黑色。

拖拽后会创建 Passthrough 物体,该物体的 OVR Passthrough Layer 脚本上定义了 Placement,用于将现实场景放于哪个图层(相对于虚拟场景)。

最后,创建一个 Cube,并添加 Hand Grab 功能(具体操作参考条件 2)。

2.2 MR 配置
点击 OVRCameraRig,设置 OVRManager.cs 脚本:
- Passthrough Support:Supported
- Boundary Visibility Support:Supported
- Enable Passthrough:勾选
- Should Boundary Visibility Be Suppressed:勾选
Boundary Visibility 原本是为 VR 应用设计的,在 VR 中用户看到的是完全虚拟环境,看不到现实环境,Boundary Visibility 能在一定程度上避免用户与现实物体相撞。但在 MR 应用中,用户大多数情况下能看到现实环境,所以安全边界显得有些多余,并且影响体验感。
注意:只有开启了 Passthrough 透视功能的 MR 应用才能关闭安全边界,如果是纯 VR 应用则无法关闭。

选择菜单栏中的“Meta”,依次点击“Tools”->“Update AndroidManifest.xml”,更新安卓配置信息。

3 运行测试
运行 Unity,可以看到现实世界中有一个立方体位于眼前。但是在 Unity 的 Game 窗口是看不到现实场景的。

可以借助 Meta Quest Developer Hub 进行投屏查看。安装链接:Homepage | Meta Horizon OS Developers。

安装后,进入 Device Manager,点击 Cast 进行投屏。

在投屏界面中可看到现实场景。
