【问题标题】:How to load 3D content into RealityKit Apps at runtime?如何在运行时将 3D 内容加载到 RealityKit 应用程序中?
【发布时间】:2021-08-31 13:08:05
【问题描述】:

出于特定目的,我必须在运行时将 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,请纠正我。

【问题讨论】:

    标签: augmented-reality scenekit gltf realitykit modelio


    【解决方案1】:

    RealityKit 仅支持加载 USDZ 文件和专为 RealityKit 制作的项目。 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、原始、smd、stl、wrl、xgl、zgl、fbx、md3

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

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多