Jak zastosować pełnoekranowy SKEffectNode do przetwarzania końcowego w SpriteKit

Próbuję SpriteKit z następującą konfiguracją:

SKScene z dwoma węzłami potomnymi używanymi jedynie do grupowania innych węzłów: pierwszego planu i tła.tło jest teraz naprawdę puste, ale w końcu zatrzyma jakiś rodzaj ikonki / warstw tła.pierwszoplanowy jest SKEffectNode i za każdym razem, gdy użytkownik puknie na ekranie, nowy element podklasy SKnode, który reprezentuje element gry, jest dodawany do niego jako dziecko.Ta podklasa SKNode zasadniczo tworzy 3 węzły SKShapeNode i dwie etykiety: obwód zewnętrzny, obwód wewnętrzny, 2 etykiety i obwód ćwiartki wewnętrznej. Obwód wewnętrznej ćwiartki ma SKAction, który powoduje, że obraca się on zawsze wokół swojego początku / środka.

Teraz jest problem, o ile pierwszy plan nie ma żadnego CIFiltera lub ma powinienEnableEffects = NIE, wszystko jest w porządku. Oznacza to, że mogę dotknąć ekranu, a moje elementy gry zostaną utworzone i dodane do głównej sceny. Ale w momencie, gdy próbuję dodać CIGaussianBlur lub CIBloom do pierwszego planu, zauważam dwie rzeczy:

Szybkość klatek spada do około 2 klatek na sekundę. Pamiętaj, że dzieje się to nawet przy żyjących w scenie zaledwie 6 węzłów.

Efekt wydaje się stale przycinać jego zawartość lub dostosowywać jego ramkę. Oznacza to, że jeśli mam jeden węzeł, efekt „pełnego ekranu” wydaje się próbować stale przycinać lub dostosowywać jego granice do minimalnego obszaru wymaganego do przechowywania wszystkich węzłów. Dotyczy jednego węzła:

A to dotyczy 2 węzłów:

W OpenGL ES 2 wykonano by post blur / bloom, w zasadzie renderując cały bufor ramki (wszystkie obiekty) na teksturę, a następnie robiąc co najmniej jeszcze jedno przejście do rozmycia itp. Na tej teksturze, a następnie prezentując to w buforze ramki dołączonym do wyświetlacz lub skomponuj go z oryginalnym renderowaniem z powrotem do bufora ramki. Spodziewałbym się, że SKEffectNode będzie działać w podobny sposób. Jednak kadrowanie i słaba wydajność powodują, że myślę, że mogę używać węzła efektu w niewłaściwy sposób. jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion