Principais problemas de desempenho do iOS9 com o Sprite Kit

Estou enfrentando enormes problemas de desempenho com o iOS9 e não consigo descobrir o que fazer. Eu li muitas postagens -aquieaqui por exemplo, mas as soluções sugeridas não ajudam ou fazem pouca diferença.

Meu jogo passou de 60fps em um iPad 2 antigo (iOS 8.4) para <15fps em um novo iPad mini (iOS 9).

Estou tentando descobrir o principal culpado. Tenho certeza de que um deles é SKCropNodes. Eu costumo renderizar vários SKCropNodes na minha cena (6 - 18). Isso nunca foi um problema no iOS8, mas parece que o iOS9, embora faça um trabalho melhor de corte, também consome desempenho ao fazê-lo.

Se eu renderizar os nós de corte como SKSpriteNodes normais, ganho talvez 5fps em dispositivos antigos e até 30 em um iPhone 6. mais novo. Não tenho alternativa ao uso de nós de corte, mas não pode ser o problema todo.

Eu pensei que talvez o atlas de textura errado estivesse sendo usado - ou seja, um de uma resolução muito maior. No entanto, forçar meu dispositivo a usar um atlas muito pequeno não fez diferença.

Estou usando o Texture Packer para gerar meus atlas com variantes de escala para os diferentes dispositivos. Notei que o XCAssets agora possui uma opção para adicionar um Sprite Atlas (não consigo encontrar nenhuma documentação sobre isso). Isso não é adequado para o meu jogo, já que eu uso centenas de sprites. Tentei adicionar meus atlas aos XCAssets, mas, por algum motivo, ele não utilizará as variantes de dimensionamento. No entanto, com texturas de baixa resolução, ele ainda funciona muito bem.

Eu tentei configurar

skView.ignoresSiblingOrder = YES;

e considerando todos os meus valores de zPosition dos nós, mas ainda sem efeito. Também adicionei a extensão .png a todos os nomes de imagens (originalmente um problema que significava que eles não seriam renderizados.)

Eu tenho alguns SKEffectNodes em minhas cenas, mas remover e adicioná-los não parece ter efeito.

Não entendo como o mesmo hardware e o mesmo código podem produzir resultados drasticamente diferentes. Obviamente, a Apple mudou algo relacionado à renderização que teve um efeito adverso. Eles também parecem não ter a intenção de corrigir esses problemas. Estou ciente de erros no problema que existem há meses - muito antes do iOS9 ser lançado.

Estou trabalhando neste jogo há 2 anos e apenas o lançou antes do iOS9. Agora está sofrendo de um desempenho terrível e falhas regulares.

Alguém descobriu o que exatamente a Apple fez para matar o desempenho? Se soubesse, poderia pelo menos tentar contornar isso ... Obrigado.

ATUALIZAR

Abaixo estão algumas figuras para a mesma cena, com o número máximo absoluto de nós que o jogo geraria ao mesmo tempo.

iOS 8, iPad 2, ~ 200 nós, ~ 100 empates, 58,7-60 fps

iOS 9, iPhone6, ~ 280 nós, ~ 216 empates, cerca de 20 fps

Presumo que a diferença no número de nós se deva aos diferentes tamanhos de tela. Se eu mudar de cenário no iPhone 6 para obter valores equivalentes, o FPS ainda estará em torno de 24.

ATUALIZAÇÃO 2

Usando o projeto Sprite Kit do modelo do Xcode e alterando a nave espacial para um SKCropNode contendo a nave espacial, no iOS 8 eu posso adicionar centenas de navios sem problema de taxa de quadros. No iOS 9, mesmo projeto, posso adicionar cerca de 25 antes que a taxa de quadros caia para <30.

iOS 8 no iPad2:

iOS 9 iPhone 5:

Em termos de uso de atlas de textura, como no meu comentário, não posso garantir que algo será extraído do mesmo atlas. Meu jogo contém personagens personalizados, com ativos de vários atlas (cada um dos quais contém ~ 100 texturas). Pode haver até 9 caracteres na tela por vez. Entendo que isso não é o mais eficiente em termos de empates, mas nunca tive um problema até o iOS9 ...

Atualização 3

Enviei um bug para a Apple, incluindo meu programa de amostra. Também usei uma das minhas solicitações de suporte técnico. Até agora, nada da Apple.

questionAnswers(5)

yourAnswerToTheQuestion