Я пробую SpriteKit со следующей настройкой:
- SKScene с двумя дочерними узлами, используемыми просто для группировки других узлов: переднего плана и фона.
- На данный момент фон действительно пуст, но в конечном итоге будет содержать какой-то фоновый спрайт / слои.
- foreground — это SKEffectNode, и всякий раз, когда пользователь нажимает на экран, к нему добавляется новый экземпляр подкласса SKnode, который представляет игровой элемент.
- Этот подкласс SKNode в основном создает 3 SKShapeNodes и две метки: внешнюю окружность, внутреннюю окружность, 2 метки и окружность внутренней четверти. Окружность внутренней четверти имеет SKAction, который заставляет ее вечно вращаться вокруг своего начала/центра.
Теперь вот проблема, пока передний план не имеет никакого CIFilter или имеет shouldEnableEffects = NO, все в порядке. То есть я могу нажать на экран, и мои игровые элементы будут созданы и добавлены в основную сцену. Но в ту минуту, когда я пытаюсь добавить CGaussianBlur или CIBloom на передний план, я замечаю две вещи:
- Частота кадров падает примерно до 2 кадров в секунду. Имейте в виду, это происходит даже при наличии всего 6 узлов в сцене.
Эффект, кажется, постоянно обрезает его содержимое или регулирует его рамку. То есть, если у меня есть один узел, эффект «полноэкранного режима», похоже, пытается постоянно обрезать или регулировать его границы до минимальной площади, необходимой для хранения всех узлов. Это для одного узла:
И это для 2 узлов:
В OpenGL ES 2 можно было бы выполнить пост-размытие/цветение, в основном визуализируя весь буфер кадра (все объекты) в текстуру, затем выполняя по крайней мере еще один проход для размытия и т. д. на этой текстуре, а затем либо представляя это в буфере кадра, прикрепленном к отобразите или скомпонуйте его с исходным рендерингом обратно в буфер кадра. Я ожидаю, что SKEffectNode будет работать аналогичным образом. Однако обрезка и низкая производительность заставляют меня думать, что я мог использовать узел эффекта неправильно. Есть предположения?