Я также нахожусь в процессе поиска способа сделать это без задержки, но я смог по крайней мере уменьшить задержку путем рендеринга вида в изображение вручную:
extension ARSCNView {
/// Performs screen snapshot manually, seems faster than built in snapshot() function, but still somewhat noticeable
var snapshot: UIImage? {
let renderer = UIGraphicsImageRenderer(size: self.bounds.size)
let image = renderer.image(actions: { context in
self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
})
return image
}
}
Огорчает, что это быстрее, чем встроенная функция моментального снимка, но кажется, что она также захватывает всю графику SceneKit в моментальном снимке. (Делать это каждый кадр все равно будет дорого, к вашему сведению, и единственным реальным решением для этого, вероятно, будет пользовательский металлический шейдер.)
Я также пытаюсь работать с ARSCNView.snapshotView(afterScreenUpdates: Bool)
, потому что, похоже, по сути, у меня нет лага для моих целей, но всякий раз, когда я пытаюсь превратить полученное представление в UIImage, оно полностью пустое. В любом случае, вышеописанный метод сократил для меня отставание примерно вдвое, так что вам может повезти с этим.