我的场景有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
如您所见,场景之间存在巨大差异。没有代码将相同的代码更改为场景。
我将同一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])
}