5

我想在 ARKit 中构建一个演示应用程序,但我对 beta 版目前可能实现的功能有一些疑问(Apple 一直将此称为 RealityKit 或 ARKit 3.0)。


我正在尝试构建的演示应用程序应该执行以下操作:

  1. 识别真实环境中的对象或图像,并在那里创建锚点

  2. 渲染附加到锚点的虚拟模型

  3. 让虚拟模型呈现遮挡

  4. 让虚拟模型与锚图像/对象一起移动


我尝试从早期版本(利用 SceneKit 的 ARKit 2.0)中调整一些代码,但某些功能(如人物遮挡)不是 ARKit 2.0 的一部分。

由于 Apple 一直在迭代其测试版,因此在其网站和 WWDC 2019 上宣传的许多功能似乎已从 RealityKit 的文档中消失(人物遮挡、身体跟踪、世界跟踪)。

根据我的理解,ARKit 2.0 可以实现项目 (1) 和 (2)。第 (3) 项在测试版中尽可能宣传,但我几乎看不到任何文档。

这可以在最新的测试版中做到吗?如果是这样,最好的方法是什么?如果没有,是否有任何解决方法,例如混合新旧 API 之类的?

4

1 回答 1

6

您在这里提到的所有挑战都可能在ARKit/ SceneKitpair 或 in 中RealityKit

选择配置类型

  1. 识别真实环境中的对象或图像,并在那里创建锚点。

您可以在 ARKit中识别3D objects或使用以下配置:Images

let configuration = ARWorldTrackingConfiguration()

guard let obj = ARReferenceObject.referenceObjects(inGroupNamed: "Resources", 
                                                         bundle: nil) 
else { return }

configuration.detectionObjects = obj     // Allows you create ARObjectAnchor
sceneView.session.run(configuration)

和:

let config = ARWorldTrackingConfiguration()

guard let img = ARReferenceImage.referenceImages(inGroupNamed: "Resources", 
                                                       bundle: nil) 
else { return }

config.detectionImages = img             // Allows you create ARImageAnchor
config.maximumNumberOfTrackedImages = 3
sceneView.session.run(config)

但是,如果您想在 RealityKit 中实现类似的行为,请使用以下命令:

let objectAnchor = AnchorEntity(.object(group: "Resources", name: "object"))

和:

let imageAnchor = AnchorEntity(.image(group: "Resources", name: "model"))


渲染引擎

  1. 渲染附加到锚点的虚拟模型。

目前,ARKit 有四个伙伴可以帮助您渲染 2D 和 3D 图形:

  • RealityKit(3D引擎)
  • SceneKit(3D引擎)
  • 金属(3D引擎)
  • SpriteKit(2D 引擎)


材料

  1. 让虚拟模型呈现遮挡。

在 RealityKit 模块中,所有材质都是符合Material协议的结构。目前有6种材料。你需要OcclusionMaterial.

  • OcclusionMaterial(隐藏在其后面渲染的对象的不可见材质)
  • SimpleMaterial(可以应用于网格的基本材质)
  • UnlitMaterial(一种不响应场景中灯光的简单材质)
  • VideoMaterial(一种允许您使用 AVPlayer 在其上播放视频的材料)
  • PhysicallyBasedMaterial(一种模拟真实世界对象外观的材质)
  • CustomMaterial(名称自描述的材料)

查看这篇文章,了解如何在 RealityKit 中以编程方式分配材料

这篇文章向您展示了如何在 SceneKit 中分配自定义遮挡材料


更新 3D 内容

  1. 让虚拟模型与锚图像/对象一起移动。

ARKit要在+中实现这种类型的行为,SceneKit您必须使用renderer(_:didAdd:for:)session(_:didAdd:)。在 RealityKit 中,AnchorEntities 被自动跟踪。

于 2019-08-23T13:14:26.147 回答