У меня возникла та же проблема.Все мои узлы пользовались преимуществами физического рендеринга (PBR), и когда я впервые добавил узел в сцену, частота кадров значительно снизилась, но после этого все было в порядке.Я мог бы добавить столько же узлов без падения частоты кадров.
Я нашел способ обойти эту проблему.То, что я делаю, это после того, как я создаю свою конфигурацию ARConfiguration и перед вызовом session.run (конфигурация), я добавляю в сцену тестовый узел с PBR.Чтобы этот узел не появлялся, я установил colorBufferWriteMask материала узла в пустой массив (см. Ответ: ARKit скрыть объекты за стенами ) Затем, прежде чем добавить свое содержимое, я удаляю этот узел.Добавление и удаление этого тестового узла помогает мне.
Вот пример:
var pbrTestNode: SCNNode!
func addPBRTestNode() {
let testGeometrie = SCNBox(width: 0.5, height: 0.5, length: 0.5, chamferRadius: 0)
testGeometrie.materials.first?.diffuse.contents = UIColor.blue
testGeometrie.materials.first?.colorBufferWriteMask = []
testGeometrie.materials.first?.lightingModel = .physicallyBased
pbrTestNode = SCNNode(geometry: testGeometrie)
scene.rootNode.addChildNode(pbrTestNode)
}
func removePBRTestNode() {
pbrTestNode.removeFromParentNode()
}
func startSessionWithPlaneDetection() {
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()
if #available(iOS 11.3, *) {
configuration.planeDetection = [.horizontal, .vertical]
} else {
configuration.planeDetection = .horizontal
}
configuration.isLightEstimationEnabled = true
// this prevents the delay when adding any nodes with PBR later
sceneController.addPBRTestNode()
// Run the view's session
sceneView.session.run(configuration)
}
Вызовите removePBRTestNode (), когда вы добавляете свой контент на сцену.