Applying Special Effects to a Node’s Children
Apply the Core Image suite of filters to child nodes of an effect node.
Overview
In the example image below, the effect node’s children are two sprites that provide lighting information. The effect node accumulates the effects of these lights, applies a blur filter to soften the resulting image, and uses a multiply blend mode to apply this lighting to a texture.
Important: Any Core Image filter that you use must be able to produce a single output image from a single input image.
Hereʼs how the scene generates this lighting effect:
- The scene has two children. The first is a textured sprite that represents the ground. The second is an effect node to apply lighting.
- The effect nodeʼs children are sprite nodes rendered using an additive blend mode.
- The effect node includes a filter effect to soften the lighting.
- The effect node uses a multiplication blend mode to apply its lighting effect to the sceneʼs framebuffer.
The following code demonstrates an implementation of this technique:
let lightingNode = SKEffectNode()
let light = SKSpriteNode(texture: lightTexture)
light.blendMode = .add
...
lightingNode.addChild(light)
let blurFilter = CIFilter(name: "CIBoxBlur",
withInputParameters: ["inputRadius": 20])
lightingNode.filter = blurFilter
lightingNode.blendMode = .multiply