查询图形功能以决定是否应用 GPU 密集型效果(通过 SpriteKit)

Querying graphics capabilities for deciding whether to apply GPU-intensive effects (through SpriteKit)

我有一个用 SpriteKit 编写的游戏,它使用具有模糊效果的 SKEffectNode 来模糊一组精灵,其中一个具有相当大的纹理,并且它们一起覆盖了相当大的屏幕区域。 iMac 和 Mac Book Pro 可以很愉快地处理这个问题,但是在更简陋的 Mac Book 上,添加效果节点后帧速率明显下降。由于效果是对于游戏的功能至关重要,我不能简单地为图形功能不太强大的机器添加 SKEffectNode。

那么问题来了:我可以进行什么好的程序检查来确定 "power of the GPU" 或 "performance when applying texture effects" 或 [在此处建议更好的指标] 以及通过什么 API ?感谢您的建议!

您必须使用实际的模糊处理和一些示例内容来创建性能测试,以准确了解它在每一代硬件上的时间成本。

从编程的角度来看,模糊真的很奇怪。 Box Blur 可以为您提供漂亮、柔和的高斯模糊的大部分外观,而处理成本要低得多。缩放或运动模糊(看起来不错)非常昂贵,即使在强大的硬件上也是如此。

并且在做模糊时有一些非常有效的 "cheats"。因为不需要细节,您可以大量优化操作,特别是在模糊很强烈的情况下。

据信,Apple 做了这样的事情,例如,它的模糊效果:

  1. 大幅缩小目标图像
  2. 对这个小图像进行高斯模糊
  3. 稍微扩大规模
  4. 应用便宜的 Box Blur 来柔化它
  5. 完全缩小到所需大小

通过一个糟糕的例子,从良好的缩放中获益(为良好的缩放设置过滤)

这是经过模糊处理的全尺寸图片:

这是同一张图片的一个版本,缩放到原始大小的 16 分之一,进行模糊处理,然后将模糊图像按比例放大。如您所见,由于良好的缩放比例和缺乏细节,模糊图像几乎没有任何差异,但模糊处理的能量和时间要少得多: