Я не уверен, какой код уместен для публикации здесь, но мне просто интересно, как это сделать. Я отображаю ARSCNView с включенной ARFaceTrackingConfiguration, и в фоновом потоке я часто выполняю Vision VNDetectFaceLandmarksRequest
и ARSCNView.hitTest
против геометрии лица. У меня не было проблем с задержкой до iOS 12, и даже сейчас она временная, но когда это случается, весь экран замораживается на несколько секунд за раз и отображает ошибку:
Execution of the command buffer was aborted due to an error during execution. Discarded (victim of GPU error/recovery) (IOAF code 5)
Не уверен, что это связано, но я также получаю случайные сбои в потоке рендеринга SceneKit (com.apple.scenekit.scnview-renderer ", без обратной трассировки, которую я могу использовать для отладки. Я не использую какие-либо специальные металлические шейдеры , и я даже не визуализирую какую-либо геометрию SceneKit в то время, когда возникают эти лаги / сбои.
Я не могу использовать рендеринг OpenGL, так как считаю, что ARSCNView поддерживает рендеринг только на металлической основе. Я также пробовал не устанавливать среду освещения согласно этот вопрос, но, похоже, это не решает проблему.
Если бы кто-нибудь сталкивался с этими ошибками при рендеринге ARSCNViews и имел какие-либо советы по устранению этих задержек, он был бы очень признателен.
Обновлять
Я смог устранить эти лаги и ошибки графического процессора, сильно ограничив количество запросов ориентира Vision. Похоже, это вызвано просто выполнением большого количества дорогостоящих графических операций на iOS 12. Этот обходной путь, похоже, не помог сбою модуля рендеринга SceneKit.
Устранена проблема при удалении этого кода из моего приложения (sceneView - это ARSCNView от IB):
let scene = try SCNScene(url: ConfigAR.loader!, options: nil)
preloaderSCNView.scene = scene
sceneView.addSubview( preloaderSCNView ) // the root of the problem
Хм, я нигде не создаю SCNScene явно. Что конкретно у вас за
preloaderSCNView
?