景深更加真实

平台专用指南

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

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

使用 Depth API 进行开发的用例

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

启用遮挡

遮挡(即准确渲染虚拟对象在真实对象后面)对于沉浸式 AR 体验至关重要。假设用户希望将虚拟 Andy 放置在一个场景中,该场景中门边有一个后备箱。如果不进行遮挡渲染,Andy 将与后备箱边缘不真实地重叠。如果您使用场景深度,并了解虚拟 Andy 相对于木箱等周围环境的距离,则可以准确地渲染带有遮挡效果的 Andy,使其在周围环境中看起来更加逼真。

转换场景

通过渲染虚拟雪花落在沙发扶手和靠垫上,或将用户的客厅笼罩在薄雾中,让用户进入全新的沉浸式世界。您可以使用深度创建一个场景,让虚拟光源与真实对象互动、隐藏在后面并重新照亮真实对象。

距离和景深

需要表示某物很远?您可以使用 Depth API 测量距离并添加景深效果,例如模糊处理场景的背景或前景。

允许用户与 AR 对象互动

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

改进了点击测试

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

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

设备兼容性

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

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

深度图像

Depth API 使用“从运动估算深度”算法创建深度图像,以便用户以 3D 视图查看周围环境。深度图中的每个像素都与场景与相机之间的距离测量值相关联。此算法会从不同角度拍摄多张设备图片,并将其进行比较,以估算用户移动手机时与每个像素的距离。它会选择性地使用机器学习来提高深度处理能力,即使用户的动作非常轻微,也能达到理想效果。它还可以利用用户设备可能具有的任何其他硬件。如果设备配备专用深度传感器(例如 ToF),算法会自动合并来自所有可用来源的数据。这可以增强现有的深度图像,即使相机不移动也能实现深度感知。此外,它还可在特征较少或没有特征的表面(例如白墙)上或包含移动人物或物体的动态场景中提供更好的深度。

以下图片显示了墙上挂着自行车的走廊的摄像头图片,以及根据摄像头图片创建的深度图片的可视化效果。红色区域表示距离摄像头较近,蓝色区域表示距离摄像头较远。

从运动中提取深度

当用户移动设备时,深度数据就会可用。该算法可在 0 到 65 米的距离内获得可靠且准确的深度估算值。当设备距离真实场景半米到五米时,可获得最准确的结果。鼓励用户更多地移动设备的体验会带来越来越理想的效果。

获取深度图像

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

后续步骤