Otimização do Subway Surfers City para melhorar o desempenho e a velocidade

A SYBO desenvolveu seu mais recente lançamento, Subway Surfers City, como o próximo capítulo do universo Subway Surfers. Enquanto o jogo original percorre o mundo, esta versão mantém os jogadores em Subway City, apresentando bairros distintos e uma maior variedade de jogabilidade.
Além do clássico modo de corrida infinita, o jogo apresenta experiências limitadas, como eventos rotativos e um City Tour. Esses novos modos ampliam os sistemas de progressão e jogabilidade, ao mesmo tempo em que preservam a agilidade e o ritmo que caracterizam a franquia para milhões de jogadores em todo o mundo.
Melhorar a qualidade gráfica do jogo é fundamental para essa visão, que inclui animações aprimoradas, ambientes mais ricos e recursos de jogabilidade ampliados. Essas melhorias, no entanto, não podem comprometer a clareza nem a eficiência de execução.
O desafio consistia em aprimorar a experiência de forma que parecesse ao mesmo tempo familiar e renovada, a fim de oferecer uma versão moderna do gênero de jogos de corrida, mantendo a espontaneidade que tornou o original um sucesso mundial, com mais de 4,5 bilhões de downloads ao longo de sua história.
O DESAFIO:
Oferecendo uma sequência de alta qualidade do Subway Surfers que funciona com fluidez e mantém um desempenho consistente em uma ampla variedade de dispositivos
PLATAFORMA:
iOS, Android
LOCALIZAÇÃO:
Copenhague, Dinamarca
EQUIPE DO PROJETO:
35
Subway Surfers: Cidade: Um estudo de caso da Unity
A equipe desenvolveu o Subway Surfers City como um jogo em serviço escalável, capaz de suportar atualizações contínuas de conteúdo, novas mecânicas e maior qualidade gráfica ao longo dos anos, sem a necessidade de grandes reformulações. “Era preciso que a parte técnica evoluísse no mesmo ritmo que o design e o conteúdo evoluíam criativamente”, afirma Atash Qasim, designer-chefe de jogos da SYBO.
A equipe projetou a arquitetura com foco na modularidade e no desempenho. Eles encapsularam e ampliaram os sistemas, permitindo que os designers adicionassem elementos de jogabilidade ou variações ambientais sem comprometer o ciclo central de jogabilidade.
Ao mesmo tempo, o aumento da fidelidade trouxe desafios de desempenho: ambientes detalhados, recursos com alta densidade de polígonos e animações mais elaboradas podem sobrecarregar dispositivos de gama média e baixa. “Estabelecemos limites rigorosos para a complexidade das malhas e dos shaders, implementamos caminhos de renderização em camadas com diferentes níveis de qualidade e escalonamento de resolução, e realizamos análises de desempenho contínuas em dispositivos representativos”, explica Gabriel Lascano, diretor técnico da SYBO. “Também investimos bastante para encontrar o momento certo para o pré-aquecimento dos shaders, equilibrando tempos de carregamento rápidos com as falhas de compilação dos shaders durante a execução.”
Em vez de otimizar às cegas, eles identificaram os verdadeiros gargalos, incluindo a densidade excessiva de microtriângulos e o excesso de renderização de fragmentos em GPUs baseadas em blocos. O resultado é uma base adaptável e voltada para o desempenho, capaz de evoluir em complexidade, mantendo a estabilidade e uma ampla compatibilidade com dispositivos.

Os resultados
- Atinge consistentemente 60 FPS
- Aumento de 5,9 vezes no número de dispositivos compatíveis após a fase de otimização de desempenho
- Reduzimos a linha do horizonte de 260.000 para um número reduzido de vértices e diminuímos as chamadas de renderização de 27 para apenas algumas
- Eliminou um atraso de 10 ms na espera pela conclusão da GPU por quadro em dispositivos de gama baixa
- Reduzimos a sobrecarga de animação e renderização em cerca de 50% a 60%, recuperando aproximadamente 2 ms de tempo de CPU da thread principal em dispositivos Android de baixo custo
Criação de níveis para iteração rápida
O design dos níveis em Subway Surfers City foi concebido para oferecer velocidade e flexibilidade. Para oferecer a variedade e a capacidade de resposta que caracterizam a franquia, a equipe utilizou um sistema procedural baseado em blocos, permitindo que os designers criassem, modificassem e combinassem segmentos independentes de forma autônoma no Editor do Unity.
Cada bloco inclui elementos em camadas e regras de variação que preservam a consistência, mantendo as repetições envolventes. Este sistema permite a expansão escalável dos níveis, possibilitando que novos blocos sejam adicionados diretamente em percursos infinitos ou modos finitos sem a necessidade de redefinir os percursos inteiros.
Com o Editor, os designers simulam o movimento de obstáculos, visualizam interações e testam elementos dinâmicos em tempo real. “Eles podem ter uma ideia exata de como será uma parte do jogo sem precisar jogar o jogo inteiro”, explica Lascano.

Subway Surfers City | SYBO
As ferramentas de posicionamento com encaixe e a visualização de colisores do Unity agilizaram ainda mais o processo de iteração, permitindo ajustes precisos e rápidos. Para modos em etapas, como o City Tour, os designers executaram partes específicas ou etapas diretamente no Editor, evitando os ciclos completos de compilação do projeto.
A estrutura modular também permite uma rápida adaptação do conteúdo. “Nossos níveis são muito modulares”, diz Qasim. “Temos diferentes modelos pré-fabricados para as diversas variações dos elementos de design de níveis, que podemos arrastar e soltar em blocos. Cada seção inclui várias camadas, de modo que, quando os jogadores percorrem o mesmo segmento, eles encontram variações diferentes que mantêm a jogabilidade sempre renovada.”
A equipe combinou uma arquitetura modular em camadas com visualização em tempo real, o que acelerou o processo de iteração sem comprometer a qualidade. Como observa Lascano, “esse sistema permite que os designers experimentem livremente, expandam o conteúdo com eficiência e mantenham a capacidade de resposta e o acabamento que os jogadores esperam, tanto nos modos de jogo infinitos quanto nos finitos.”

Subway Surfers City | SYBO
Gerenciamento de memória com Addressables
O sistema Addressables é fundamental para que a equipe consiga produzir visuais ricos e ambientes amplos sem comprometer o desempenho. A equipe utilizou o Addressables para carregar apenas os blocos relevantes para o jogador — descarregando as seções já concluídas e transmitindo as novas —, o que minimizou o uso de memória e permitiu a exibição de um conteúdo rico e dinâmico.
“Os blocos são transmitidos de entrada e saída pelo sistema Addressables com um rigoroso controle de tempo de vida, garantindo que o consumo de memória se adapte à atividade do jogo, e não ao tamanho total do conteúdo”, explica Lascano. “Em combinação com o pooling, isso minimiza picos de alocação e mantém a memória em tempo de execução estável, mesmo à medida que o conteúdo cresce.”
O sistema Addressables permite que a equipe separe o conteúdo da estrutura básica e trate os blocos de níveis como unidades que podem ser carregadas independentemente. “Isso foi fundamental para garantir a conformidade da loja, reduzindo o tamanho do download inicial e controlando o uso de memória durante a execução”, afirma Lascano.

Subway Surfers City | SYBO
Otimização do desempenho em todos os segmentos de dispositivos
A renderização no Subway Surfers City se adapta a dispositivos de baixo, médio e alto desempenho, mantendo visuais detalhados e taxas de quadros estáveis. A equipe seguiu uma metodologia rigorosa de otimização que prioriza os gargalos. Sempre que uma restrição era eliminada, a análise de desempenho revelava o próximo fator limitante. “Esse processo iterativo nos permitiu ampliar a gama de dispositivos compatíveis de forma metódica, em vez de depender de uma otimização ampla e difusa”, afirma Lascano.
A equipe utilizou o Universal Render Pipeline (URP) com o batedor do Scriptable Render Pipeline (SRP) para reduzir a sobrecarga de renderização da CPU, armazenando em cache os buffers de constantes de materiais na GPU e reutilizando-os entre objetos que compartilham a mesma variante de shader, minimizando assim a configuração de estado por chamada de desenho na thread de renderização.
“Implementamos várias variantes de shader por nível de qualidade e as controlamos por meio de palavras-chave globais e configurações do URP. “Os dispositivos de gama baixa utilizam iluminação reduzida e trajetórias de fragmentos simplificadas, enquanto os de gama alta mantêm a fidelidade total, tudo isso sem alterar o conteúdo dos recursos”, afirma Lascano.

Subway Surfers City | SYBO
Os artistas criaram shaders usando o Amplify Shader Editor, o que lhes proporcionou controle criativo sem a necessidade de suporte técnico. A equipe testou o desempenho em diversos dispositivos, reescreveu shaders complexos e otimizou recursos essenciais, incluindo o horizonte da cidade.
“Substituímos um horizonte animado em 3D com muitos vértices — cerca de 260 mil vértices distribuídos por 27 chamadas de renderização — por uma malha plana e texturas panorâmicas”, diz Lascano. “Essa mudança reduziu significativamente o processamento de vértices e a fragmentação em microtriângulos, limitando-os a um pequeno número de vértices em poucas chamadas de renderização, recuperando vários milissegundos de tempo de GPU em dispositivos Android de gama baixa.”
Reduzindo o overdraw de microtriângulos em GPUs móveis
As primeiras análises de desempenho da GPU em dispositivos com GPU Mali revelaram que o aplicativo estava enviando muito mais geometria do que o necessário para gerar pixels visíveis. Apenas cerca de 33% das primitivas enviadas estavam visíveis, enquanto a GPU descartou aproximadamente 25% por meio da seleção de amostras (o ideal seria menos de 5%). Além disso, a cobertura parcial dos microtriângulos atingiu consistentemente 50–80% (o ideal seria menos de 10%).
Esses resultados indicaram que a aplicação estava gerando uma densidade excessiva de microtriângulos, uma ineficiência conhecida em GPUs móveis baseadas em blocos, nas quais os custos de processamento de fragmentos aumentam significativamente mesmo quando a geometria mal cobre os pixels da tela. A equipe utiliza um sistema adaptativo personalizado para monitorar a carga da CPU e da GPU em tempo real. Ele ajusta dinamicamente a qualidade, a instanciação de recursos, a eliminação de objetos à distância e elementos não essenciais, como adereços de alto detalhe, para manter o desempenho desejado.
“Respondemos reduzindo drasticamente o número de polígonos, removendo faces traseiras da geometria estática, simplificando as malhas do horizonte e aplicando limites rigorosos de malha por bloco. “Isso reduziu significativamente a carga de trabalho dos fragmentos e estabilizou o tempo de uso da GPU em dispositivos Android de gama baixa”, afirma Lascano. “As cores de vértice, os limites de polígonos e a remoção das faces traseiras da geometria estática reduziram ainda mais a carga de trabalho da GPU sem afetar a qualidade visual do jogo.”

Subway Surfers City | SYBO
Ampliação da gama de dispositivos compatíveis por meio da criação de perfis
No início do desenvolvimento, apenas 16% dos dispositivos compatíveis conseguiam rodar o Subway Surfers City devido à complexidade gráfica. No que diz respeito à otimização, a equipe enfrentou gargalos variáveis, incluindo o custo de fragmentos da GPU e a complexidade dos shaders, bem como a sobrecarga de envio da CPU e a retenção de memória.
Para ampliar a compatibilidade com dispositivos, a equipe contou fortemente com o Project Auditor e o Memory Profiler, além de ferramentas de análise de desempenho personalizadas. O Project Auditor ajudou a identificar ineficiências na configuração e nos recursos, como variantes excessivas de shaders e configurações redundantes ou incorretas, enquanto os gargalos de execução foram analisados usando o Unity Profiler e ferramentas de análise de desempenho no nível do dispositivo, como o RenderDoc e o Snapdragon Profiler.
O Memory Profiler revelou pontos críticos no uso de memória dos recursos, identificando texturas, malhas ou objetos que causavam picos ou retenção desnecessária.

Subway Surfers City | SYBO
“A análise de perfis foi integrada ao nosso sistema de liberação.” “Cada versão principal foi validada em relação aos limites de CPU, GPU e memória para evitar regressões e garantir que as melhorias em um nível de dispositivos não causassem instabilidade em outro”, explica Lascano.
Ao analisar sistematicamente essas métricas, a equipe priorizou as otimizações, impôs limites para o número de polígonos e o consumo de memória e garantiu um ritmo de quadros estável, mesmo em dispositivos de gama baixa.
A equipe também realizou verificações internas de Addressables para evitar duplicatas e conflitos, enquanto o sistema modular de blocos e o pool de objetos minimizaram os picos de memória durante o jogo.
Priorizar a estabilidade dos quadros em detrimento do desempenho máximo
Para a renderização, a equipe optou pelo OpenGL em vez do Vulkan para manter uma taxa de quadros estável em dispositivos de baixo custo, com base nos resultados de desempenho medidos em toda a sua matriz de testes.
“Embora o Vulkan tenha apresentado bom desempenho em dispositivos de ponta, a análise de desempenho revelou paralisações na thread de renderização e instabilidade na taxa de quadros em hardware Android de gama baixa”, afirma Lascano. “O OpenGL proporcionou tempos de renderização mais consistentes em toda a nossa matriz de dispositivos-alvo; por isso, priorizamos a inclusão de dispositivos e a estabilidade da renderização em detrimento do desempenho teórico máximo.”
Combinada com desempenho adaptativo, shaders em camadas, agrupamento SRP e otimizações baseadas nos recursos, essa abordagem de análise de desempenho contribuiu para que visuais ricos e detalhados fossem exibidos com fluidez em 95% dos dispositivos compatíveis.
“A colaboração com a equipe de Sucesso Integrado da Unity ajudou a validar e acelerar as decisões que já estávamos analisando e avaliando em termos de retorno sobre o investimento (ROI)”, afirma Lascano. “Os maiores ganhos foram obtidos com a eliminação sistemática de verdadeiros gargalos — fossem atualizações de volume limitadas pela CPU, sobreposições no skinning de malhas ou custos de fragmentos da GPU —, em vez da simples aplicação de práticas recomendadas genéricas.”

Subway Surfers City | SYBO
Compartilhando os principais aprendizados sobre desempenho
Quando se trata de otimização de desempenho, Lascano destaca a importância de tratar as melhores práticas — como sistemas de LOD ou Vulkan — como hipóteses, testando-as no contexto do seu jogo.
Para jogos em tempo real, ele recomenda criar uma arquitetura preparada para iterações, com medidas de segurança como limites de contagem de polígonos, restrições de complexidade de shaders, gerenciamento de memória e análise contínua de desempenho. Ele também sugere que se leve em consideração o alcance do dispositivo logo no início, para ajudar a evitar retrabalhos dispendiosos mais adiante na produção.
“A média de FPS pode ser enganosa. O que os jogadores mais notam em um jogo como este é a estabilidade da taxa de quadros. “A eliminação dos picos e das interrupções nas threads de renderização teve um impacto maior na experiência do jogador do que o aumento da taxa de quadros máxima”, afirma Lascano. “Escolher o pipeline de renderização adequado, combinado com a estratégia de agrupamento correta, para otimizar o ritmo dos quadros pode ser um divisor de águas.”
Ele também destaca que “a otimização do desempenho é um processo iterativo de eliminação de gargalos”. Cada correção transfere o gargalo para outro ponto, entre a GPU, a CPU, a memória e a largura de banda da memória. “O segredo está na definição disciplinada de perfis, em escolhas ponderadas e no alinhamento das decisões técnicas com os dispositivos mais limitados que você pretende oferecer suporte.”
Baixe agora o Unity Pro
Comece a criar jogos que rivalizem com os lançamentos dos grandes estúdios e superem sua qualidade e sucesso, com a ajuda de ferramentas poderosas, suporte, parceiros confiáveis e uma comunidade dinâmica.