att*_*ttl 5 augmented-reality scenekit swift arkit realitykit
我想在 ARKit 中构建一个演示应用程序,并且我对 Beta 版当前可能实现的功能有一些疑问(Apple 一直将其称为 RealityKit 或 ARKit 3.0)。
我正在尝试构建的演示应用程序应执行以下操作:
识别真实环境中的物体或图像,并在那里创建一个锚点
渲染附加到锚点的虚拟模型
让虚拟模型呈现遮挡
让虚拟模型与锚图像/对象一起移动
我尝试改编早期版本(利用 SceneKit 的 ARKit 2.0)中的一些代码,但某些功能(如人物遮挡)不是 ARKit 2.0 的一部分。
由于 Apple 一直在迭代他们的测试版,因此在他们的网站上和 WWDC 2019 上宣传的许多功能似乎已经从 RealityKit 的文档中消失了(人物遮挡、身体跟踪、世界跟踪)。
根据我的理解,ARKit 2.0 可以实现第 (1) 和 (2) 项。第 (3) 项尽可能与测试版一起宣传,但我几乎看不到任何文档。
在最新的测试版中可以这样做吗?如果是这样,最好的方法是什么?如果没有,是否有任何解决方法,例如混合新旧 API 之类的?
您在这里提到的所有挑战都可以在ARKit/ SceneKitpair 或RealityKit.
- 识别真实环境中的物体或图像,并在那里创建一个锚点。
您可以在 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)
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)
- 渲染附加到锚点的虚拟模型。
目前 ARKit 有四个伙伴可以帮助您渲染 2D 和 3D 图形:
- 让虚拟模型呈现遮挡。
在 RealityKit 模块中,所有材料都是符合Material协议的结构。目前有6种材料。你需要OcclusionMaterial.
查看这篇文章,了解如何在 RealityKit 中以编程方式分配材料。
而这篇文章,你展示了如何在SceneKit指定自定义栓塞物质。
- 让虚拟模型与锚图像/对象一起移动。
要在ARKit+ 中实现这种类型的行为,SceneKit您必须使用renderer(_:didAdd:for:)或session(_:didAdd:)。在 RealityKit 中,AnchorEntities 会被自动跟踪。
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |