本节摘要:在展开任何技术细节之前,先把"AR、VR、MR、XR"这四个词的真正含义钉在一条连续的光谱上。我们给出一张可打分的刻度图:每个体验可以由"视野中现实的占比"和"现实与虚拟是否能互相作用"两个维度联合定位。再用三个真实场景演示一次光谱上的迁移——手机看导航、桌面看虚拟宠物、HoloLens 把虚拟宠物放到真桌上——让你在 30 秒内判断"它是 AR 还是 MR 还是 VR"。
阅读完本节,你应当能够:
营销话术里"AR"和"MR"被反复混用。一家厂商今天叫它 AR,明天同一台设备又叫 MR。技术文档里又把它们分开:Unity 文档区分 AR Session 和 XR Origin,Apple 区分 ARKit 和 RealityKit 2,Microsoft 用"全息"形容 HoloLens 的体验。这种混乱不是谁故意要混淆,而是因为这些词的边界本身就不是离散点。
最干净的看法是把 XR 看作一条连续光谱。光谱的最左端是"纯现实"——你摘下所有设备看到的客厅;最右端是"纯虚拟"——完全由计算机生成的世界;中间每一格都允许你同时看到现实与虚拟,但比例、深度、可交互性不同。AR、AV、MR、VR 是这条光谱上被命名过的四个段落,不是四种独立的产品。
把"现实占比"和"现实虚拟是否能互相遮挡、碰撞"这两个维度画成图,分类就清楚了。下面这张图就放在你的工具箱里,每次看到一个新 demo,先打两个分。
我们用两个维度给任何一段 XR 体验打分:
维度 1:视野中现实的占比。0 = 完全虚拟,1 = 完全现实。我们把 0–0.05 划为 VR,0.05–0.30 划为 AV,0.30–0.70 划为 MR,0.70–0.95 划为 AR,0.95–1.00 是裸眼。维度 2:现实与虚拟是否能互相遮挡、碰撞。若虚拟物体能识别真实桌面并被桌面遮挡、能在真实物体后面消失、能基于真实物理"撞墙"——这是 MR;否则就是 AR(仅叠加,不参与物理)。
把这两个维度联立起来看:
| 段落 | 现实占比 | 物理交互 | 典型设备 |
|---|---|---|---|
| AR 叠加 | 0.70–0.95 | 否 | 手机 AR(ARCore/ARKit)、早期 HoloLens |
| MR 共生 | 0.30–0.70 | 是 | HoloLens 2、Quest 3 透视模式、Vision Pro |
| AV 增强虚拟 | 0.05–0.30 | 是 | 多数 VR 中的"现实窗口"(如 Virtual Desktop 的真实键盘透出) |
| VR 全沉浸 | 0–0.05 | 自身物理 | Quest 3 VR 模式、PSVR2、PC VR |
这一步定义清楚,后面所有硬件与算法都有参考系。例如:Vision Pro 的 0.30–0.70 现实占比是带透明度的全息显示;Quest 3 透视是用摄像头合成的"伪 VST";HoloLens 2 是透明波导加 LCOS 投影。三者的"现实"获取方式不同,但在光谱上落点接近。
XR = X Reality = 任意 Reality。字母 X 是 placeholder——它把光谱上从 AR 到 VR 的所有段落都包起来。这个词最初在 1990 年代的论文里出现,用来描述"任何由计算机修改过的视觉现实",后来被 Apple、Google、Microsoft 在 2017 年前后陆续采用,作为"我们不打算被分类在某一格"的伞形词。工程语境下,XR 通常意味着一次开发、多端部署:用 OpenXR 这类标准 API 把同一份逻辑跑到 VR 一体机、AR 眼镜、PC VR 上。
我们用一个最常见的小例子,从空场景起步走一遍光谱:
Step 1:打开手机相机,让屏幕角落出现一个虚拟蝴蝶(ARCore 平面检测 + 2D 贴图)。这是 AR:现实是底图,虚拟是叠加层,不能被真实物体遮挡。
Step 2:戴上 HoloLens 2,蝴蝶变成 3D 模型,能飞、能扇翅膀。当你把手伸过去,蝴蝶会绕开手飞——这是 MR:虚拟物体识别了你的手,参与了空间。
Step 3:同样的蝴蝶模型在 Vision Pro 里,你能把它"放在"真实桌面上。当你视线被桌角挡住时,蝴蝶模型会正确地被桌角遮挡——这是 MR 段内最关键的一步,叫遮挡(Occlusion)。它需要深度信息把"现实几何"和"虚拟几何"放进同一个 z-buffer。
Step 4:切到 Quest 3 的完全 VR 模式,关掉透视摄像头——你看到的是 100% 虚拟,蝴蝶飞在火星地表。这是 VR:现实 0%。
这个 4 步迁移的代码(Unity + OpenXR)核心差异就 4 行:
// 1. AR 叠加:开启平面检测,把蝴蝶贴在检测到的平面上 var ray = new Ray(transform.position, transform.forward); if (Physics.Raycast(ray, out var hit, 10f)) butterfly.position = hit.point; // 2. MR 共生:让蝴蝶绕开用户的手(用 Hand Tracking API) var hand = HandTracker.RightHand; if (hand.IsTracked) butterfly.Avoid(hand.GetPalmPosition(), 0.3f); // 3. MR 遮挡:把深度信息喂给渲染管线 arOcclusionManager.SetEnvironmentDepthMode(EnvironmentDepthMode.Best); // 4. 切到纯 VR:禁用摄像头视频纹理 xrCamera.stereoTargetEye = StereoTargetEyeMask.Both;
走完这 4 行代码,你已经在光谱上从 AR 走到 MR 再走到 VR。
💡 关键直觉:判断"AR 还是 MR"不要看设备名,看虚拟物体是否能与现实物体发生物理关系。一旦支持遮挡、碰撞、绕行——它已经在光谱的 MR 段里了。
把光谱做成一把"刻度尺"——每个段落都有名字、刻度、典型场景。

下一节我们把这条光谱放到时间维度上,看 1962 到 2024 这六十多年里,每一格是被谁"抬升"的。