【问题标题】:RealityKit How to create custom meshes at runtime?RealityKit 如何在运行时创建自定义网格?
【发布时间】:2022-02-06 03:04:06
【问题描述】:

RealityKit 有很多有用的功能,比如通过网络内置多用户同步来支持共享世界,但我似乎找不到太多关于在运行时创建网格/对象的文档。 RealityKit 有一些基本的网格生成功能(盒子、球体等),但我想在运行时创建自己的程序网格(顶点和索引),并可能在每一帧立即模式渲染样式中重新生成它们。

首先,有没有办法做到这一点,还是 RealityKit 过于封闭而无法进行大量自定义渲染? 其次,是否有替代解决方案可以让我使用 RealityKit 的一些同步功能?例如,这部分真的只是我可以与 ARKit 3 一起使用的另一个库吗?这叫什么?我也希望能够在用户设备之间同步任意数据,因此内置系统也会有所帮助。

我无法真正对此进行测试,因为目前我没有任何设备可以支持 Beta 版软件。我正在尝试了解如果我确实获得了必要的硬件,我是否能够为我的程序做我想做的事情,但是文档很少。

【问题讨论】:

    标签: rendering arkit mesh procedural-generation realitykit


    【解决方案1】:

    2022 年 2 月

    从 macOS 12 / iOS 15 开始,RealityKit 包含 API,允许您提供自己的程序生成的网格,主要通过以下方法:

    这些提供了创建 MeshResource 实例的方法 - 同步和异步 - 要么自己构建模型和实例,要么提供您自己创建的 MeshDescriptor 列表。

    Apple 文档(在我写这篇文章的时候)并不存在,但如果您查看生成的 swift 接口,API 本身的文档就相当完善了。 Max Cobb 有一篇文章(在 Medium 上):Getting Started with RealityKit: Procedural Geometries,其中介绍了如何使用 MeshDescriptor 来描述表面网格,并且还有一个 swift 包,其中包含一些使用这种技术的附加几何图形:RealityGeometries 那不是很难通读以查看实际使用它的示例。

    【讨论】:

      【解决方案2】:

      据我所知RealityKit 只能使用原语或usdz 文件作为模型。虽然您可以在设备上使用 ModelIO 生成 usdz 文件,但这对您的用例来说并不可行。

      然而,同步是内置在 ARKit 中的,尽管当您不使用 RealityKit 时,您必须做更多的工作。

      1. 在设备之间创建MultipeerConnectivity 会话(对于RealityKit,您也需要这样做)
      2. 配置您的 ARSession 并设置 isCollborationEnabled,这会使您的会话在 session(_:didOutputCollaborationData:) 委托回调中输出 CollaborationData
      3. 使用您的 MultipeerConnectivity 会话发送此数据。
      4. 从其他用户接收数据时,使用update(with:) 将其集成到您的会话中

      要在用户之间发送任意信息,您可以通过MultipeerConnectivity 独立于ARKit 发送它们或使用自定义ARAnchors,这是您处理位置数据时的首选选项,例如当用户将对象放置在特定位置时。
      而不是直接添加对象(通过在SceneKit 中使用scene.rootNode.addChildNode() 之类的东西,您可以创建一个特殊的ARAnchor 子类,其中包含添加模型并将其添加到会话所需的所有信息。 然后在rendered(_:didAdd:forAnchor:) 回调中添加对象。这样做的好处是可以更好地跟踪您的对象(因为您在该位置添加了一个锚点,向ARKit 表明它应该记住该位置)并且您不需要为多用户体验做任何特殊的事情,因为@987654351 @ 为手动添加的锚点和自动添加的锚点调用 rendered(_:didAdd:forAnchor:) 方法,例如当它接收到协作数据时。

      【讨论】:

      • 嗯,所以听起来将 ARKit 3 与其他 API 结合使用更有意义。对于刚开始的人来说,这是很多事情。是否有任何代码示例可以显示 AR 和任意数据同步?此外,RealityKit 吸引人的地方之一是对象遮挡,它是作为一种材质实现的。据您所知,我还可以使用该功能吗?我的理解是它只是 RealityKit。为了渲染,我似乎需要做我自己的金属系统,我希望避免这种情况。
      • ——如果我需要使用自己的 Metal 渲染器并创建动态网格/缓冲区,不使用 ARAnchors 不是更有意义吗?
      • 编辑:我想这解决了遮挡位:developer.apple.com/documentation/arkit/… 但它没有显示使用自定义渲染器使用人员遮挡是多么可行。看到一个处理任意数据和渲染的最小示例仍然是件好事。
      • 我听说 MultipeerConnectivity 过去不稳定。 reddit.com/r/iOSProgramming/comments/40tllq/… 这个有改善吗?实时流式传输数据(例如来自陀螺仪)的速度是否足够快?
      • 没关系。您可以查看this session from last year's WWDC,了解完全基于 MultipeerConnectivity 构建的 AR 游戏。
      猜你喜欢
      • 2012-03-04
      • 2013-08-13
      • 2016-08-30
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多