在 SpriteKit 中,您可以使用 SKEffectNode
模糊节点,并将 CIFilter
设置为高斯模糊。
在 SceneKit 中,您可以通过更改场景相机的属性(focalDistance
、focalBlur
和 focalSize
)来制作景深模糊.
为什么 SceneKit 的模糊仍然提供一致的 60 FPS,而 SpriteKit 只提供 20 FPS?我使用的是 iPhone 6。
是不是因为SpriteKit的在主线程?
最佳答案
简单!
高斯模糊是一个非常密集的操作。对于 10 半径,它将对 21x21 正方形中的所有像素或 441 个样本进行采样。对于 1080p 高清图像,每帧几乎有十亿个样本。显然可以进行很多优化,但总体思路是这样。
2 通过快速模糊,这可能是 Scenekit 处理景深的方式,有点作弊:着色器不是对正方形进行采样,而是对垂直线进行采样(并且仅在一个轴上模糊)并对其进行模糊处理。第二次通过对模糊图像进行采样,然后在水平轴上进行模糊处理,形成相当不错的模糊效果,每个像素仅使用 41 个样本,或每帧 8500 万个样本。 sample 减少 90%!
如果考虑采样以外的其他操作,您就会明白为什么 Scenekit 更快。
顺便说一句,使用 CIDiskBlur
会给你比 DOF 高斯模糊更合适的结果。您还可以通过堆叠两个具有 0 度和 90 度角的 CIMotionBlur
来复制 Core Image 中的快速模糊。
关于ios - 在 iOS 中,为什么 SceneKit 景深比 SpriteKit 快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553717/