平台专用指南
Android (Kotlin/Java)
Android NDK (C)
Unity (AR Foundation)
Unreal Engine
作为 AR 应用开发者,您需要为用户提供将虚拟与现实无缝融合的体验。当用户在其场景中放置虚拟对象时,他们希望该对象看起来像是真实世界中的一部分。如果您要开发一款供用户购买家具的应用,则需要确保用户确信他们即将购买的扶手椅适合他们的空间。
Depth API 可帮助设备的摄像头了解场景中真实对象的大小和形状。它会创建深度图像或深度图,从而为您的应用增添一层真实感。您可以使用深度图像提供的信息来打造逼真的沉浸式用户体验。
使用 Depth API 进行开发的应用场景
Depth API 可实现对象遮挡、提升沉浸感和提供新颖的互动,从而增强 AR 体验的真实感。以下是您可以在自己的项目中使用的几种方式。如需查看 Depth API 的实际应用示例,请探索 ARCore Depth Lab 中的示例场景,其中展示了访问深度数据的不同方式。此 Unity 应用在 GitHub 上是开源的。
启用遮挡
遮挡(即在真实世界对象后准确渲染虚拟对象)对于打造沉浸式 AR 体验至关重要。假设用户想要在场景中放置一个虚拟 Andy,该场景包含一个位于门旁边的行李箱。如果渲染时没有遮挡,Andy 将不真实地与行李箱的边缘重叠。如果您使用场景的深度并了解虚拟 Andy 相对于周围环境(例如木制行李箱)的距离,则可以准确地渲染带有遮挡的 Andy,使其在周围环境中看起来更加真实。

转换场景
通过渲染虚拟雪花落在沙发扶手和枕头上,或在客厅中营造朦胧的雾气,让用户进入一个全新的沉浸式世界。您可以使用 Depth API 创建一个场景,让虚拟灯光与真实对象互动、隐藏在真实对象后面并重新照亮真实对象。
距离和景深
需要显示某物距离很远?您可以使用距离测量功能,并使用 Depth API 添加景深效果,例如模糊场景的背景或前景。
允许用户与 AR 对象互动
通过碰撞和物理效果,让虚拟内容与真实世界互动,从而允许用户通过您的应用“触摸”世界。让虚拟对象越过真实世界的障碍物,或让虚拟彩弹击中并溅到真实世界的树上。当您将基于深度的碰撞与游戏物理效果相结合时,可以使体验栩栩如生。
改进命中测试
深度可用于改进命中测试结果。平面命中测试仅适用于具有纹理的平面表面,而深度命中测试则更详细,即使在非平面和低纹理区域也适用。这是因为深度命中测试使用场景中的深度信息来确定点的正确深度和方向。
在以下示例中,绿色 Andy 表示标准平面命中测试,红色 Andy 表示深度命中测试。
设备兼容性
Depth API 仅在具有支持 深度处理能力的设备上受支持,并且必须在 ARCore 中手动启用,如 启用深度中所述。
某些设备可能还提供硬件深度传感器,例如飞行时间 (ToF) 传感器。如需查看支持 Depth API 的设备的最新列表,以及具有受支持的硬件深度传感器(例如 ToF 传感器)的设备列表,请参阅 ARCore 支持的设备 页面。
深度图像
Depth API 使用运动深度算法来创建深度图像,从而提供世界的 3D 视图。深度图像中的每个像素都与场景与摄像头的距离测量值相关联。 此算法从不同角度拍摄多个设备图像,并对其进行比较,以估计用户移动手机时每个像素的距离。它有选择地使用机器学习来增加深度处理,即使用户移动幅度很小也是如此。它还会利用用户设备可能拥有的任何其他硬件。如果设备具有专用深度传感器(例如 ToF),该算法会自动合并来自所有可用来源的数据。这会增强现有的深度图像,即使摄像头不移动也能实现深度。它还可以在特征很少或没有特征的表面(例如白墙)上,或在有移动的人或对象的动态场景中提供更好的深度。
以下图片显示了墙上挂着自行车的走廊的摄像头图像,以及根据摄像头图像创建的深度图像的可视化效果。红色区域离摄像头较近,蓝色区域离摄像头较远。

运动深度
当用户移动设备时,深度数据会变为可用。该算法可以获得 0 到 65 米范围内的可靠、准确的深度估计值。当设备距离真实世界场景半米到大约五米时,结果最为准确。鼓励用户更多地移动设备的体验将获得越来越好的结果。
获取深度图像
借助 Depth API,您可以检索与每个摄像头帧匹配的深度图像。获取的深度图像与相机具有相同的时间戳和视野范围内参。只有在用户开始移动设备后,才能获得有效的深度数据,因为深度是从运动中获取的。特征很少或没有特征的表面(例如白墙)将与不精确的深度相关联。
后续步骤
- 查看 ARCore Depth Lab,其中展示了访问深度数据的不同方式。