Cómo aplicar SKEffectNode a pantalla completa para el postprocesamiento en SpriteKit

Estoy probando SpriteKit con la siguiente configuration:

  1. Un SKScene con dos nodos secundarios usados ​​simplemente para agrupar otros nodos: primer plano y segundo plano.
  2. el background está realmente vacío a partir de ahora, pero eventualmente sostendría algún tipo de background sprite / layers.
  3. el primer plano es un SKEffectNode y cada vez que el usuario pulsa en la pantalla, se agrega una nueva input de una subclass SKnode que representa un elemento del juego como secundario.
  4. Esta subclass SKNode básicamente crea 3 SKShapeNodes y dos tags: una circunferencia exterior, una circunferencia interior, 2 tags y una circunferencia interior. La circunferencia del cuarto interno tiene una SKAction que lo hace rotar para siempre sobre su origen / centro.

Ahora, aquí está el problema, siempre que el primer plano no tenga ningún CIFilter o tenga shouldEnableEffects = NO, todo está bien. Es decir, puedo tocar en la pantalla y los elementos de mi juego se crean y agregan a la escena principal. Pero en el momento en que bash agregar un CIGaussianBlur o CIBloom al primer plano, noto dos cosas:

  1. La velocidad de fotogtwigs cae a aproximadamente 2 fps. Eso sí, esto sucede incluso con tan solo 6 nodos vivos en la escena.
  2. El efecto parece estar constantemente recortando su contenido o ajustando su marco. Es decir, si tengo un nodo, el efecto de "pantalla completa" parece intentar recortar o ajustar constantemente sus límites al área mínima requerida para contener todos los nodos. Esto es para un nodo:

    introduzca la descripción de la imagen aquí

Y esto es para 2 nodos:

introduzca la descripción de la imagen aquí

En OpenGL ES 2, uno haría un post de desenfoque / floración haciendo básicamente todo el framebuffer (todos los objects) a la textura, haciendo al less un paso más para desenfocar, etc. en esa textura y luego presentando eso en el framebuffer adjunto a visualice o networkingacte el render original con el framebuffer. Espero que SKEffectNode funcione de manera similar. Sin embargo, el recorte y el bajo performance me hacen pensar que podría estar usando el nodo de efectos de manera incorrecta. ¿Alguna idea?

Parece ser un error con el SKEffectNode tratando de aplicar un filter en los niños SKShapeNodes tan lejos como puedo decir. Jugué con esto y logré sus resultados, pero cuando cambié los SKShapeNodes para SKSpriteNodes (usando un png simple de un círculo), el recorte ya no aparece. Es un error en que SKEffectNode no maneja muy bien el trazo de SKShapeNode. Si quitas el trazo (lineWidth = 0) y le das un color de relleno, verás que no hay recorte.

En cuanto a la velocidad de cuadros, SKShapeNodes funciona mal. Hacer el cambio a SKSpriteNodes que mencioné anteriormente impulsó mis fps de 40 a 50 cuando tenía 35 nodos en la pantalla (iPhone 5) con el filter aplicado.