Optimización de Subway Surfers City para mejorar el rendimiento y la velocidad

SYBO ha creado su último lanzamiento, «Subway Surfers City», como el siguiente capítulo del universo de «Subway Surfers». Mientras que el juego original recorre el mundo, esta entrega sitúa a los jugadores en Subway City, presentando distintos barrios y una mayor variedad de jugabilidad.
Además del clásico modo «endless runner», el juego incluye experiencias de duración limitada, como eventos rotativos y un recorrido por la ciudad. Estos nuevos modos amplían los sistemas de progresión y de juego, al tiempo que conservan la capacidad de respuesta y la fluidez que caracterizan a la franquicia para millones de jugadores de todo el mundo.
Mejorar la calidad gráfica del juego es un elemento fundamental de esta vision, que incluye animaciones mejoradas, entornos más detallados y nuevas funciones de juego. Sin embargo, estas mejoras no pueden ir en detrimento de la claridad ni de la eficiencia en runtime.
El reto consistía en desarrollar la experiencia de tal forma que resultara a la vez familiar y novedosa, con el fin de ofrecer una versión moderna del género de los juegos de carrera, sin perder la inmediatez que convirtió al original en un éxito global con más de 4.500 millones de descargas en total.
EL RETO:
Una secuela de gran calidad de Subway Surfers que funciona con fluidez y ofrece un rendimiento constante en una amplia gama de dispositivos
PLATAFORMA:
iOS, Android
UBICACIÓN:
Copenhague, Dinamarca
PERSONAL DEL PROYECTO:
35
Subway Surfers City: Un caso práctico de Unity
El equipo desarrolló Subway Surfers City como un juego Live y escalable, capaz de admitir contenido continuo, nuevas mecánicas y una mayor calidad gráfica a lo largo de los años sin necesidad de modificaciones importantes. «Tenía que evolucionar técnicamente al mismo ritmo que el diseño y el contenido evolucionaban creativamente», afirma Atash Qasim, diseñador jefe de juegos en SYBO.
El equipo diseñó la arquitectura centrándose en la modularidad y el rendimiento. Encapsulaban y ampliaban los sistemas, lo que permitía a los diseñadores añadir elementos de juego o variaciones en el entorno sin desestabilizar el ciclo de juego principal.
Al mismo tiempo, una mayor fidelidad planteó retos en cuanto al rendimiento: los entornos detallados, los elementos con gran cantidad de polígonos y las animaciones más elaboradas pueden suponer una carga excesiva para los dispositivos de gama media y baja. «Establecimos límites estrictos para la complejidad de las Meshes y los sombreadores, implementamos rutas de renderizado por niveles con distintos grados de calidad y escalado de resolución, y realizamos perfiles de rendimiento de forma continua en dispositivos representativos», explica Gabriel Lascano, director técnico de SYBO. «También dedicamos muchos esfuerzos a encontrar el momento adecuado para el precalentamiento de los shaders, buscando el equilibrio entre unos tiempos de carga rápidos y los tirones que se producen durante la compilación de los shaders en runtime».
En lugar de optimizar a ciegas, identificaron los verdaderos cuellos de botella, entre ellos la densidad excesiva de microtriángulos y el sobredibujado de fragmentos en las GPU basadas en mosaicos. El resultado es una base adaptable y orientada al rendimiento, capaz de aumentar su complejidad sin perder estabilidad y manteniendo una amplia compatibilidad con distintos dispositivos.

Los resultados
- Mantiene constantemente los 60 FPS
- El número de dispositivos compatibles se multiplicó por 5,9 tras la fase de optimización del rendimiento
- Se ha reducido el horizonte de 260 000 a un número reducido de vértices y se han reducido las llamadas de dibujo de 27 a solo unas pocas
- Se ha eliminado un retraso de 10 ms a la espera de que la GPU finalice cada fotograma en dispositivos de gama baja
- Se ha reducido la sobrecarga administrativa de la animación y el renderizado en aproximadamente un 50-60 %, lo que ha permitido recuperar unos 2 ms de tiempo de CPU del hilo principal en dispositivos Android de gama baja
Diseño de niveles para una iteración rápida
El diseño de los niveles en Subway Surfers City está pensado para ofrecer velocidad y flexibilidad. Para ofrecer la variedad y la capacidad de adaptación que caracterizan a la franquicia, el equipo utilizó un sistema procedural basado en bloques, lo que permitió a los diseñadores crear, modificar y combinar segmentos independientes de forma autónoma en el editor de Unity.
Cada fragmento incluye elementos superpuestos y reglas de variación que garantizan la coherencia y, al mismo tiempo, mantienen el interés en las repeticiones. Este sistema permite ampliar los niveles de forma escalable, lo que permite añadir nuevos fragmentos directamente a recorridos infinitos o modos finitos sin necesidad de redefinir rutas completas.
Mediante el Editor, los diseñadores simulan el movimiento de los obstáculos, previsualizan las interacciones y prueban los elementos dinámicos en tiempo real. «Pueden hacerse una idea exacta de cómo será cada nivel sin tener que jugar el juego completo», explica Lascano.

Subway Surfers City | SYBO
Las herramientas de colocación con función de ajuste automático y la visualización de colisionadores de Unity agilizaron aún más el proceso de iteración, lo que permitió realizar ajustes precisos y rápidos. En los modos por etapas, como City Tour, los diseñadores ejecutaban fragmentos o etapas concretos directamente en el Editor, sin pasar por los ciclos completos de compilación del Project.
La estructura modular también permite modificar rápidamente los contenidos. «Nuestros niveles son muy modulares», afirma Qasim. «Disponemos de diferentes elementos prefabricados para distintas variaciones de los elementos de diseño de niveles, que podemos arrastrar y soltar en bloques. «Cada sección incluye varias capas, por lo que, cuando los jugadores recorren el mismo segmento, se encuentran con diferentes variaciones que mantienen el interés del juego».
El equipo combinó una arquitectura modular por niveles con visualización en tiempo real, lo que aceleró el proceso de iteración sin comprometer la calidad. Como señala Lascano: «Este sistema permite a los diseñadores experimentar con total libertad, ampliar el contenido de forma eficiente y mantener la capacidad de respuesta y el acabado que esperan los jugadores, tanto en los modos de juego infinitos como en los finitos».

Subway Surfers City | SYBO
Gestión de la memoria con Addressables
El sistema Addressables es fundamental para que el equipo pueda ofrecer imágenes de gran calidad y entornos amplios sin comprometer el rendimiento. El equipo utilizó Addressables para cargar únicamente los fragmentos relevantes para el jugador —descargando las secciones completadas y realizando streaming de las nuevas en tiempo real—, lo que minimizó el uso de memoria y permitió ofrecer un contenido rico y dinámico.
«Los fragmentos se transmiten de entrada y salida a través del sistema Addressables con un estricto control de su tiempo de vida, lo que garantiza que el consumo de memoria se adapte a la actividad del juego en lugar de al tamaño total del contenido», explica Lascano. «En combinación con la agrupación, esto minimiza los picos de asignación y mantiene estable la memoria runtime, incluso cuando el contenido se amplía».
El sistema Addressables permite al equipo separar el contenido de la base y tratar los fragmentos de nivel como unidades que se pueden cargar de forma independiente. «Esto fue fundamental para garantizar el cumplimiento de los requisitos de la tienda, ya que permitió reducir el tamaño de la descarga inicial y controlar el uso de memoria durante el runtime», afirma Lascano.

Subway Surfers City | SYBO
Optimización del rendimiento en todos los segmentos de dispositivos
El renderizado en Subway Surfers City se adapta a dispositivos de gama baja, media y alta, al tiempo que mantiene unos gráficos detallados y una velocidad de fotogramas estable. El equipo siguió una rigurosa metodología de optimización centrada en los cuellos de botella. Cada vez que se eliminaba una restricción, el análisis de rendimiento revelaba el siguiente factor limitante. «Este proceso iterativo nos permite ampliar la gama de dispositivos compatibles de forma metódica, en lugar de recurrir a una optimización general y poco específica», afirma Lascano.
El equipo utilizó el Universal Render Pipeline (URP) junto con el «batcher» del Scriptable Render Pipeline (SRP) para reducir la carga de renderizado de la CPU, almacenando en caché los búferes de constantes de los materiales en la GPU y reutilizándolos en los objetos que comparten la misma variante de sombreador, lo que minimiza la configuración del estado por cada llamada de dibujo en el hilo de renderizado.
«Implementamos varias variantes de sombreador por nivel de calidad y las controlamos mediante palabras clave globales y ajustes de URP. «Los dispositivos de gama baja utilizan una iluminación reducida y trayectorias de fragmentos simplificadas, mientras que los de gama alta conservan toda la fidelidad, todo ello sin modificar el contenido de los recursos», afirma Lascano.

Subway Surfers City | SYBO
Los artistas crearon sus propios shaders utilizando el Amplify Shader Editor, lo que les permitió tener control creativo sin necesidad de asistencia técnica. El equipo probó el rendimiento en distintos dispositivos, reescribió los shaders complejos y optimizó elementos clave, como el perfil urbano.
«Sustituimos un horizonte animado en 3D con un gran número de vértices —aproximadamente 260 000 vértices repartidos en 27 llamadas de dibujo— por una malla plana y texturas panorámicas», explica Lascano. «Este cambio redujo considerablemente el procesamiento de vértices y la fragmentación en microtriángulos a un número reducido de vértices repartidos en unas pocas llamadas de dibujo, lo que permitió recuperar varios milisegundos de tiempo de GPU en dispositivos Android de gama baja».
Reducción del sobredibujado de microtriángulos en las GPU de dispositivos móviles
Los primeros análisis de rendimiento de la GPU en dispositivos con GPU Mali revelaron que la aplicación enviaba mucha más geometría de la que contribuía de manera significativa a los píxeles visibles. Solo alrededor del 33 % de las primitivas enviadas eran visibles, mientras que la GPU descartó aproximadamente el 25 % mediante el culling de muestras (lo ideal sería menos del 5 %). Además, la cobertura parcial de los microtriángulos se situó sistemáticamente entre el 50 % y el 80 % (lo ideal sería menos del 10 %).
Estos resultados indicaban que la aplicación generaba una densidad excesiva de microtriángulos, una ineficiencia conocida en las GPU móviles basadas en mosaicos, en las que los costes de procesamiento de fragmentos aumentan significativamente incluso cuando la geometría apenas cubre los píxeles de la pantalla. El equipo utiliza un sistema adaptativo personalizado para monitorizar la carga de la CPU y la GPU en tiempo real. Ajusta dinámicamente la calidad, la instanciación de recursos, la eliminación de objetos en función de la distancia y los elementos no esenciales, como los accesorios de alto detalle, para mantener el rendimiento deseado.
«Respondimos reduciendo drásticamente el número de polígonos, eliminando las caras traseras de la geometría estática, simplificando las mallas del horizonte y aplicando límites estrictos de Mesh por fragmento. «Esto redujo considerablemente la carga de trabajo de los fragmentos y estabilizó el tiempo de uso de la GPU en dispositivos Android de gama baja», afirma Lascano. «Los colores de vértices, los límites de polígonos y la eliminación de las caras posteriores de la geometría estática redujeron aún más la carga de trabajo de la GPU sin afectar a la calidad visual del juego».

Subway Surfers City | SYBO
Ampliación de los dispositivos compatibles mediante la creación de perfiles
En las primeras fases del desarrollo, solo el 16 % de los dispositivos compatibles podían ejecutar Subway Surfers City debido a la complejidad gráfica. En lo que respecta al perfilado, el equipo se enfrentó a diversos cuellos de botella, entre ellos el coste de los fragmentos de la GPU y la complejidad de los shaders, así como la sobrecarga de los envíos a la CPU y la retención de memoria.
Para ampliar la compatibilidad con dispositivos, el equipo se basó en gran medida en Project Auditor y Memory Profiler, además de herramientas de análisis de rendimiento personalizadas. Project Auditor les ayudó a identificar ineficiencias a nivel de configuración y de recursos, como un número excesivo de variantes de sombreadores y ajustes redundantes o erróneos, mientras que los cuellos de botella en runtime se analizaron mediante Unity Profiler y herramientas de perfilado a nivel de dispositivo, como RenderDoc y Snapdragon Profiler.
El Memory Profiler reveló puntos críticos en el uso de la memoria de los recursos, identificando texturas, Meshes u objetos que provocaban picos o una retención innecesaria.

Subway Surfers City | SYBO
«La creación de perfiles se integró en nuestro proceso de aprobación de lanzamientos. «Cada versión importante se validó en función de los límites de CPU, GPU y memoria para evitar regresiones y garantizar que las mejoras en un nivel de dispositivos no provocaran inestabilidad en otro», explica Lascano.
Mediante el análisis sistemático de estos indicadores, el equipo estableció prioridades en las optimizaciones, aplicó límites al número de polígonos y al consumo de memoria, y garantizó una frecuencia de fotogramas estable incluso en dispositivos de gama baja.
El equipo también llevó a cabo comprobaciones internas de Addressables para evitar duplicados y conflictos, mientras que el sistema modular de fragmentos y el uso compartido de objetos minimizaron los picos de memoria durante el juego.
Dar prioridad a la estabilidad de los fotogramas frente al rendimiento máximo
Para el renderizado, el equipo optó por OpenGL en lugar de Vulkan con el fin de mantener una frecuencia de fotogramas estable en dispositivos de gama baja, basándose en los resultados de rendimiento obtenidos en su matriz de pruebas.
«Aunque Vulkan funcionaba bien en dispositivos de gama alta, el Profiler reveló bloqueos en los subprocesos de renderizado y una frecuencia de fotogramas inestable en el hardware Android de gama baja», afirma Lascano. «OpenGL ofrecía tiempos de fotograma más uniformes en toda nuestra matriz de dispositivos objetivo, por lo que dimos prioridad a la compatibilidad con los dispositivos y a la estabilidad de los fotogramas frente al rendimiento teórico máximo».
En combinación con el rendimiento adaptativo, los sombreadores por niveles, el procesamiento por lotes SRP y las optimizaciones basadas en los recursos, este enfoque de perfilado permitió que los gráficos ricos y detallados se ejecutaran con fluidez en el 95 % de los dispositivos compatibles.
«La colaboración con el equipo de Éxito Integrado de Unity nos ayudó a validar y acelerar las decisiones que ya estábamos analizando, así como a evaluar las optimizaciones en función del ROI», afirma Lascano. «Los mayores avances se lograron eliminando sistemáticamente los verdaderos cuellos de botella —ya fueran actualizaciones de volúmenes limitadas por la CPU, solapamientos en el skinning de mallas o el coste de los fragmentos de la GPU— en lugar de aplicar prácticas recomendadas genéricas».

Subway Surfers City | SYBO
Compartir las principales lecciones aprendidas en materia de rendimiento
En lo que respecta a la optimización del rendimiento, Lascano hace hincapié en considerar las mejores prácticas —como los sistemas de nivel de detalle (LOD) o Vulkan— como hipótesis, y probarlas en el contexto de tu juego.
En el caso de los juegos Live, recomienda crear una arquitectura preparada para la iteración, con medidas de seguridad como límites de número de polígonos, restricciones de complejidad de los shaders, gestión de la memoria y análisis de rendimiento continuo. También sugiere tener en cuenta el alcance de los dispositivos desde el principio para evitar costosas modificaciones más adelante en la producción.
«El promedio de FPS puede ser engañoso. Lo que más llaman la atención a los jugadores en un juego como este es la estabilidad del ritmo de fotogramas. «La eliminación de los picos y los bloqueos de los subprocesos de renderizado tuvo un mayor impacto en la experiencia del jugador que el aumento de la frecuencia de fotogramas máxima», afirma Lascano. «Elegir el Pipeline adecuado, junto con la estrategia de Batch adecuada, para optimizar la distribución de fotogramas puede suponer un cambio radical».
Además, destaca que «la optimización del rendimiento es un proceso iterativo de eliminación de cuellos de botella». Cada fix traslada el problema a otro lugar, ya sea a la GPU, la CPU, la memoria o el ancho de banda de la memoria. «La clave está en definir perfiles de forma rigurosa, sopesar las ventajas y desventajas, y adaptar las decisiones técnicas a los dispositivos más limitados con los que se pretende ser compatible».
Descarga Unity Pro hoy mismo
Empieza a crear juegos que compitan con los lanzamientos de los grandes estudios y superen su calidad y éxito, con la ayuda de potentes herramientas, asistencia técnica, socios de confianza y una comunidad dinámica.