以高效的方式获取 CVPixelBuffer(相机框架和 ar 模型)

Get CVPixelBuffer (camera frame along with ar models) in a performant manner

我需要一个 CVPixelBuffer 包含相机框架以及我放置的 AR 模型,速率为 30+ fps,最好具有低能量和 CPU 影响。

session(_:didUpdate:) 中帧的捕获图像不包含 AR 模型。

我试过使用 sceneView.snapshot() 得到 UIImage,然后我将其转换为 CVPixelBuffer。这具有明显的高能量影响。

最后,我还尝试创建一个 SCNRenderer,然后我用它通过 snapshot(atTime:with:antialiasingMode:) 获取 UIImage,然后转换为 CVPixelBuffer。这对 CPU 和能源影响略小。但这仅适用于纵向模式,生成的 UIImage 在横向模式下不正确。

有没有办法以更少 CPU 和能源密集的方式获得 CVPixelBuffer(至少与上述相比)?

您可以创建自己的 CVPixelBuffer,然后从中获取 MTLTexture,最后将 SCNRenderer 渲染到该纹理中。这不会涉及从快照 API.

生成 UIImage 的 CPU 成本

这里的关键部分是use a CVMetalTextureCache从像素缓冲区中获取金属纹理。