CIGaussianBlur需要太多处理

Adn*_*hid 5 ios sprite-kit skeffectnode swift

我正在尝试在游戏暂停屏幕上应用CIGaussianBlur效果。这是我的代码:

effectsNode = SKEffectNode();
let filter = CIFilter(name: "CIGaussianBlur");
let blurAmount = 10.0;
filter.setValue(blurAmount, forKey: kCIInputRadiusKey);

effectsNode.filter = filter;
effectsNode.blendMode = .Alpha;
Run Code Online (Sandbox Code Playgroud)

该代码可以正常工作,但是需要太多的处理能力,并且会大大降低FPS!我只想要暂停游戏时背景的静态模糊图像。

有解决此问题的方法吗?

Cih*_*Tek 1

您是否在每一帧上应用该效果?您应该只应用一次,然后保存结果,并在暂停期间显示该结果。你可以在这篇文章中看到一个例子

  • 链接的答案虽然是该问题的公认答案,但并不是最有效的解决方案 - 无需将图像数据从 SpriteKit(位于 GPU 内存中)到 UIKit(位于 CPU 内存中)来应用过滤器和将其放回 Spritekit 中。[另一个答案](http://stackoverflow.com/a/22494746/957768)对于同一问题说明了使用带有`shouldRasterize`选项的`SKEffectNode`,以便模糊过滤器仅应用一次,而不是每次绘制。(事实上​​,60fps 的全屏模糊对于某些硬件来说太过分了。) (2认同)