如何使用 ARKit 将 SCNScene 与物理 table 对齐?

How to align SCNScene to a physical table using ARKit?

我正在尝试找到将 SCNScene 与物理对齐的最佳策略 table。就像 ARKit 应用 WWWFreeRivers.

目前我正在测试绘制一个简单的平面模型,其尺寸与 table 相同。如果我画出 ARKit 检测到的平面,我可以看到平面的边缘不是很准确。它们总是超出边缘(下图)。

所以我不能真的依赖那个平面,只是将模型放在这个平面的中心。模型也没有正确旋转(下图)。

我有另一个想法使用 ARReferenceImage 技术,拍摄 table 顶部纹理的照片,然后让 ARKit 找到并匹配 table 的这个 "image"。但即使有木纹纹理,ARKit 也没有足够的数据来识别它。如果你有这些错误,ARKit 就会失败。它甚至不会尝试进行糟糕的匹配。

我该怎么做?

到目前为止我的想法:

还有什么想法吗?您认为最好的方法是什么?

我能想到您可以使用的两个选项。

  1. 您可以创建一个 ARWorldMap(仅限 iOS12+)并使用它代替 ARImageReference,在该区域四处走动,同时创建后续 ARKit 会话将记住的地图.您可以稍微试验一下如何使模型适合 table 的四个角(这有点乏味 w/o SceneView 编辑器提供了很多帮助)。但是,当您加载保存的 ARWorldMap 并针对它进行本地化时(就像 ARImageReference),您的模型每次都应该适合 table 的四个角。

  2. 如果您使用 Unity(及其 ARKit 插件)之类的东西,它具有更强大的编辑器工具 (3D viewer/designer)。有一些工具可以帮助您像 ARWorldMap 一样保存地图,然后将地图的详细信息引入编辑器,这样您就可以非常轻松地正确排列。 Placenote's Spatial Capture toolkit can help here. Placenote (iOS11+) creates its own "World Map" but it exposes the visual details in the Unity editor, making it easier to line things up and then localize against (Example)。该地图还从一开始就存储在托管云中,以便更轻松地跨手机共享。

P.S:这两个选项都要求您保持环境通常是静态的(不是大的光照变化等),尽管这与使用 ARIMageReference 时的约束类似。