ios - 在 iOS 中,为什么 SceneKit 景深比 SpriteKit 快?

标签 ios sprite-kit blur scenekit

在 SpriteKit 中,您可以使用 SKEffectNode 模糊节点,并将 CIFilter 设置为高斯模糊。

在 SceneKit 中,您可以通过更改场景相机的属性(focalDistancefocalBlurfocalSize)来制作景深模糊.

为什么 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/

相关文章:

ios - 没有额外光线的 UIBlurEffect "style"

ios - 如何创建单独的方法来创建 SKLabelNode 或 SKSpriteNode

javascript - jQuery .blur() - 不要隐藏事件的 div

ios - 如何根据其标签值属性在uiimageview上添加图像。?

ios - UITextField 未更新

swift - 如何将实例方法连接到我的对象

ios - SKAction playSoundFileNamed 在 500 mp3 时失败

Jquery:悬停/取消悬停与模糊/焦点相结合

iOS RestKit - 映射结果,只有一个属性

ios - 为什么我的 React Native 桥接 iOS 组件不起作用?