本节摘要:AR 是 XR 光谱上"现实占比 70-95%"的一段。这条段上当前有两条主力入口:50 亿台存量手机上的手机 AR(ARCore/ARKit),以及独立可戴的 AR 眼镜(HoloLens 2、Magic Leap 2、Ray-Ban Meta)。本节拆开两条入口的工程差异:手机 AR 借力手机摄像头+IMU 跑视觉 SLAM,AR 眼镜则需要在低功耗下做"轻量级"空间计算。最后用一个跨平台 demo 演示"用 Unity 写一次,手机+眼镜两端跑"。
阅读完本节,你应当能够:
"AR 入口"听起来像一台设备,实际上是两类形态的合称:
手机 AR 拥有 50 亿台设备的天然存量(iOS+Android),是 AR 当前的"零门槛"入口。AR 眼镜拥有"解放双手"和"持续佩戴"两个手机做不到的优势,但出货量级还在百万级——百万 vs 50 亿,差了 500 倍。
手机 AR 的核心是 VIO(Visual-Inertial Odometry,视觉惯性里程计)。它做两件事:
ARCore 和 ARKit 各自封装了 VIO,并加上了"平面检测""环境纹理""环境光估计"等上层 API。ARCore 在 Android 上支持 1.32+ 设备;ARKit 在 iOS 上支持 A12 芯片及以后机型。
手机 AR 的一个关键指标是追踪稳定性。弱光(夜晚室内)、强反光(玻璃/镜子)、低纹理(白墙)这三种场景是追踪漂移的高发区。ARCore 的"运动追踪(Motion Tracking)"和"深度(Depth)"两个 API 互相补强,能把稳定性从 60% 抬到 90%。
AR 眼镜的关键工程问题不是"做不做得出来",而是"轻不轻、亮不亮、续航长不长"。当前主流 AR 眼镜分三类:
HoloLens 2 是工业 AR 的"事实参考机":在 565 克上同时做到 2K×2 全息分辨率、6DoF 头手追踪、空间锚点、8 麦克风阵列。Magic Leap 2 视场角更大(70° vs 52°)但重量更重(316g 仅眼镜部分,外接计算盒 + 电池包整体接近 500g)。
| 维度 | 手机 AR | AR 眼镜 |
|---|---|---|
| 重量 | 200g | 50-700g |
| 续航 | 整天(手机电池) | 2-3h(眼镜内置电池) |
| 视场 | 全屏 | 13-70° |
| 亮度 | 屏幕峰值 1000-2000 nits | 1000-3000 nits |
| 内容 | 触屏 + 摄像头 + IMU + GPS | 摄像头 + IMU + 眼动(部分) |
| 设备数 | 50 亿 | 几百万 |
| Killer App | 滤镜、试穿、导航 | 工业维修、手术导航 |
读这张表的关键判断:手机 AR 占"用户基础",AR 眼镜占"解放双手"。今天 AR 眼镜真正跑出 PMF 的场景(工业维修、手术导航、远程协作)都是"必须解放双手"的高价值场景——这反过来又说明 AR 眼镜的"Killer App"还没有出现在消费侧。
下面这段代码在 Unity + AR Foundation 里同时启用"平面检测 + 环境光估计"——这段代码在手机(ARCore/ARKit)和 HoloLens 2(OpenXR)上都能跑:
// 跨平台 AR 会话配置 public class ARBootstrap : MonoBehaviour { [SerializeField] private ARSession session; [SerializeField] private ARPlaneManager planeManager; [SerializeField] private ARLightEstimationManager lightManager; void Start() { // 1. 平面检测(手机 + 眼镜都支持) planeManager.requestedDetectionMode = PlaneDetectionMode.Horizontal; planeManager.trackablesChanged += OnPlanesChanged; // 2. 环境光估计(手机用 ARKit/ARCore,眼镜用环境光传感器) lightManager.requestedLightEstimation = LightEstimation.AmbientIntensity; } void OnPlanesChanged(ARTrackablesChangedEventArgs<ARPlane> args) { foreach (var p in args.added) Debug.Log($"检测到新平面: {p.trackableId}"); } }
把同一份代码打包成 Android APK(手机)和 UWP APPX(HoloLens 2),代码不需要改。差异只在"硬件能力调用"——比如 HoloLens 2 上的眼动追踪、眼动选择、空间音效,需要换一套 API:
// HoloLens 2 特有的眼动目标选择 var eyeGazeProvider = InputDevices.GetDeviceAtXRNode(XRNode.EyeGaze); if (eyeGazeProvider.TryGetFeatureValue(EyeGazeUsages.gazePosition, out var pos)) Debug.Log($"眼睛注视点: {pos}");
下一节我们讲光谱中段偏现实的 MR 融合:VST 透视与全息。