将虚拟物体放置在真实世界物体的后面

3
在iOS的ARKit中,如果您显示一个虚拟物品,它总是出现在任何真实物品之前。这意味着如果我站在虚拟物品前面,我仍然会看到虚拟物品。我该如何解决这种情况?

enter image description here

瓶子应该是可见的,但它被裁剪了。

这与 z-index 有什么关系? - Pochi
我只是使用z-index来更清楚地解释问题,因为人们熟悉z-index。 - john doe
“真实世界物体”是指相机输入,而“虚拟物体”是指您绘制的东西,对吗? - Pochi
我刚刚添加了一张图片。希望这样更清晰明了。 - john doe
3个回答

5

仅靠ARkit是无法实现这一点的。它没有提供任何解决遮挡问题的现成解决方案,这是一个难题。

理想情况下,您需要知道相机上每个像素的深度,并使用它来确定前面和后面的像素。我不会尝试使用ARKit公开的特征点进行操作,因为1)它们的位置不准确,2)无法知道帧A中的哪个特征点与帧B中的哪个特征点对应。这些数据太嘈杂了,很难做好任何事情。

您可能可以通过第三方选项实现某些内容,以处理捕获的图像并了解场景中的深度或不同深度级别,但我不知道任何好的解决方案。有一些SLAM技术可以产生像DTAM这样的密集深度图(https://www.kudan.eu/kudan-news/different-types-visual-slam-systems/),但那将重新做ARkit正在做的大部分工作。可能还有其他我不知道的方法。像Snap这样的应用程序以自己的方式进行操作,因此这是可能的!


1
基本上你的问题是将虚拟物品的坐标映射到真实世界坐标系中,简而言之,你想看到真实物品遮挡虚拟物品,只有当你穿过真实物品时才能看到虚拟物品。
如果是这样,你需要了解该环境中每个物体的物理关系,然后确定你所处的位置,以决定是否被虚拟物品遮挡。
这不是一个直观的解决方法,但这是我能想到的唯一方法。
干杯。

感谢您的回答。 - john doe

1
你所要实现的并不容易。需要使用某种图像处理技术来检测“应该可见”的真实世界部分。或者利用ARKit功能点的深度信息,然后根据此添加“一个不可见的虚拟对象”,以切断其后面物体的绘制。这将在“虚拟世界”中代表你的“真实对象”,使得背景(相机反馈)在存在这个不可见的虚拟对象的地方仍然可见。请保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接