加载带有纹理的模型时,ARSCNView会冻结并占用大量内存

时间:2018-07-16 10:33:18

标签: ios swift xcode unity3d arkit

我的场景有2个城堡和2个警卫。城堡的边界框超过70米。当renderer(didAddNode)识别图像时,我加载模型。用3DMAX制成的模型作为FBX导出,然后转换为Colloda,然后以xcode转换为.SCN格式。我将所有对象放在一个场景中(总共67 MB)。城堡(14470个多边形)具有漫反射,规格,反射和三种材质。 3种材料x 3张图像= 9张纹理图像。 2个城堡x 9 = 18张图像。当我尝试加载此场景时,arscnview在加载时冻结。加载后继续。我尝试后台加载,但是没有用。

最大的问题是Ram使用率。首先,我只用颜色而不是18幅图像加载了Scene。它加载速度更快,应用程序的总内存使用量为380 MB。然后我加载图像。图像质量低下。我什至将图像更改为简单的弹出图像,但总用法相同。对于图像,arscnview还会冻结并在更多时间内加载。和应用程序的总内存使用量为1480 MB(不是在开玩笑)。我看着乐器。绘制图像时似乎出现问题。比较了一些仪器结果:

带有Colours的SceneKit和带有Image的SceneKit

Colours的CPU使用率Image的CPU使用率

使用Colours分配使用Image

如您所见,场景之间存在巨大差异。没有代码将相同的代码更改为场景。

我将同一FBX城堡文件统一使用,并且加载速度比xcode版本快得多。

我基本上加载场景:

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)
{ 
  node.addChildNode(SCNScene(named:"art.scnassets/castle.scn").rootNode)
}

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let configuration=ARWorldTrackingConfiguration()
        configuration.worldAlignment = .gravityAndHeading

        guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else {
            fatalError("No Catalog")
        }
        configuration.detectionImages=referenceImages
        sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
    }

0 个答案:

没有答案