景深更加真实

平台专用指南

作为 AR 应用开发者,您希望为用户打造虚拟与现实的无缝融合。当用户在其场景中放置虚拟对象时,他们希望该对象看起来就像属于现实世界一样。如果您在构建一款供用户选购家具的应用,您希望用户确信他们即将购买的扶手椅适合他们的空间。

Depth API 可帮助设备的相机了解场景中真实对象的大小和形状。它可以创建深度图像或深度图,从而为您的应用添加一个真实层。您可以使用深度图像提供的信息,实现身临其境般的沉浸式用户体验。

使用 Depth API 进行开发的使用场景

Depth API 可助力实现对象遮挡、提升沉浸感和新颖的互动体验,从而增强 AR 体验的真实感。您可以通过以下方式在自己的项目中使用它。如需查看深度的实际应用示例,请探索 ARCore 深度实验室中的示例场景,该实验室演示了访问深度数据的不同方式。此 Unity 应用是在 GitHub 上开源的。

启用遮挡

遮挡(即准确渲染虚拟物体在现实物体后面)对于沉浸式 AR 体验至关重要。假设有一个虚拟 Andy,用户可能需要放置在包含门边有后备箱的场景中。渲染时没有遮挡,Andy 会不切实际地与树干边缘重叠。如果您使用场景的深度来了解虚拟 Andy 相对于木箱等周围环境的距离,就可以准确地渲染 Andy 的遮挡效果,使其在周围环境中看起来更逼真。

改变场景

您可以渲染虚拟雪花,让其坐在沙发的扶手和枕头上,或者在雾气弥漫的客厅中飘散,让用户进入身临其境的新世界。您可以使用“深度”创建虚拟光线互动、隐藏后方以及重新照亮真实物体的场景。

距离和景深

需要显示距离较远的物体?您可以通过 Depth API 使用距离测量并添加景深效果,例如对场景的背景或前景进行模糊处理。

支持用户与 AR 对象互动

让虚拟内容通过碰撞和物理与现实世界互动,让用户能够通过您的应用“触摸”世界。让虚拟物体绕过现实世界的障碍物,或让虚拟彩弹击中并泼洒到真实的树上。将基于深度的碰撞与游戏物理学相结合,可以打造栩栩如生的体验。

改进点击测试

深度可用于改进点击测试结果。平面点击测试仅适用于具有纹理的平面表面,而深度点击测试则更加详细,甚至适用于非平面和低纹理区域。这是因为深度命中测试使用来自场景的深度信息来确定点的正确深度和方向。

在以下示例中,绿色 Andys 代表标准平面命中测试,红色 Andys 代表深度命中测试。

设备兼容性

Depth API 仅在具有处理能力支持深度的设备中受支持,并且必须在 ARCore 中手动启用,如启用深度中所述。

一些设备可能还提供硬件深度传感器,如飞行时间 (ToF) 传感器。有关支持 Depth API 的设备的最新列表以及具有受支持硬件深度传感器(例如 ToF 传感器)的设备列表,请参阅 ARCore 支持的设备页面。

深度图像

Depth API 使用运动深度算法来创建深度图像,从而提供 3D 世界的视图。深度图像中的每个像素都与场景距离相机的测量值相关联。此算法会从不同角度拍摄多张设备图像,然后进行比较,以便在用户移动手机时估算与每个像素的距离。它有选择地使用机器学习来增加深度处理,即使用户的动作非常少,也是如此。还会充分利用用户设备可能拥有的任何其他硬件。如果设备具有专用的深度传感器(例如 ToF),该算法会自动合并来自所有可用来源的数据。这样可以增强现有的深度图像,并在相机不移动时实现深度。此外,它还可以在地图项很少或没有地图项的表面(例如白色墙壁)或包含移动人员或物体的动态场景中提供更好的深度。

下图显示了墙上挂有自行车的走廊的摄像头图像,以及基于摄像头图像生成的深度图像的可视化效果。红色区域距离镜头更近,蓝色区域更远。

运动深度

用户移动设备时,即可获得深度数据。该算法可以可靠、准确地进行 0 至 65 米外的深度估测。当设备与现实世界的距离为半米到大约五米时,便会获得最准确的结果。鼓励用户多移动设备的体验会获得更好、更佳的效果。

获取深度图像

借助 Depth API,您可以检索与每个相机帧匹配的深度图像。获得的深度图像与相机具有相同的时间戳和视野内参数。只有在用户开始移动设备来回移动后,才会提供有效的深度数据,因为深度是通过动作获取的。特征很少或没有地图项的表面(例如白色墙壁)将与不精确的深度相关联。

后续步骤