Мне нужно получить CVPixelBuffer
, содержащий кадр камеры вместе с моделями AR, которые я разместил, со скоростью 30+ кадров в секунду, желательно с низким энергопотреблением и нагрузкой на ЦП.
Захваченное изображение из кадра в session(_:didUpdate:)
не содержит моделей дополненной реальности.
Я пытался использовать sceneView.snapshot()
, чтобы получить UIImage
, который затем конвертировал в CVPixelBuffer
. Это имеет заметно высокое энергетическое воздействие.
Наконец, я также попытался создать SCNRenderer
, который затем использую для получения UIImage
через snapshot(atTime:with:antialiasingMode:)
и последующего преобразования в CVPixelBuffer
. Это имеет немного меньшее влияние на ЦП и энергопотребление. Но это работает только для портретного режима, сгенерированный UIImage
неверен в ландшафтном режиме.
Есть ли способ получить CVPixelBuffer
с меньшим потреблением ресурсов процессора и энергии (по крайней мере, по сравнению с вышеизложенным)?
Вы можете создать свой собственный CVPixelBuffer
, затем получить MTLTexture
из него и, наконец, SCNRenderer
визуализировать в эту текстуру. Это не будет связано с затратами ЦП на создание UIImage
из API моментальных снимков.
Ключевой частью здесь является используйте CVMetalTextureCache
для получения текстуры Metal из пиксельного буфера.
Не могли бы вы поделиться примером, пожалуйста? Я застрял.