ARAnchor 和 AnchorEntity 有什么区别?
What's the difference between ARAnchor and AnchorEntity?
我目前正在用 RealityKit 做一些实验。
我一直在查看一些示例代码,我对 ARAnchor
和 AnchorEntity
之间的区别以及何时使用其中一个感到有点困惑。
到目前为止我知道:
- 两者都是描述现实世界中某个位置的锚点。
AnchorEntity
也可以有其他 Entity
作为 children,因此您可以将模型 objects 直接添加到锚点。你不能用 ARAnchor
做到这一点,你必须将模型 objects "manually" 添加到 rootNode
,并使用锚点的位置正确放置它。
- 在文档中它说 ARKit 使用添加的
ARAnchor
来优化锚点周围区域的跟踪。 AnchorEntity
的文档没有指定这一点。
现在我将 AnchorEntity
作为 "root node" 添加到会话中,因为它使用起来更简单,所以我可以直接将模型作为 children 添加到此锚点。但随后我还在场景的锚点上添加了位于相同位置的 ARAnchor
,以增强围绕该点的跟踪。 这个有必要吗?
问:谁能帮我弄清楚这两者的区别和用例?
更新时间:2022 年 5 月 10 日。
ARAnchor
和 AnchorEntity
class 都是为了同一个神圣的目的而造的– 将 3D 模型绑定到您的 real-world objects.
RealityKit AnchorEntity
大大扩展了 ARKit ARAnchor
的功能。这两者之间最重要的区别是 AnchorEntity
自动跟踪真实世界的目标,但 ARAnchor
需要 session(...)
实例方法(或 SceneKit 的 renderer(...)
实例方法)来完成此操作。考虑到 ARAnchors
的 collection 存储在 ARSession 中,AnchorEntities
的 collection 存储在 Scene 中。
层级差异:
RealityKit 的主要优点是能够同时使用不同的 AnchorEntities,例如 .plane
、.body
或 .object
。 RealityKit 中有 automaticallyConfigureSession
个实例 属性。启用后,ARView
会自动 运行 生成一个 ARSession
,其配置会根据您的相机模式和场景锚点进行更新。禁用时,session 需要使用您自己的配置手动 运行。
arView.automaticallyConfigureSession = true // default
如您所知,在 ARKit 中,您可以 运行 当前 session 中的一个配置:World、Body 或 Geo。然而,ARKit 中有一个例外 - 你可以 运行 两个配置一起使用 - FaceTracking 和 WorldTracking(其中一个必须是 driver,另一个 - 驱动).
let config = ARFaceTrackingConfiguration()
config.isWorldTrackingEnabled = true
arView.session.run(config)
Apple 开发者文档说:
In RealityKit framework you use an AnchorEntity
instance as the root of an entity hierarchy, and add it to the anchors collection
for a Scene instance. This enables ARKit to place the anchor entity, along with all of its hierarchical descendants, into the real world. In addition to the components the anchor entity inherits from the Entity
class, the anchor entity also conforms to the HasAnchoring
protocol, giving it an AnchoringComponent
instance.
AnchorEntity
有三个积木:
- 变换组件(包含平移、旋转和缩放的变换矩阵)
- 同步组件(多用户体验的实体同步数据)
- 锚定组件(允许选择锚定类型 –
world
、body
或 image
)
所有实体都有 Synchronization component
帮助组织 协作 sessions.
AnchorEntity
有九种特定的锚点类型,用于九种不同的目的:
- AR锚点
- 帮助实现 10 个 ARKit 锚点,包括 ARGeoAnchor 和 ARAppClipCodeAnchor
- 正文
- 相机
- 脸
- 图片
- object
- 飞机
- 世界
- 光线投射结果
您可以在您的应用程序中同时使用 classes ARAnchor
和 AnchorEntity
。或者你可以只使用 AnchorEntity
class 因为它是 all-sufficient 一个。
For additional info about ARAnchor
and AnchorEntity
, please look at THIS POST.
我目前正在用 RealityKit 做一些实验。
我一直在查看一些示例代码,我对 ARAnchor
和 AnchorEntity
之间的区别以及何时使用其中一个感到有点困惑。
到目前为止我知道:
- 两者都是描述现实世界中某个位置的锚点。
AnchorEntity
也可以有其他Entity
作为 children,因此您可以将模型 objects 直接添加到锚点。你不能用ARAnchor
做到这一点,你必须将模型 objects "manually" 添加到rootNode
,并使用锚点的位置正确放置它。- 在文档中它说 ARKit 使用添加的
ARAnchor
来优化锚点周围区域的跟踪。AnchorEntity
的文档没有指定这一点。
现在我将 AnchorEntity
作为 "root node" 添加到会话中,因为它使用起来更简单,所以我可以直接将模型作为 children 添加到此锚点。但随后我还在场景的锚点上添加了位于相同位置的 ARAnchor
,以增强围绕该点的跟踪。 这个有必要吗?
问:谁能帮我弄清楚这两者的区别和用例?
更新时间:2022 年 5 月 10 日。
ARAnchor
和 AnchorEntity
class 都是为了同一个神圣的目的而造的– 将 3D 模型绑定到您的 real-world objects.
RealityKit AnchorEntity
大大扩展了 ARKit ARAnchor
的功能。这两者之间最重要的区别是 AnchorEntity
自动跟踪真实世界的目标,但 ARAnchor
需要 session(...)
实例方法(或 SceneKit 的 renderer(...)
实例方法)来完成此操作。考虑到 ARAnchors
的 collection 存储在 ARSession 中,AnchorEntities
的 collection 存储在 Scene 中。
层级差异:
RealityKit 的主要优点是能够同时使用不同的 AnchorEntities,例如 .plane
、.body
或 .object
。 RealityKit 中有 automaticallyConfigureSession
个实例 属性。启用后,ARView
会自动 运行 生成一个 ARSession
,其配置会根据您的相机模式和场景锚点进行更新。禁用时,session 需要使用您自己的配置手动 运行。
arView.automaticallyConfigureSession = true // default
如您所知,在 ARKit 中,您可以 运行 当前 session 中的一个配置:World、Body 或 Geo。然而,ARKit 中有一个例外 - 你可以 运行 两个配置一起使用 - FaceTracking 和 WorldTracking(其中一个必须是 driver,另一个 - 驱动).
let config = ARFaceTrackingConfiguration()
config.isWorldTrackingEnabled = true
arView.session.run(config)
Apple 开发者文档说:
In RealityKit framework you use an
AnchorEntity
instance as the root of an entity hierarchy, and add it to theanchors collection
for a Scene instance. This enables ARKit to place the anchor entity, along with all of its hierarchical descendants, into the real world. In addition to the components the anchor entity inherits from theEntity
class, the anchor entity also conforms to theHasAnchoring
protocol, giving it anAnchoringComponent
instance.
AnchorEntity
有三个积木:
- 变换组件(包含平移、旋转和缩放的变换矩阵)
- 同步组件(多用户体验的实体同步数据)
- 锚定组件(允许选择锚定类型 –
world
、body
或image
)
所有实体都有 Synchronization component
帮助组织 协作 sessions.
AnchorEntity
有九种特定的锚点类型,用于九种不同的目的:
- AR锚点
- 帮助实现 10 个 ARKit 锚点,包括 ARGeoAnchor 和 ARAppClipCodeAnchor
- 正文
- 相机
- 脸
- 图片
- object
- 飞机
- 世界
- 光线投射结果
您可以在您的应用程序中同时使用 classes ARAnchor
和 AnchorEntity
。或者你可以只使用 AnchorEntity
class 因为它是 all-sufficient 一个。
For additional info about
ARAnchor
andAnchorEntity
, please look at THIS POST.