ARAnchor 和 AnchorEntity 有什么区别?

问题描述 投票:0回答:1

我目前正在使用 RealityKit 做一些实验。

我一直在查看一些示例代码,我对

ARAnchor
AnchorEntity
之间的差异以及何时使用其中一个感到有点困惑。

到目前为止我知道:

  • 两者都是描述现实世界中的位置的锚。
  • AnchorEntity
    还可以将其他
    Entity
    作为子级,因此您可以将模型对象直接添加到锚点。您无法使用
    ARAnchor
    执行此操作,您必须“手动”将模型对象添加到
    rootNode
    ,并使用正确放置锚点的位置。
  • 在文档中,它说 ARKit 使用添加的
    ARAnchor
    来优化锚点周围区域的跟踪。
    AnchorEntity
    的文档没有指定这一点。

现在,我将

AnchorEntity
添加到会话中作为“根节点”,因为它使用起来更简单,这样我就可以简单地将模型作为子项直接添加到该锚点。但随后我还向场景的锚点添加了位于同一位置的
ARAnchor
,以增强围绕该点的跟踪。 这个有必要吗?

问:任何人都可以帮我澄清这两者的区别和用例吗?

swift augmented-reality arkit realitykit
1个回答
23
投票

更新日期:2023 年 11 月 26 日


ARAnchor 与 AnchorEntity

ARAnchor
AnchorEntity
类都是为了同一个神圣目的而创建的——将 3D 模型与现实世界的对象联系起来。

RealityKit

AnchorEntity
极大地扩展了 ARKit
ARAnchor
的功能。这两者之间最重要的区别是
AnchorEntity
自动跟踪现实世界目标,但是当您使用 RealityKit 时
ARAnchor
需要
session(...)
实例方法(如果使用 SceneKit,则需要
renderer(...)
实例方法)来完成它。考虑到
ARAnchors
的集合存储在 ARSession 对象中,而
AnchorEntities
的集合存储在 Scene 中。

此外,生成 ARAchors 需要手动会话配置,而生成 AnchorEntities 需要最少的开发人员参与。

iOS AR场景的层级差异:

RealityKit 的主要优点是能够同时使用不同的 AnchorEntities,例如

.plane
.body
.object
。 RealityKit 中有
automaticallyConfigureSession
实例属性。启用后,
ARView
会自动运行
ARSession
,其配置将根据您的相机模式和场景锚点进行更新。禁用后,需要使用您自己的配置手动运行会话。

arView.automaticallyConfigureSession = true           // default

如您所知,在 ARKit 中,您只能在当前会话中运行一个配置:World、Body 或 Geo。然而,ARKit 中有一个例外 - 您可以同时运行两个配置 - FaceTracking 和 WorldTracking(其中一个必须是driver,另一个必须是driven)。

let config = ARFaceTrackingConfiguration()
config.isWorldTrackingEnabled = true
arView.session.run(config)


Apple 开发者文档说:

在 RealityKit 框架中,您使用

AnchorEntity
实例作为实体层次结构的根,并将其添加到场景实例的
anchors collection
中。这使得 ARKit 能够将锚实体及其所有分层后代放置到现实世界中。除了锚点实体继承自
Entity
类的组件之外,锚点实体还符合
HasAnchoring
协议,为其提供一个
AnchoringComponent
实例。

AnchorEntity
具有三个构建块:

  • 变换组件(包含平移、旋转和缩放的变换矩阵)
  • 同步组件(实体的同步数据,用于多用户体验)
  • 锚定组件(允许选择锚点类型 -
    world
    body
    image


所有实体都有

Synchronization component
帮助组织 协作会议


在 iOS 版 RealityKit 中,

AnchorEntity
对象具有适用于 11 种不同场景的 11 种特定锚点类型(但请记住,在 macOS 版 RealityKit 中,您只能使用两种类型的锚点 –
AnchorEntity(world: .zero)
AnchorEntity(.camera)
):

  • ARA锚
    • 帮助实现 10 个 ARKit 锚点,包括 ARGeoAnchor 和 ARAppClipCodeAnchor
  • 身体
  • 相机
  • 图像
  • 光线投射结果
  • 物体
  • 飞机
  • 世界
    • (仅适用于visionOS)
    • (仅适用于visionOS)


您可以在应用程序中同时使用对象

ARAnchor
AnchorEntity

您可以在此

此帖子
中找到有关
ARAnchor
AnchorEntity 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.