在 iOS 的 ARKit 中。如果您展示一个虚拟物品,那么它总是出现在任何真实物品之前。这意味着如果我站在虚拟物品前面,那么我仍然会看到虚拟物品。我该如何解决这种情况?
瓶子应该是可见的,但它正在切断。
仅使用 ARkit 无法实现这一点。它没有提供解决遮挡问题的现成解决方案,这是一个难题。
理想情况下,您会知道投影在相机上的每个像素的深度,并使用它来确定前面和后面的像素。我不会尝试 ARKit 暴露的特征点,因为 1)它们的位置不准确 2)在两帧之间无法知道帧 A 的哪个特征点是帧 B 中的哪个特征点。这是处理噪声数据的方法什么都好。
您可能可以使用第三方选项来处理捕获的图像并了解场景中的深度或不同深度级别,但我不知道有什么好的解决方案。有一些 SLAM 技术可以产生密集的深度图,例如 DTAM ( https://www.kudan.eu/kudan-news/different-types-visual-slam-systems/ ),但这将重做 arkit 的大部分工作。可能还有其他我不知道的方法。snap之类的应用程序以自己的方式执行此操作,因此有可能!
你想要达到的目标并不容易。
您需要使用某种图像处理来检测现实世界中“应该可见”的部分。或者可能是具有深度信息的 ARKit 特征点,然后基于此您必须添加“一个不可见的虚拟对象”,以削减其背后的事物的绘制。这将代表您在“虚拟世界”中的“真实对象”,以便背景(相机馈送)在存在此不可见虚拟对象的位置保持可见。
所以基本上你的问题是在现实世界坐标系上映射虚拟物品的坐标,简而言之,你想看到被真实物品阻挡的虚拟物品,只有通过真实物品才能看到虚拟物品。
如果是这样,你需要知道这个环境中每个物体的物理关系,然后你需要确切地知道你在哪里来决定虚拟物品是否被阻挡。
这不是解决此问题的直观方法,但是,这是我能想到的唯一方法。
干杯。