1

出于特定目的,我必须在运行时将 3D 内容(绝对首选 glTF)加载到基于RealityKit的应用程序中。据我了解,RealityKit通常在编译过程中依赖 3D 内容转换为专有的 .reality。

为了使其更易于理解:该应用程序可以与 IKEA Place 应用程序进行比较,具有不断变化的 AR 内容,甚至可以打开附加到邮件的 3D 内容。

最先进的解决方案是什么?我发现了这种方法:https ://the-nerd.be/2014/11/07/dynamically-load-collada-files-in-scenekit-at-runtime/ 但就我而言,它并不真正可用,因为它依赖于Mac -基于3D 内容的预编译并使用 SceneKit 而不是 RealityKit。我还听说过Model I/O ( https://developer.apple.com/documentation/modelio ),这可能是一个解决方案,但我的知识不足以评估它。我怀疑它是否可用于 RealityKit 或仅适用于 SceneKit。

如果我混淆了 SceneKit/RealityKit/ARKit,请纠正我。

4

1 回答 1

1

RealityKit 仅支持加载专门为 RealityKit 制作的 USDZ 文件和项目。RealityKit 构建在 ARKit 之上,但使用实体。支持的格式有:

usdz, rcproject, 现实

let url = URL(fileURLWithPath: "path/to/MyEntity.usdz")
let entity = try? Entity.load(contentsOf: url)

ARKit 可以使用 MDLAsset 加载更多文件类型,但也非常有限。它像 SceneKit 一样使用 SCNNodes。因此,您能够加载到 SceneKit 的所有内容都可以在 ARKit 中使用。MDLAsset 支持:

abc、usd、usda、usdc、usdz、ply、obj、stl

let url = URL(fileURLWithPath: "path/to/MyScene.usdz")
let asset = MDLAsset(url: url)
asset.loadTextures()
let scene = SCNScene(mdlAsset: asset)
return scene.rootNode.flattenedClone()

有一种方法可以使用 AssimpKit - https://github.com/dmsurti/AssimpKit加载其他类型的模型。您可以加载场景并克隆根节点 (SCNNode),然后可以在 ARKit 中使用。

AssimpKit 是第 3 方库,可用于在运行时将许多文件类型转换/导入到 SceneKit。支持的类型有:

3d、3ds、ac、b3d、bvh、cob、dae、dxf、ifc、irr、md2、md5mesh、md5anim、m3sd、nff、obj、off、mesh.xml、ply、q3o、q3s、raw、smd、stl、 wrl、xgl、zgl、fbx、md3

如果支持 USDZ 和 RealityKit 项目还不够,你现在可能需要使用 ARKit。

于 2021-06-15T17:24:28.187 回答