一尘不染

具有多个用户的ARKit

swift

与多个用户/设备一起使用Apple的新ARKit的最佳方法是什么?

似乎每个设备都可以分别了解自己的场景。到目前为止,我最好的猜测是使用原始特征点位置,并尝试在设备之间进行匹配,以将不同的视图点粘合在一起,因为ARKit没有提供任何绝对参考引用。

===编辑1,我尝试过的事情===

1)特征点

我一直在玩耍并暴露了原始特征点,现在我确信在它们的当前状态下它们是死胡同:

  • 它们不是原始特征点,它们仅公开位置,但通常不会在跟踪的特征点中找到任何属性
  • 它们的实例化不会在帧之间继续,位置也不完全相同
  • 经常发生的是,当摄像机输入几乎没有变化时,报告的特征点变化很大,有很多出现或消失。

因此,总的来说,我认为尝试以某种有意义的方式使用它们,而不能够在一台设备(更不用说多个设备)内进行任何类型的良好点匹配是不合理的。另一种方法是实现我自己的特征点检测和匹配,但是与其取代ARKit,还不如取代ARKit。

2)QR码

正如@Rickster所建议的那样,我还尝试了识别一个易于识别的对象(如QR码),并从该固定点获取了相对参照更改(请参阅[此问题,这有点困难,这暗示我使用一些openCV来估计相机姿态。但更重要的是非常有限


阅读 203

收藏
2020-07-07

共1个答案

一尘不染

现在,在WWDC 2018上发布ARKit 2.0之后,可以为2至6个用户制作游戏。

为此,您需要使用ARWorldMap类。通过保存world maps并使用它们来开始新的会话,您的iOS应用程序现在可以添加新的增强现实功能:多用户和持久的AR体验。

AR多用户体验
。现在,您可以通过将存档的ARWorldMap对象发送到附近的iPhone或iPad来创建参考的共享框架。使用多个设备同时跟踪同一设备时world map,您可以建立一种体验,使所有用户(最多6个)可以共享并看到相同的虚拟3D内容(USDZ在Xcode 10和iOS
12中使用全新的Pixar的3D文件格式)。

session.getCurrentWorldMap { worldMap, error in 
    guard let worldMap = worldMap else {
        showAlert(error)
        return
    }
}

let configuration = ARWorldTrackingConfiguration()
configuration.initialWorldMap = worldMap
session.run(configuration)

AR持久经验 。如果保存world map,然后iOS应用程序变为非活动状态,则可以在下一次启动应用程序时并在相同的物理环境中轻松还原它。您可以使用ARAnchors从恢复world map到从以前保存的会话相同的位置相同的虚拟3D内容(以USDZ或DAE格式)的地方。

2020-07-07