gpt4 book ai didi

ios - ARSCNView snapshot() 导致延迟

转载 作者:行者123 更新时间:2023-12-01 16:20:31 26 4
gpt4 key购买 nike

我正在拍摄每一帧的快照,应用过滤器,并使用过滤后的图像更新 ARSCNView 的背景内容。一切正常,但屏幕上的所有 UI 元素都有很多延迟。 ARSCNView 上没有延迟。

 func session(_ session: ARSession, didUpdate frame: ARFrame) {

guard let image = CIImage(image: sceneView.snapshot()) else { return }

// I'm setting a filter to each image here. Which has no effect on the latency.

sceneView.scene.background.contents = context.createCGImage(image, from: image.extent)
}

我知道我可以使用 frame.capturedImage ,这使得延迟消失。但是,我还在屏幕上放置了 AR 对象 frame.capturedImage出于某种原因忽略, sceneView.scene.background.contents无法重置为其原始来源。所以,我无法关闭图像过滤器。这就是为什么我需要拍摄快照。

我能做些什么来减少 UI 元素的延迟吗?我在屏幕上有一些 UIScrollViews 有很大的滞后。

最佳答案

我也在寻找一种没有延迟的方法,但我至少能够通过手动将 View 渲染为图像来减少延迟:

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)因为对于我的目的而言,这似乎基本上没有滞后,但是每当我尝试将生成的 View 转换为 UIImage 时,它​​都是完全空白的。无论哪种方式,上述方法对我来说将延迟减少了大约一半,所以你可能会有一些运气。

关于ios - ARSCNView snapshot() 导致延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61051404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com