sto provando SpriteKit con la seguente configurazione:Come applicare SKEffectNode a schermo intero per il post-processing in SpriteKit
- Uno SKScene con due nodi figli utilizzati solo per il raggruppamento altri nodi: primo piano e sfondo .
- sfondo è veramente vuoto fin d'ora, ma sarebbe poi tenere alcune tipo di sfondo sprite/strati.
- foreground è un valore SKEffectNode e ogni volta che l'utente tocca lo schermo , viene aggiunta come elemento secondario una nuova sottoclasse di una sottoclasse SKnode che rappresenta un elemento di gioco .
- Questo SKNode sottoclasse crea fondamentalmente 3 SKShapeNodes e due etichette: una circonferenza outter , una circonferenza interna, 2 etichette e una circonferenza interna trimestre. La circonferenza interna trimestre ha uno SKAction che fa ruotare sempre sulla sua origine/centro.
Ora questo è il problema, a patto che il primo piano non ha CIFilter o ha shouldEnableEffects = NO, tutto va bene. Cioè, posso toccare lo schermo e i miei elementi di gioco sono istanziati e aggiunti alla scena principale. Ma minuto cerco di aggiungere un CIGaussianBlur o CIBloom in primo piano, ho notato due cose:
- Il framerate scende a circa 2 fps. Intendiamoci, questo accade anche con nella trama con appena 6 nodi.
L'effetto sembra essere costantemente ritaglio suo contenuto o regolando è telaio. Cioè, se ho un nodo, l'effetto "a schermo intero" sembra cercare di ritagliare o regolare costantemente i suoi limiti sull'area minima richiesta per contenere tutti i nodi. Questo è per un nodo:
E questo è per 2 nodi:
In OpenGL ES 2, si potrebbe fare un post sfocatura/Bloom di fondo di rendering tutto framebuffer (tutti gli oggetti) per tessitura, poi facendo almeno un altro passaggio sfocatura, ecc su quella texture e quindi sia presente che nel framebuffer allegata al display o comporre che con l'originale rendering indietro al framebuffer. Mi aspetto che SKEffectNode funzioni in modo simile. Tuttavia il ritaglio e le scarse prestazioni mi fanno pensare che potrei usare il nodo dell'effetto nel modo sbagliato. qualche idea?
Ora che ci penso, potrebbe esserci una soluzione: lo SKView è supportato da un CAEAGLLayer e ha anche una proprietà a -textureFromNode che restituisce un SKTexture. Se ho impostato il mio shader GL per la sfocatura/fioritura, potrei afferrare ogni fotogramma (tramite la proprietà o forse anche toccando il livello stesso con il mio contesto OpenGL), post-elaborarlo e presentarlo nel livello di SKView o un nuovo CAEAGLLayer. – SaldaVonSchwartz
Puoi commentare se questo lavoro ha funzionato? Sto cercando di capire se puoi fare i tuoi effetti di post processing usando Sprite Kit? – Oscar