本节摘要:SLAM 给完"我在哪"之后,XR 系统还要回答"周围是什么"——这是空间重建。本节讲三件套:场景网格(Mesh,环境的 3D 几何)、语义理解(Semantic,环境的物体类别)、持久锚点(Persistent Anchor,跨会话保留的虚拟物体位置)。三者合起来让虚拟物体在真实环境里"住下来"。
阅读完本节,你应当能够:
仅有 6DoF 跟踪,虚拟物体只是"贴在头显坐标系"——头一摘,物体就没了。要让虚拟物体"住"在真实环境里,需要三件事:
这三件事构成了 XR 系统对"周围是什么"的回答。
场景网格(Scene Mesh)是把环境重建为 3D 三角面片的过程。Quest 3、HoloLens 2、Vision Pro 都默认开启。
// 1. Quest 3: 启用 Experimental Scene Understanding ovrManager.sceneManager.Launch(); foreach (var scene in ovrManager.sceneManager.Scene) { foreach (var mesh in scene. meshes) { // mesh 是 Unity Mesh 对象,可以做射线检测 if (Physics.Raycast(ray, out var hit, 100f)) Debug.Log($"命中网格: {hit.point}"); } }
Quest 3 的场景网格精度:1cm 三角面、50m² 范围、占用内存约 5-20MB。HoloLens 2 网格精度更高(亚厘米),范围更大(200m²)。Vision Pro 网格密度介于两者之间(2cm 三角面)。
场景网格的核心应用是遮挡——上一节渲染管线讲过,没有场景网格,MR 段的金标准"虚拟物体被真实桌角遮挡"就做不到。
场景网格只回答"哪是几何",语义理解(Semantic Understanding)回答"哪是物体"。当前 XR 的语义理解分两类:
Quest 3 当前没有公开的物体语义 API(Meta 在 2024 年逐步开放 Experimental Scene Understanding API)。Vision Pro 通过 ARKit 的 RoomPlan API 输出"房间"级别的语义结构——能识别出墙、门、家具、装饰物,并生成 USDZ 格式的 3D 房间模型。
持久锚点(Persistent Anchor)是 AR 体验能"长期保留"的关键。一个锚点包含两件事:
锚点保存到云端或本地。下次回到同一位置,XR 系统提取当前位置的特征描述子,与已保存的锚点描述子做匹配——找到匹配后,把锚点位姿重新映射回当前会话的坐标系,虚拟物体就回到了原位。
Vision Pro 的"持久锚点"能力是它在 MR 段领先的关键:
ARCore 的 Persistent Cloud Anchor API 也提供类似能力,但精度和跨设备体验略弱。
// 1. 启用 Quest 3 场景理解 public class QuestSceneMesh : MonoBehaviour { void Start() { OVRSceneManager sceneManager = GetComponent<OVRSceneManager>(); sceneManager.VerboseLogging = true; sceneManager.SceneModelLoaded += OnSceneLoaded; } void OnSceneLoaded(OVRSceneModel scene) { // 2. 把场景网格的每个 MeshFilter 加到 Physics 引擎 foreach (var filter in scene. meshes) { filter.gameObject.AddComponent<MeshCollider>(); } } }
跑起来后:你在客厅走一遍,Quest 3 自动建出 50m² 的场景网格。然后放一只虚拟蝴蝶在桌角附近——把头转向桌角另一侧时,蝴蝶会被桌角正确遮挡。
💡 关键直觉:场景网格是 MR 的"基础设施"——没有它,"虚拟物体被真实物体遮挡"做不到;"虚拟物体能识别真实物体并与之交互"也做不到。
下一节我们看第四个支柱:交互——手势、眼动、语音。