Como a Jam City construiu Disney Magic Match 3D para alto desempenho

Dec 3, 2025
Disney Magic Match 3D | Jam City | Disney

Em Disney Magic Match 3D, os jogadores são convidados a restaurar a ordem no encantado Livro da Magia, cuja magia saiu do controle, espalhando itens icônicos da Disney e da Pixar pelas páginas. Os jogadores devem combinar objetos encantados, organizar a bagunça caprichosa e redescobrir a alegria de arrumar para restaurar a ordem no Livro da Magia – um nível aconchegante de cada vez.

Ao longo do desenvolvimento, cada equipe da Jam City estabeleceu metas ambiciosas: A equipe de arte buscou alta fidelidade visual dentro de orçamentos de polígonos rigorosos; a equipe de produto otimizou para metas ideais de tempo de sessão; os designers garantiram um fluxo constante de conteúdo novo, e os testadores de QA exigiram ferramentas poderosas. Enquanto isso, os engenheiros da Jam City priorizaram desempenho técnico de classe mundial, estabilidade, agilidade e mais em todas as plataformas. Aqui está como eles navegaram por desafios complexos para dar vida à sua visão.

O DESAFIO:

Entregando um jogo de combinação 3D de alta fidelidade que roda suavemente e mantém desempenho consistente em uma ampla gama de dispositivos

PLATAFORMA:

iOS, Android

LOCAL:

Culver City, Califórnia

EQUIPE DO PROJETO:

50

Disney Magic Match 3D: Um estudo de caso da Unity

Como um estúdio mantém o desempenho enquanto gerencia desafios como superaquecimento, entrega de conteúdo e outros problemas técnicos?

Durante a produção, renderizar centenas de objetos 3D com física em um único nível significava ter cuidado com iluminação, pós-processamento e contagem de polígonos.

“O superaquecimento foi um grande problema no início, especialmente com sessões de 20 minutos – os telefones ficavam desconfortavelmente quentes,” diz Hebby Mathew, gerente de engenharia de software na Jam City e líder técnico em Disney Magic Match 3D. “Abordamos isso melhorando o desempenho e desenvolvendo uma maneira de medir consistentemente o calor do dispositivo em vários hardwares.”

Outro desafio foi a entrega de conteúdo – transmitindo ativos de forma assíncrona sem afetar a taxa de quadros. “O Editor extensível da Unity nos ajudou a construir ferramentas eficientes para gerenciar quando e como o conteúdo era carregado,” diz Mathew.

Finalmente, enquanto perfilava o jogo em dispositivos de baixo, médio e alto desempenho para identificar gargalos de desempenho, a equipe identificou problemas-chave como chamadas de colisão excessivas e modelos de alta poligonalidade, especialmente para GPUs de baixo desempenho.

“Otimizar isso trouxe ganhos de desempenho e ajudou a resolver os problemas de superaquecimento,” diz Mathew.

Disney Magic Match 3D

Os resultados

- Aumentou a taxa de quadros em 40 fps em dispositivos Android de baixo desempenho e 35 fps em dispositivos Android de médio desempenho

- Reduziu a quantidade de chamadas de desenho em 40% em dispositivos iOS e 45% em dispositivos Android

- Reduziu o uso de RAM em 30% em dispositivos iOS e 15% em dispositivos Android

- Diminuiu o tempo de carga de processamento não relacionado à rede em 55%

- Reduziu o número de malhas com mais de 10.000 triângulos de 33 para 0

- Cortou o número de malhas com 5.000 a 10.000 triângulos de 324 para 235

- Reduziu a contagem de luzes em 67%

Disney Magic Match 3D | Jam City | Disney

Captura de tela no Editor dos tempos de carregamento iniciais do jogo

Acompanhando o desempenho em quadros e sistemas

Quando a equipe encontrou problemas de desempenho, eles recorreram a ferramentas de perfil para obter uma visão mais profunda.

Os marcadores do Profiler da Unity foram especialmente úteis para rastrear tarefas de múltiplos quadros,” diz Kevin Johnson, engenheiro de software da Jam City. “Eu também usei o Profiler Analyzer para comparações.”

Andrea Ramirez, outra engenheira, estendeu a análise usando arquivos de log binários para capturar instantâneas de quadros específicos. “Isso nos permitiu analisar o desempenho sem precisar do profiler ao vivo,” ela explica.

Disney Magic Match 3D | Jam City | Disney

Captura de tela no Editor dos tempos de carregamento mais rápidos do jogo após a otimização

A equipe personalizou ainda mais o Profiler, adicionando descartáveis para agilizar a ativação e o registro. Além da profilagem da CPU, eles monitoraram a memória com o Memory Profiler e resolveram problemas de renderização usando o Frame Debugger. O Profiler Recorder permitiu que eles rastreassem estatísticas de desempenho global durante testes repetíveis.

“Uma das maiores forças do motor é quão extensível é o Editor,” acrescenta Ramirez. “Ao capturar instantâneas de múltiplos quadros e scriptar testes, coletamos dados de desempenho consistentes e confiáveis.”

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

Reduzindo grandes picos de desempenho

A profilagem revelou grandes picos de desempenho no início do nível, principalmente causados pela compilação de shaders quando os ativos apareceram pela primeira vez. Usando Addressables, a equipe identificou ativos duplicados que acionavam compilações de shaders desnecessárias.

“Pré-carregamos elementos de UI e peças do jogo mais cedo,” diz o desenvolvedor John Enney. “Pacotes de ativos agrupados de forma inadequada foram um problema chave, que causou repetidas compilações de shaders – algo que inicialmente ignorei.”

No início, eles integraram Quick Outline para adicionar destaque às peças rapidamente. Embora tenha introduzido algum overdrawing – sobrecarga extra de renderização – as otimizações permitiram que eles mantivessem isso sem uma reescrita completa.

O áudio também contribuiu para picos de desempenho. “Cada peça do jogo acionou seu próprio som de colisão,” explica Enney. “Isso funcionou bem inicialmente, mas com 300 peças caindo simultaneamente, os tempos de quadro dispararam para 500ms. Substituir esses múltiplos sons por um único som de queda ambiente reduziu isso para 20-30ms – e na verdade soou melhor.”

Disney Magic Match 3D | Jam City | Disney

Captura no Editor dos picos iniciais de desempenho durante o gameplay

O feedback háptico também exigiu ajustes finos. “Limitamos chamadas hápticas durante colisões em massa,” diz o diretor técnico Troy Lee. “Aplicar essa restrição melhorou o desempenho consistentemente ao longo do jogo.”

A iluminação apresentou outro desafio. Embora a renderização adiada tenha melhorado o desempenho, ela conflitou com os objetivos artísticos. “A renderização para frente tem dificuldades com várias luzes porque requer passes caros por objeto,” explica Ramirez. Para equilibrar qualidade e eficiência, Enney desenvolveu uma solução de iluminação pré-assada que preservava a fidelidade visual enquanto melhorava o desempenho em tempo de execução.

A complexidade da geometria também era uma preocupação. “Nossos modelos iniciais excediam 10.000 triângulos,” diz a artista técnica principal Kristen Weeks. “Reduzimos a maioria dos modelos para menos de 2.500 triângulos para garantir um bom desempenho em dispositivos de menor capacidade.”

Disney Magic Match 3D | Jam City | Disney

Captura no editor dos menores picos de desempenho pós-otimização

Aprimorando a inicialização e o manuseio de ativos

No início, o carregamento de ativos e a inicialização do sistema envolvendo chamadas da web causaram grandes problemas. Para evitar lentidões durante o jogo ou interações da interface do usuário, a equipe inicialmente carregou todos os ativos de uma vez. No entanto, à medida que os recursos e ativos do jogo se expandiram, os tempos de inicialização se tornaram excessivamente longos.

Eles otimizaram movendo alguns ativos para serem carregados de forma assíncrona em segundo plano, reduzindo os tempos de carregamento iniciais enquanto mantinham uma experiência suave no jogo. Eles também paralelizaram as tarefas de carregamento usando o sistema de tarefas do .NET, e essas melhorias, juntamente com o carregamento nativo de pacotes de ativos, trouxeram ganhos significativos.

A latência da rede, especialmente durante o carregamento inicial, também impactou o desempenho. Para resolver isso, a equipe trocou de corrotinas do Unity para C# async/await para chamadas de rede, reduzindo a latência. “Também otimizamos a desserialização JSON substituindo a abordagem baseada em reflexão do Newtonsoft por geração de código, melhorando o desempenho,” diz Johnson.

Os custos de instanciação afetaram ainda mais os tempos de carregamento iniciais, com um atraso perceptível – cerca de meio segundo em dispositivos de médio alcance – devido ao jogo criar muitos prefabs de interface do usuário e de fundo imediatamente após o lançamento.

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

“Uma grande parte do custo foi a inicialização pesada do Awake() em muitos objetos,” explica Johnson. “Otimizar a instanciação desativando objetos na criação e ativando-os apenas quando necessário. Também adiamos ou escalonamos a instanciação em vez de fazer tudo de uma vez, o que reduziu a latência visível.”

Para medir o desempenho de forma mais precisa, a equipe usou System.Diagnostics.Stopwatch para cronometrar os intervalos de instanciação e instrumentou várias partes do código.

Apesar dessas otimizações, a qualidade da rede no mundo real ainda impacta os tempos de carregamento. Para resolver isso, a equipe está experimentando o carregamento preguiçoso – enviando o jogo com todas as configurações e permitindo que os jogadores entrem imediatamente enquanto atualizam as configurações de forma assíncrona em segundo plano. “Os primeiros testes parecem promissores, mas estamos monitorando os resultados ao vivo com cautela,” diz Mathew.

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

Enfrentando limitações de GPU em dispositivos de baixo desempenho

Durante a otimização de desempenho, a equipe notou que alguns dispositivos de baixo desempenho mostraram melhoria mínima. Eles descobriram que esses dispositivos usavam predominantemente GPUs Mali, que lutavam para lidar com as contagens de itens alvo do jogo de forma eficaz. No entanto, conseguiram manter a meta de 60 fps em todas as categorias de dispositivos.

Weeks elabora sobre essas limitações: “GPUs Mali de terceira e quarta geração mais antigas são renderizadores baseados em tiles que facilmente se tornam limitados pela geometria. Em contraste, muitas outras GPUs usam técnicas de renderização híbrida que ajudam a evitar esse gargalo. GPUs Mali mais novas, como as encontradas em telefones Pixel recentes, têm mais unidades de processamento e lidam muito melhor com a geometria.”

Disney Magic Match 3D | Jam City | Disney

Disney Magic Match 3D | Jam City | Disney

Para entender melhor essas restrições, Mathew construiu uma ferramenta no início do desenvolvimento que instanciava o aumento do número de objetos em vários dispositivos para rastrear quedas na taxa de quadros. A ferramenta revelou que certas GPUs tinham limites mais baixos, sublinhando a necessidade de otimizar os modelos do jogo com cuidado, sem sacrificar a qualidade da arte.

“Na pré-produção, o diretor de arte solicitou o uso intenso de efeitos de pós-processamento e várias luzes dinâmicas,” diz Weeks. “No entanto, removemos o pós-processamento para a produção devido à sua contribuição significativa para o superaquecimento do dispositivo e quedas de desempenho.”

Enney também aumentou a eficiência ao incorporar uma luz pontual diretamente nos shaders, reduzindo o número de luzes ativas de três ou quatro para apenas uma.

Essa abordagem colaborativa permitiu que a equipe encontrasse um equilíbrio ideal entre qualidade visual e desempenho, garantindo uma experiência suave em uma ampla gama de dispositivos.

Baixe agora o Unity Pro

Comece a criar jogos que competem e superam a qualidade e o sucesso de lançamentos de grandes estúdios com a ajuda de ferramentas poderosas, suporte, parceiros verificados e uma comunidade vibrante.