针对具体平台的指南
Android (Kotlin/Java)
Android NDK (C)
Unity(AR 基础)
Unreal 引擎
作为 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) 传感器。请参阅支持 ARCore 的设备页面 支持 Depth API 的设备的最新列表以及 具有受支持的硬件深度传感器,例如 ToF 传感器。
深度图像
Depth API 使用运动深度算法创建深度图像,从而呈现世界的 3D 视图。深度图像中的每个像素都与一个测量值相关联,该测量值用于测量场景与相机的距离。此算法会从不同角度获取多张设备图片并进行比较,以估算用户移动手机时与每个像素的距离。它有选择地利用机器学习技术来加大深度处理能力,即使用户进行的动作微乎其微,也无妨。它还利用了用户设备可能具有的任何其他硬件。如果设备具有专用的深度传感器(例如 ToF),该算法会自动合并来自所有可用来源的数据。这增强了现有的深度图像,即使相机不移动,也能实现深度。此外,对于特征较少或完全没有特征的表面,例如白色墙壁,或者包含移动人物或物体的动态场景,该模式还可以提高深度。
以下图片显示了墙上挂着自行车的走廊的相机图像,以及根据相机图像创建的深度图像的可视化效果。红色区域离镜头较近,蓝色区域离镜头较远。
运动深度
深度数据会在用户移动设备时可用。该算法可以获得 0 到 65 米外的强大而准确的深度估算值。当设备与现实场景相距半米到五米左右时,可获得最准确的结果。鼓励用户多移动设备的体验会越来越好。
获取深度图像
借助 Depth API,您可以检索与每个相机帧匹配的深度图像。获取的深度图像具有与相机相同的时间戳和视野内参数。只有在用户开始移动设备后才提供有效的深度数据,因为深度是通过运动获得的。地图项较少或完全没有地图项的表面(如白色墙壁),所关联深度将不精确。
后续步骤
- 请查看 ARCore 深度实验室,其中介绍了获取深度数据的不同方法。