【问题标题】:CIGaussianBlur takes too much processing [duplicate]CIGaussianBlur 需要太多处理[重复]
【发布时间】:2015-02-17 19:03:59
【问题描述】:

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

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

effectsNode.filter = filter;
effectsNode.blendMode = .Alpha;

此代码运行良好,但它占用了太多的处理能力并大大降低了 FPS!我只想要游戏暂停时背景的静态模糊图像。

这个问题有解决办法吗?

【问题讨论】:

  • 试试 shouldRasterize 属性(或类似的,它的名字中有“rasterize”)
  • @LearnCocos2D 我希望我早点看到这个,无论如何我按照答案提到的帖子并经过一些调整后让它工作:) 我截取了一个屏幕截图并应用了一次模糊效果,什么替代成本最少的内存?光栅化或截屏并模糊它?

标签: ios swift sprite-kit skeffectnode


【解决方案1】:

您是否对每一帧都应用了效果?您应该只应用一次,然后保存结果,并在暂停期间显示该结果。你可以在this post中看到一个例子

【讨论】:

  • 像魅力一样工作!谢谢你:)
  • 链接的答案,虽然它是该问题的公认答案,但并不是最有效的解决方案——不需要将图像数据从 SpriteKit(它在 GPU 内存中)往返到 UIKit(在CPU 内存)以应用过滤器并将其放回 Spritekit。 Another answer 对同一问题说明了将 SKEffectNodeshouldRasterize 选项一起使用,以便仅应用一次模糊过滤器,而不是在每次绘制时应用。 (事实上​​,60fps 的全屏模糊对于某些硬件来说太过分了。)
猜你喜欢
  • 1970-01-01
  • 2016-04-30
  • 2016-06-22
  • 2017-03-21
  • 2018-04-27
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多