Проблема производительности SKEffectNode для CIFilter(имя: "CIGaussianBlur") с shouldRasterize = true
Я пытаюсь добавить свечение к персонажам или объектам в моей игре, которые наносят урон. Я хочу красного свечения для "плохих" вещей в игре, то есть спайков, охранников и т. Д. Я использую следующий код, но производительность действительно плохая, даже если для растеризации задано значение true. Когда я добавляю эффекты, производительность довольно быстро падает с 60 кадров в секунду до ~30 кадров в секунду. Эффект свечения должен быть на спрайтах разной формы, т.е. круги, треугольники, прямоугольники, люди и т. д. Я открыт для других подходов, хотя приведенный ниже код дает мне точный визуальный эффект, который я хочу. Если я смогу выполнить код, я бы хотел добавить зеленый свет на "хорошие" объекты.
Я также уменьшил количество "плохих" SKN-узлов, добавив только узлы, которые по 1,5 сцены слева и справа. Это изменение, похоже, не помогло. Проблема, кажется, заключается в том, что я нахожусь в особенно большой популяции SKNodes и SKNodes/SKSpriteNodes с добавленным эффектом.
glowAtlas = SKTextureAtlas(named: "GlowTextures")
// create a glowing effect
func getGlow(imageName: String, imageSize: CGSize, glowColor: SKColor) -> SKEffectNode {
пытаться
let glow = SKSpriteNode(imageNamed: imageName)
или же
let texture = glowAtlas.textureNamed(imageName)
let glow = SKSpriteNode(texture: texture)
...
glow.size = imageSize
glow.color = glowColor
glow.colorBlendFactor = 1.0
// Create an effects node with a gaussian blur filter
let effectsNode = SKEffectNode()
effectsNode.shouldRasterize = true
effectsNode.shouldEnableEffects = true
let filter = CIFilter(name: "CIGaussianBlur")
// Set the blur amount. Adjust this to achieve the desired effect
let blurAmount = 5.0
filter!.setValue(blurAmount, forKey: kCIInputRadiusKey)
effectsNode.filter = filter
effectsNode.blendMode = .Alpha
effectsNode.addChild(glow)
return effectsNode
}