java - ARCore – 如何将真实世界对象放置在 3d 模型前面?
问题描述
我使用ARCore Sceneform
插件创建了一个 Android AR 应用程序。我可以在突出显示的平面上放置 3D 模型。但即使我将一个真实的物体放在相机前(或者只是在相机前挥动我的手),它也只能在 3d 物体后面可见。
如何在 Android 中将真实世界的对象放在 3D 对象的前面?
我们可以使用任何其他插件来实现这一点吗?
解决方案
ARCore 1.18
ARCore 1.18 现在Occlusion
通过全新的 Depth API 支持功能。查看支持深度 API 的设备列表,了解您的 Android 智能手机是否支持遮挡功能。
Google 文档对 Depth API 的描述如下:
Depth API 使用 depth-from-motion 算法来创建深度图,您可以使用
acquireDepthImage()
方法获取。该算法从不同角度拍摄多张设备图像,并将它们进行比较,以估计用户移动手机时到每个像素的距离。如果设备具有活动深度传感器,例如飞行时间传感器(或 ToF 传感器),则该数据会自动包含在处理后的深度中。这增强了现有的深度图,即使在相机不移动时也能实现深度。它还可以在具有很少或没有特征的表面上提供更好的深度,例如白墙,或者在具有移动的人或物体的动态场景中。
ARCore 1.17
但是你不能Object Occlusion
在之前的 ARCore 1.17 中做任何操作。它不支持深度通道合成和深度通道操作,除了相机散焦功能。因此,您在 AR 应用程序中使用的所有虚拟模型都只是使用Over compositing 操作和以下公式放置在真实世界的视频上:
Argb * Aa + Brgb * (1.0 – Aa)
// 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
但是,如果您在 Unity for Android 设备中使用,您可以获得遮挡管理功能(虚拟按钮示例) 。PTC Vuforia 9.0
或者,如果您在 iOS 设备上使用 ARKit 3.5 或 ARKit 4.0。ARKit 4.0 为您提供了最广泛的深度通道工具包,包括新的Depth API
. 有人物遮挡、人脸遮挡和物体遮挡功能。
在这篇文章中,您可以了解Occlusion
ARKit 的主要原则。
推荐阅读
- graphql - Github v4 GraphQL API - 访问 Marketplace 应用结果 (Travis CI)
- reactjs - 嵌套路由链接到两个不同的组件
- azure - 如何使用 GUI 工具浏览 Azure Data Lake gen 2
- javascript - 如何使用 vue.js 嵌套 for 循环遍历两个带有 v-for 的数组
- r - 从向量中递归搜索文件名R
- php - 如何在此代码中格式化“其他”?
- python - Python pandas 转置汇总内容
- date - 如何在 Google Apps 脚本中添加一天事件的开始日期
- javascript - 如何显示有关堆叠上下文的 div 顶部
- wix - 使用定制的 Wix ProgressDlg 不会触发安装顺序