ARCore 五大核心能力拆解
运动跟踪:让手机知道自己在哪
运动跟踪是 ARCore 所有功能的地基。它解决的核心问题是:手机在空间中移动时,如何准确推算它当前的位置和朝向(术语叫「姿态 pose」)。
ARCore 的做法是把两种数据融合在一起:
视觉侧:实时分析摄像头画面,从中提取「特征点」——画面中那些视觉上独特的小区域(比如地砖缝、墙皮裂纹、物体边缘的纹理变化)。每一帧画面都能提取出一批特征点,通过跨帧匹配可以看出这些点的位移方向和幅度。
惯性侧:读取手机的 IMU(惯性测量单元)数据,包括加速度计和陀螺仪,得到设备短时间内的加速度和角速度。IMU 数据的采样频率远高于摄像头(通常 100Hz vs 30fps),能在两帧画面之间补充更细致的姿态变化。
将视觉位移和惯性数据用数学方法(通常是滤波或优化算法)融合,就能得到一条平滑、连续的设备姿态轨迹。这个过程就是 SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)的核心。

环境理解:识别面前的桌子和墙壁
光知道自己在哪还不够,AR 应用还需要知道"我面前有什么东西可以放虚拟物体上去"。这就是环境理解要解决的问题。
ARCore 在做的事可以理解为:在三维空间中不断寻找那些看起来像平面的特征点簇。当足够多的特征点呈现共面趋势时,ARCore 就会判定这里有一张桌子或一面墙,并生成一个几何平面(Plane)。
几何平面有两个重要属性:
- 类型:水平(horizontal up / horizontal down)、垂直(vertical)、倾斜(inclined)——决定虚拟物体应该怎么放
- 边界:ARCore 会尽量检测平面的实际物理边界,而不是假设它无限大
环境理解的局限:没有纹理的平面检测效果差。比如纯白色墙面、光滑桌面、纯灰色地面——由于缺乏特征点,ARCore 可能检测不到或检测错误。开发者在设计 AR 体验时要考虑到这一点。

深度感知:让虚拟物体知道真实物体在哪里
如果说环境理解告诉你"哪里有平面",深度感知告诉你"每个像素距离相机多远"。
ARCore 的 Depth API 会为每一帧生成一张深度图——一张与摄像头画面同分辨率的灰度图,每个像素值代表该点到手机相机的距离。有了这张图,应用就能做到:
- 遮挡渲染:虚拟物体出现在真实物体的前面还是后面?比较深度值就知道了
- 精确尺寸:知道距离就能算出物体在真实世界中的实际大小
- 物理交互:让虚拟球真正滚到桌边停下来,而不是穿模掉下去
Depth API 的数据来源因设备而异:ToF 深度传感器机型直接输出硬件深度图;没有专用传感器的机型则通过运动过程中不同视角的 RGB 画面做立体匹配(被动深度)。
光照估算:让虚拟物体"融入"真实光线
虚拟物体看起来假,很大程度上是因为光不对。ARCore 的光照估算解决的就是这个问题。
它分析摄像头画面中的整体亮度和色温,输出两个值:
- 平均光强(Average Light Intensity):当前环境有多亮
- 色温校正值(Color Correction):当前环境光线偏暖还是偏冷
开发者把这两个值喂给 3D 引擎的光照系统,虚拟物体就会在画面中呈现出与周围环境一致的明暗和色调——白天在阳光下是暖色调的亮面,晚上在室内是白炽灯的暖黄,阴天则是冷色调的灰调。
对于需要更精细光照控制的场景,ARCore 还提供了 HDR 光照估算,输出一个环境贴图(Environment Map),让 3D 物体反射周围真实环境的光。

Hit Test:用户点屏幕,虚拟物体落位置
Hit Test 是 AR 应用最常用的用户交互机制。它的工作流程:
- 用户在屏幕上点一下 → 拿到一个屏幕坐标 (x, y)
- ARCore 从手机相机位置向这个屏幕坐标投射一条射线
- 射线穿过的第一个几何平面或特征点 → 就是交点的世界坐标 pose
- 开发者在这个 pose 上创建一个锚点 → 虚拟物体就固定在用户点的地方
Hit Test 还支持即时放置(Instant Placement)模式——用户点了之后不用等平面检测完成就能先放一个虚拟物体,ARCore 会在后台跟踪精度提升时自动修正物体的位置和姿态。这种体验上的好处是用户不再需要"扫一遍房间等平面检测"就能开始玩。