Swift 具有多个用户的ARKit
在多个用户/设备上使用苹果新ARKit的最佳方式是什么(如果有的话) 似乎每个设备都有各自的场景理解。到目前为止,我最好的猜测是使用原始特征点位置,并尝试在设备之间进行匹配,以将不同的视图点粘合在一起,因为ARKit不提供任何绝对参考 我试过的东西=== 1) 特征点 我已经尝试过暴露的原始特性点,现在我确信,在它们当前的状态下,它们是一条死胡同:Swift 具有多个用户的ARKit,swift,augmented-reality,ios11,arkit,multiplayer,Swift,Augmented Reality,Ios11,Arkit,Multiplayer,在多个用户/设备上使用苹果新ARKit的最佳方式是什么(如果有的话) 似乎每个设备都有各自的场景理解。到目前为止,我最好的猜测是使用原始特征点位置,并尝试在设备之间进行匹配,以将不同的视图点粘合在一起,因为ARKit不提供任何绝对参考 我试过的东西=== 1) 特征点 我已经尝试过暴露的原始特性点,现在我确信,在它们当前的状态下,它们是一条死胡同: 它们不是原始特征点,它们只显示位置,但不显示通常在跟踪特征点中找到的属性 它们的实例化不会从一帧延续到另一帧,位置也不完全相同 通常情况下,当相机
- 它们不是原始特征点,它们只显示位置,但不显示通常在跟踪特征点中找到的属性
- 它们的实例化不会从一帧延续到另一帧,位置也不完全相同
- 通常情况下,当相机输入几乎不变时,报告的特征点会发生很大的变化,要么大量出现,要么大量消失
正如@Rickster所建议的,我还尝试识别一个容易识别的对象,比如二维码,并从该固定点获取相对参考变化(参见)。这有点困难,并暗示我使用一些openCV来估计相机姿势。但更重要的是,正如一些较新的答案所补充的那样,多用户AR是ARKit 2(iOS 12上的又称ARKit)的一个标题功能。有一个很好的概述,苹果有两个开发人员示例代码项目可以帮助您入门:一个是将2+设备加入共享体验的项目,另一个是为AR构建的真正的多人游戏 要点:
ARWorldMap
:空投、云共享、信鸽等都可以,但苹果的是一个好的、简单的、安全的选择,因此苹果在其示例项目中使用了这一技术
ARAnchor
并将其发送给其他用户,以便一个用户可以点击以放置3D图像
世界上的模特和所有其他人都能看到它。构建了一个完整的网络协议,这样所有用户都可以获得相同的游戏操作(比如相互发射弹弓)和同步的物理结果(比如被击中后掉下来的方块)。两者都使用
这似乎是iOS开发者社区中一个活跃的研究领域——上周我在WWDC上遇到了几个团队,他们试图解决这个问题,甚至还没有人开始破解它。所以我不确定是否有一个“最好的方法”,即使是一个可行的方法 功能点是相对于会话定位的,并且不是单独标识的,因此我认为在多个用户之间关联它们是很困难的 会话对齐模式可能会有帮助:它将所有方向固定到(假定/估计为)绝对参考帧,但位置仍然相对于会话启动时设备所在的位置。如果你能找到一种方法,将这个位置与某个绝对值联系起来——一个纬度/长度,或者一个iBeacon——并以足够的精度可靠地做到这一点。。。那么,你不仅有一个可以被多个用户共享的参考框架,还有基于位置的AR的主要成分(你知道,就像一个漂浮的虚拟箭头,上面写着向右拐,到机场A113号门,或者其他什么地方) 我听说讨论的另一个途径是图像分析。如果你能在多个用户面前放置一些真正的标记——容易机器识别的东西,如QR码,你可以使用某种形式的对象识别或跟踪(可能是ML模型?)来精确识别标记相对于每个用户的位置和方向,然后从那里计算出一个共享的参考系。不知道这有多可行。(但如果您选择该路线或类似路线,请注意,对于每个捕获的相机帧。)
祝你好运 不是防弹答案,更像是权宜之计,但也许你会发现这些答案很有用。 所有人都假设玩家在同一个地方
session.getCurrentWorldMap { worldMap, error in
guard let worldMap = worldMap else {
showAlert(error)
return
}
}
let configuration = ARWorldTrackingConfiguration()
configuration.initialWorldMap = worldMap
session.run(configuration)