景深更加真实

平台专用指南

作为 AR 应用开发者,您希望为用户提供虚拟与现实无缝融合的体验。当用户在场景中放置虚拟对象时,希望该对象看起来像是真实存在的。如果您要构建一款供用户选购家具的应用,那么您希望用户能够确信自己即将购买的扶手椅能否放入家中。

Depth API 可帮助设备的相机了解场景中真实对象的大小和形状。它可以创建深度图片或深度图,从而为应用增添一层逼真效果。您可以使用深度图提供的信息打造逼真的沉浸式用户体验。

使用 Depth API 进行开发的用例

Depth API 可实现物体遮挡、增强沉浸感和全新互动,从而提升 AR 体验的真实感。以下是您可以在自己的项目中使用该工具的一些方式。如需查看深度功能的实际运作示例,请探索 ARCore Depth Lab 中的示例场景,其中演示了访问深度数据的不同方式。此 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,您可以检索与每个相机帧匹配的深度图像。获取的深度图像与相机具有相同的时间戳和视野内在属性。由于深度是通过移动获取的,因此只有在用户开始移动设备后,系统才会提供有效的深度数据。具有很少或没有特征的表面(例如白墙)将与不精确的深度相关联。

后续步骤

  • 请查看 ARCore Depth Lab,其中演示了访问深度数据的不同方法。