ARKit – 使用 SCN 文件 > 300 MB 时获得 "Unexpectedly found nil"
ARKit – Getting "Unexpectedly found nil" when using SCN file > 300 MB
我正在加载一个300mb的扩展名为.dae的3d模型,转换为.scn,有440万个顶点,150万个多边形,这是一个建筑物的3d模型,由艺术家在3DS MAX中创建,像这样:
let sceneToLoad = SCNScene(named: "art.scnassets/building1.scn")!
(它被加载到应用程序中的 SCNView 默认查看器中,以便用户可以查看、旋转等,SCNView.allowsCameraControl = true)
Xcode 在读取该行时会立即崩溃,只有编译器信息“在展开可选值时意外发现 nil”。
当它运行到那一行时,内存根本没有增加 - 表明它拒绝读取它,而是崩溃了。 3d 模型在 XCODE Scenekit 编辑器图形查看器中完美加载和查看、可旋转等。当我将它替换为指向较小 3d 模型的另一个文件名时,它工作正常,甚至当我删除同一文件中的模型 SCNNode(在同一“building1.scn”文件中)并替换为较小的 SCNNode 时另一个随机对象,然后奇迹般地它也可以正常加载。
我没有在 SO 上发现任何类似的东西 - 在其他类似的答案中 iOS 尝试加载模型,即使它很大,但在 none 中它立即崩溃并找到一个 nil 值。
已尝试所有解决方法,remove/delete 文件并再次添加,以原始形式将其加载为 .dae,加载场景而不解包,稍后在搜索节点时解包 - 没有任何效果,总是崩溃一样的方法。当我尝试在 ARKIT 场景中加载它时,同样的事情发生了——它在上面试图加载文件的行崩溃了。
有没有人遇到过这个问题,或者知道任何解决方法?
非常感谢
将具有 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 个多边形,看起来不错,不是吗?
P.S.
您可以使用命令行工具在 usdz
中转换 obj
、fbx
或 abc
。了解它 HERE。
我正在加载一个300mb的扩展名为.dae的3d模型,转换为.scn,有440万个顶点,150万个多边形,这是一个建筑物的3d模型,由艺术家在3DS MAX中创建,像这样:
let sceneToLoad = SCNScene(named: "art.scnassets/building1.scn")!
(它被加载到应用程序中的 SCNView 默认查看器中,以便用户可以查看、旋转等,SCNView.allowsCameraControl = true)
Xcode 在读取该行时会立即崩溃,只有编译器信息“在展开可选值时意外发现 nil”。
当它运行到那一行时,内存根本没有增加 - 表明它拒绝读取它,而是崩溃了。 3d 模型在 XCODE Scenekit 编辑器图形查看器中完美加载和查看、可旋转等。当我将它替换为指向较小 3d 模型的另一个文件名时,它工作正常,甚至当我删除同一文件中的模型 SCNNode(在同一“building1.scn”文件中)并替换为较小的 SCNNode 时另一个随机对象,然后奇迹般地它也可以正常加载。
我没有在 SO 上发现任何类似的东西 - 在其他类似的答案中 iOS 尝试加载模型,即使它很大,但在 none 中它立即崩溃并找到一个 nil 值。
已尝试所有解决方法,remove/delete 文件并再次添加,以原始形式将其加载为 .dae,加载场景而不解包,稍后在搜索节点时解包 - 没有任何效果,总是崩溃一样的方法。当我尝试在 ARKIT 场景中加载它时,同样的事情发生了——它在上面试图加载文件的行崩溃了。
有没有人遇到过这个问题,或者知道任何解决方法?
非常感谢
将具有 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 个多边形,看起来不错,不是吗?
P.S.
您可以使用命令行工具在 usdz
中转换 obj
、fbx
或 abc
。了解它 HERE。