我使用ARCore Sceneform
插件创建了一个Android AR应用程序。 我能够将3D模型放置在突出显示的平面上。 但是,即使我在相机前面放置一个真实的物体(或者只是在相机前挥手),它也仅在3D对象后面可见。
我该如何在Android中将真实世界的对象放置在3D对象前面?
我们可以使用其他插件来实现这一点吗?
我使用ARCore Sceneform
插件创建了一个Android AR应用程序。 我能够将3D模型放置在突出显示的平面上。 但是,即使我在相机前面放置一个真实的物体(或者只是在相机前挥手),它也仅在3D对象后面可见。
我该如何在Android中将真实世界的对象放置在3D对象前面?
我们可以使用其他插件来实现这一点吗?
ARCore 1.18现在通过全新的深度API实现了Occlusion
功能。请查看支持深度API的设备列表以确定您的Android智能手机是否支持遮挡功能。
Google文档对Depth API的说明如下:
深度API使用基于运动的深度算法创建深度图像,您可以使用
acquireDepthImage()
方法获得深度图像。该算法从不同角度拍摄多个设备图像,并将它们比较以估计用户移动时每个像素的距离。如果设备具有活动深度传感器(例如飞行时间传感器(ToF传感器)),则该数据会自动包含在处理后的深度中。这增强了现有的深度图并使相机静止时也能够获得深度。它还提供了更好的深度效果,适用于具有少量或没有特征的表面(例如白墙),或在具有移动人员或物品的动态场景中。
但是,在先前的ARCore 1.17中,您无法执行任何Object Occlusion
操作。除了相机聚焦功能外,它不支持深度通道合成和深度通道操作。因此,您在AR应用程序中使用的所有虚拟模型都只是使用以下公式通过Over合成操作放置于真实世界视频上:
// where Argb is RGB of a foreground image
// Aa is Alpha channel of a foreground image
// Brgb is RGB of a background video
// and 1.0 is a normalised value (in range 0.0...1.0)
// (Argb * Aa) is a premultiplied RGBA image
// (1.0 – Aa) is an inversion of a foreground alpha
Depth API
。 ARKit 4.0提供了一系列用于处理深度通道的工具包,包括People Occlusion,Face Occlusion和Object Occlusion特性。
在这篇文章中,您可以阅读有关ARKit中Occlusion主要原则的介绍。