RealityKit 和 ARKit 的挑战

att*_*ttl 5 augmented-reality scenekit swift arkit realitykit

我想在 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 之类的?

ARG*_*Geo 6

您在这里提到的所有挑战都可以在ARKit/ SceneKitpair 或RealityKit.

选择配置类型

  1. 识别真实环境中的物体或图像,并在那里创建一个锚点。

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

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

和:

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

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

let objectAnchor = AnchorEntity(.object(group: "Resources", name: "object"))
Run Code Online (Sandbox Code Playgroud)

和:

let imageAnchor = AnchorEntity(.image(group: "Resources", name: "model"))
Run Code Online (Sandbox Code Playgroud)


渲染引擎

  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 会被自动跟踪。