【问题标题】:ARKit – Getting "Unexpectedly found nil" when using SCN file > 300 MBARKit – 使用 SCN 文件 > 300 MB 时出现“意外发现 nil”
【发布时间】:2021-04-14 16:26:46
【问题描述】:

我正在加载一个 300mb 的 3d 模型,扩展名为 .dae,转换为 .scn,有 440 万个顶点,150 万个多边形,这是一个由艺术家在 3DS MAX 中创建的建筑物的 3d 模型,如下所示:

let sceneToLoad = SCNScene(named: "art.scnassets/building1.scn")!

(通过 SCNView.allowsCameraControl = true 加载到应用程序的 SCNView 默认查看器中,以便用户查看、旋转等)

Xcode 在读取该行时会立即崩溃,只有编译器信息“在展开可选值时意外发现 nil”。

当它运行到该行时,内存根本没有增加 - 这表明它拒绝读取它,而是崩溃了。 3d 模型在 XCODE Scenekit 编辑器图形查看器中完美加载和查看、可旋转等。当我将其替换为指向较小 3d 模型的另一个文件名时,它工作正常,即使我删除同一文件中的模型 SCNNode(在同一个“building1.scn”文件中)并替换为另一个较小的 SCNNode随机对象,然后奇迹般地它也可以正常工作并加载。

我在 SO 上没有发现任何类似的东西 - 在其他类似的答案中,即使模型很大,iOS 也会尝试加载模型,但没有任何一个它会立即崩溃,发现一个 nil 值。

已尝试所有解决方法,删除/删除文件并再次添加,以原始形式将其加载为 .dae,加载场景而不展开,稍后在搜索节点时展开 - 没有任何效果,总是以相同的方式崩溃。当我尝试在 ARKIT 场景中加载它时也会发生同样的事情 - 它在上面试图加载文件的行中崩溃。

有没有人遇到过这种情况,或者知道任何解决方法?

非常感谢

【问题讨论】:

    标签: swift augmented-reality scenekit arkit realitykit


    【解决方案1】:

    将带有1.5M 多边形的 3D 模型加载到 SceneKit/ARKit、RealityKit 或 AR Quick Look 中时,您总是会失败。这是因为每个 3D 模型的稳健多边形数量不得大于 10K(UV 纹理的最大分辨率为 2Kx2K,或常规纹理 rez 为 1Kx1K),并且maximum number of polygons per 3D scene 不得大于100K .您已超过 15 次“未说出口”的 AR 限制。

    游戏引擎和 AR 框架,如 SceneKit、RealityKit 和 AR Quick Look,无法在 iOS 设备上以 60 fps 的帧速率渲染如此大量的多边形(即使是大多数台式电脑也无法做到这一点)。 ARKit/RealityKit 应用程序的最佳解决方案是使用优化的低多边形模型。在移动平台上使用 AR 的首选格式是 Pixar USDZ。 USDZ 文件是 USD 文件的无压缩、未加密 zip 存档。

    看看 Turbosquid 的这个低多边形模型。它只有 5K 多边形,看起来不错,不是吗?

    附言

    您可以使用命令行工具将objfbxabc 转换为usdz。阅读它HERE

    【讨论】:

    • 谢谢安迪 - 这真的很有帮助!模型看起来确实很棒。我们的原始文件是在 3DS MAX 中制作的(并导出到 DAE),根据我们的文件类型,有没有办法将其转换为具有低多边形的 USDZ,或者以其他方式减少它的多边形数量?非常感谢
    • 您只能在 USDZ 中转换明确的格式,在更新的答案中阅读有关它们的信息。唉,你不能在不破坏模型表面的情况下减少任何模型中的多边形数量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多