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

Macos 查询图形功能以决定是否应用GPU密集型效果(通过SpriteKit),macos,performance,graphics,sprite-kit,skeffectnode,Macos,Performance,Graphics,Sprite Kit,Skeffectnode,我有一个用SpriteKit编写的游戏,它使用一个带有模糊效果的SKEffectNode来模糊一组精灵,其中一个精灵有相当大的纹理,它们一起覆盖了相当大的屏幕区域。iMac和Mac Book Pro可以很好地解决这个问题,但在一本更普通的Mac Book上,添加了效果节点后,帧速率显著下降。由于效果对游戏的功能并不重要,我不能简单地为图形功能较弱的机器添加SKEffectNode 那么接下来的问题是:我可以通过什么API进行什么样的编程检查来确定“GPU的能力”或“应用纹理效果时的性能”或[此处

我有一个用SpriteKit编写的游戏,它使用一个带有模糊效果的SKEffectNode来模糊一组精灵,其中一个精灵有相当大的纹理,它们一起覆盖了相当大的屏幕区域。iMac和Mac Book Pro可以很好地解决这个问题,但在一本更普通的Mac Book上,添加了效果节点后,帧速率显著下降。由于效果对游戏的功能并不重要,我不能简单地为图形功能较弱的机器添加SKEffectNode


那么接下来的问题是:我可以通过什么API进行什么样的编程检查来确定“GPU的能力”或“应用纹理效果时的性能”或[此处建议更好的度量]?谢谢你的建议

您必须使用实际的模糊过程和一些示例内容创建一个性能测试,以准确了解每一代硬件的时间成本

从编程的角度来说,模糊是非常奇怪的事情。框模糊可以给你一个好的,软高斯模糊的处理成本低得多的大部分外观。即使在强大的硬件上,变焦或运动模糊(看起来不错)的价格也出人意料地昂贵

在做模糊时,有一些非常有效的“欺骗”。因为不需要细节,所以可以对操作进行大量优化,尤其是在模糊度很强的情况下

据信,苹果公司做了类似的事情,例如,它的模糊:

  • 大幅收缩目标图像
  • 在这个小图像上做高斯模糊
  • 稍微放大一点
  • 应用廉价的框模糊来软化它
  • 完全缩放回所需大小
  • 通过一个可怕的例子,从缩放井中获益(具有良好缩放的过滤设置)

    这是全尺寸模糊图像:

    这是同一个图像的一个版本,缩放到原始尺寸的16倍,模糊,然后模糊的图像放大。如您所见,由于良好的缩放和缺乏细节,模糊图像几乎没有任何差异,但模糊所需的处理能量和时间要少得多:


    很抱歉提出这些奇怪的问题:从某种意义上说,这种效果是静态的吗?比如说,你没有设置模糊量的动画。。。10到100个单位,即始终为100个模糊单位?Q2。将要模糊的纹理是变化的还是始终相同的纹理?问题推理:如果模糊量是静态的,并且可以预测纹理,则可以做一件重要的事情来优化性能:预渲染模糊,并将其存储为纹理,以便在需要模糊效果时作为纹理应用。如果纹理发生变化,但模糊量不变,您可以在需要时进行模糊,然后将光栅化设置为true:就我个人而言,我会尽可能选择代码大小,就像Middle建议的那样,但如果这不是一个选项,请看这是否有帮助:谢谢,请看后面的帖子。不幸的是,烘焙模糊是不可能的(很抱歉,我最初没有很好地解释——它不仅仅是一个具有静态纹理的精灵,而是一个又一个精灵上的多个精灵,效果节点应用于所有精灵)。