ARKit有多个用户

Gui*_*uig 26 multiplayer augmented-reality swift ios11 arkit

如果有的话,将Apple的新ARKit用于多个用户/设备的最佳方式是什么?

似乎每个设备都有自己独立的场景理解.到目前为止,我最好的猜测是使用原始特征点位置并尝试在不同设备上匹配它们以将不同的视点粘合在一起,因为ARKit不提供任何绝对参考参考.

=== Edit1,我尝试过的东西===

1)特征点

我已经玩过暴露的原始特征点,我现在确信在他们目前的状态下他们是死路一条:

  • 它们不是原始要素点,它们只显示位置,但通常在跟踪的要素点中找不到任何属性
  • 它们的实例化不会逐帧进行,位置也不完全相同
  • 当相机输入几乎没有变化时,经常发生报告的特征点变化很多,其中很多都出现或消失.

总的来说,我认为尝试以某种有意义的方式使用它们是不合理的,不能在一个设备中进行任何类型的好点匹配,更不用说几个.替代方案是实现我自己的特征点检测和匹配,但这将更多地取代ARKit而不是利用它.

2)QR码

正如@Rickster建议的那样,我也尝试识别一个容易识别的对象,如QR码,并从该固定点获得相对参考变化(请参阅此问题)这有点困难,并暗示我使用一些openCV来估计相机姿势.但更重要的是非常有限

ric*_*ter 10

随着一些新的答案的增加,多用户AR是ARKit 2(iOS 12上的ARKit)的标题功能.关于ARKit 2的WWDC18谈话有一个很好的概述,Apple有两个开发人员示例代码项目可以帮助您入门:一个基本的例子,只有2个以上的设备进入共享体验,以及SwiftShot,一个为AR构建的真正的多人游戏.

主要观点:

  1. ARWorldMap将ARKit知道的所有关于本地环境的内容包装成可序列化的对象,因此您可以将其保存以供日后使用或将其发送到其他设备.在后一种情况下,"重定位"到由同一本地环境中的另一个设备保存的世界地图为两个设备提供相同的参照系(世界坐标系).

  2. 使用您选择的网络技术发送ARWorldMap设备之间:AirDrop,云共享,运营商鸽子等都可以工作,但Apple的Multipeer Connectivity框架是一个好的,简单的,安全的选项,因此它就是Apple在他们的示例项目中使用的.

  3. 所有这些只为您提供了创建共享体验的基础 - 您的应用程序在多个设备上的多个副本都使用与同一现实环境对齐的世界坐标系统.这就是让多个用户体验相同的静态 AR内容所需的一切,但如果您希望他们在AR中进行交互,您将需要使用您喜欢的网络技术.

    Apple的基本多用户AR演示显示编码ARAnchor 并将其发送给同行,因此一个用户可以点击将3D模型放置在世界中,而其他所有人都可以看到它.该SwiftShot游戏例如建立一个整体的网络协议,让所有用户获得相同的游戏操作(例如,在对方发射弹弓)和同步的物理结果(如倒下之后被击中块).两者都使用Multipeer Connectivity.

(顺便说一下,上面的第二点和第三点是你从@ andy的回答得到"2到6"的数字- 对ARKit方面没有限制,因为ARKit不知道有多少人可能收到你保存的世界地图.但是,Multipeer Connectivity有8个对等限制.无论您在此基础上构建的任何游戏/应用/体验,都可能会在添加更多对等体时出现延迟/性能扩展问题,但这取决于您的技术和设计.)

以下原始答案的历史兴趣......


这似乎是iOS开发者社区中一个积极研究的领域 - 我在上周遇到了几个试图在WWDC上解决这个问题的团队,而且还没有人开始破解它.所以我不确定还有一种"最佳方式",即使是一种可行的方式.

特征点相对于会话定位,并且没有单独识别,因此我认为在多个用户之间关联它们会很棘手.

会话对齐模式gravityAndHeading可能有用:将所有方向固定为(假定/估计为)绝对参考帧,但位置仍然相对于会话开始时设备的位置.如果你能找到一种方法将这个位置与绝对的东西联系起来 - 一个纬度/长度,或者一个iBeacon可能 - 并且可靠地做到这一点,并且具有足够的精度......那么,你不仅可以有一个参考框架由多个用户共享,您还拥有基于位置的AR的主要成分.(你知道,就像一个浮动的虚拟箭头,说在那里转到机场的A113门,或者其他什么.)

我听过的另一个途径是图像分析.如果你可以放置一些真正的标记 - 很容易识别像QR码这样的东西 - 考虑到多个用户,你可以使用某种形式的物体识别或跟踪(ML模型,也许?)来精确识别标记的位置和方向相对于每个用户,并从那里回来计算共享的参考框架.不知道可能是多么可行.(但是如果你去那条路线,或者类似的话,请注意ARKit为每个捕获的相机帧公开一个像素缓冲区.)

祝好运!


ARG*_*Geo 4

现在,在 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)
Run Code Online (Sandbox Code Playgroud)

AR 持久体验。如果您保存了一个world map,然后您的 iOS 应用程序变得不活动,您可以在下次启动应用程序时在相同的物理环境中轻松恢复它。您可以使用ARAnchors恢复world map将相同的虚拟 3D 内容(USDZ 或 DAE 格式)放置在与先前保存的会话相同的位置。