ARKit将物体隐藏在墙壁后面

我怎样才能使用ARKit跟踪的水平和垂直平面来隐藏墙壁/背后的物体? 目前,当你离开一个房间和/或在他们应该在后面的物体前面时,可以通过墙壁看到3D添加的物体。 那么是否有可能使用这些数据?ARKit使我能够提供更自然的AR体验,而不会出现穿墙的物体?

你有两个问题在这里。

如何为ARKit / SceneKit创build遮挡几何?

如果将SceneKit材质的colorBufferWriteMask设置为Swift中的空值( [] ),则使用该材质的任何对象都不会出现在视图中,但在渲染过程中它们仍会写入z缓冲区,这会影响渲染其他对象。 实际上,你会得到一个像你的对象一样的“洞”,通过它来显示背景(在ARSCNView的情况下是摄像机的feed),但是仍然可以隐藏其他的SceneKit对象。

您还需要确保遮挡在任何其他节点之前呈现它应该模糊。 你可以使用节点层次结构来做这件事(我不记得父亲节点是在他们的子节点之前还是在其他节点之前渲染的,但是很容易testing)。 作为层次结构中对等体的节点不具有确定性顺序,但是您可以使用renderingOrder属性强制执行顺序而不考虑层次结构。 该属性默认为零,因此将其设置为-1将在所有内容之前进行渲染。 (或者为了更好的控制,可以将几个节点的renderingOrder设置为一系列值。)

ARKit开发人员网站上的示例代码项目是这样做的 – 它可以让检测到的平面遮挡虚拟对象。 (这个项目中有很多其他的代码,所以可能需要一些工作才能find它,请查看Plane类,IIRC。)

如何检测墙/等,所以你知道在哪里把遮挡几何?

对不起,这个ARKit帮不了多less。 它只检测水平面。 还有一个随机的点云,与场景特征有关。

您可能可以尝试根据飞机检测到的楼层位置来推断墙的位置,或者让用户使用针对特征点的命中检测来标记某些墙,或者将摄像机图像提供给其他软件(ML模型可能是? )可以帮助你识别墙壁。 事实上,开箱即用的ARKit只能提供简单的帮助来制作(一个)房间级别的AR体验 – 更多的是可能的,但是您需要做更多的工作。