Soy Chris Shankland, director de tecnología de Odyssey Interactive y, anteriormente, jefe técnico de Omega Strikers. Omega Strikers es un <em>brawler</em> de temática futbolística de 3 contra 3 que se desarrolla a velocidad de la luz. En él, sacar a los oponentes del campo para despejar el camino a la portería no es más que la primera ronda. Hemos lanzado Omega Strikers para las plataformas de mayor importancia: los ordenadores, PlayStation, Xbox, Nintendo Switch, iOS y Android. Os voy a explicar algunas de las técnicas usadas para hacer que la experiencia para móviles, así como sus elementos visuales, sean de gran calidad. Para lanzar Omega Strikers con tanta velocidad y calidad, se necesita un esfuerzo por parte de todo el equipo. Haré de guía y explicaré los retos y las soluciones implementadas con la idea de ofrecer conocimiento y valor a juegos similares.
Omega Strikers, en su esencia, es un videojuego competitivo, por lo que priorizamos ese elemento por encima de cualquier otro. En la práctica, esto implica que se debe hacer un gran hincapié en el rendimiento, la claridad de la jugabilidad y los controles. A partir de ahí, nos centramos en la calidad de los elementos visuales para asegurarnos de que nuestro increíble componente artístico brille. A fin de alcanzar nuestros objetivos en cuanto a la estética y el rendimiento, hay que gestionar unas limitaciones de sobra conocidas: la memoria, la CPU y la GPU. Mencionaré algunos ejemplos concretos de cada una de ellas para mostrar los procesos que usamos con la idea de identificar y, finalmente, solucionar problemas que bloqueen los lanzamientos.
Omega Strikers es un videojuego con quince personajes posibles en su fase inicial, aunque con las constantes actualizaciones de contenido, esa cifra va aumentando. Al principio, había menos personajes, menos opciones de personalización y gráficos de relleno. En aquel momento, era una buena idea mantener un conjunto global de referencias duras para los personajes y todo el contenido relacionado. Con las pruebas internas realizadas en dispositivos con especificaciones mínimas, esta configuración no planteó problemas en la mayor parte del desarrollo. Y, conforme nos acercamos a la fecha del lanzamiento, la calidad y cantidad de elementos visuales aumentó exponencialmente. Tras un tiempo desarrollando con dichos elementos de gran calidad, se produjeron demasiados errores de memoria, por lo que el juego dejó de funcionar en dispositivos con especificaciones mínimas.
Visualización del paquete de una versión temprana de Omega Strikers
Llegados a este punto, había dos estrategias posibles: reducir el tamaño de los elementos o pasar de una carga de elementos desde el inicio a una carga de elementos bajo demanda. Esta última cumple con las expectativas de escalabilidad de los modelos en los que se dan actualizaciones constantes, así que decidimos tomar esa dirección. Lo que hicimos fue convertir las referencias duras de elementos de mayor tamaño, como las texturas o los personajes, en referencias blandas. Asimismo, dejamos en la memoria el conjunto de recursos de datos que representa al catálogo del juego para poder lidiar con los elementos de forma rápida y sincronizada. Con este método, se redujo la cantidad de refactorización necesaria, pudiendo realizar así todo el cambio en solo una semana. Tras implementar esta solución, Omega Strikers ha recibido cuatro actualizaciones importantes de contenido (como los mapas y los personajes) sin tener que solucionar de nuevo los problemas de memoria.
Captura de la memoria en Unreal Insights: referencias duras
Captura de la memoria en Unreal Insights: referencias blandas
El rendimiento de la CPU es una de nuestras prioridades, ya que queremos que se cumplan las fechas de lanzamiento de las versiones, y así fue a lo largo del desarrollo. Además, logramos evitar tener que realizar grandes optimizaciones al aproximarse la fecha del lanzamiento. La idea de esta estrategia es ejecutar el juego en dispositivos con especificaciones mínimas y que no se produzcan regresiones del rendimiento. Cuando hay un problema, Unreal Insights es la herramienta de diagnóstico a la que acudir.
Mantener el rendimiento de los gráficos en distintos dispositivos móviles plantea un desafío. Los jugadores esperan elementos visuales prémium en dispositivos de alta gama y un rendimiento óptimo en cualquier dispositivo. En Omega Strikers se han usado técnicas estándar de nivel de detalle para las texturas y las mallas, además de unos ajustes de calidad personalizados del entorno a fin de generar una gran variedad de escalas gráficas. Dichos ajustes se muestran y gestionan con variables de consola. Así es como creamos perfiles de los dispositivos y permitimos a los usuarios personalizar los ajustes. Nuevamente, recurrimos a Unreal Insights para la mayoría de los datos de los perfiles que se usan a la hora de orientar la optimización. RenderDoc es otra herramienta que usamos (junto con su complemento) para profundizar en el rendimiento específico del dispositivo o cuando se necesitan unos tiempos bien definidos.
El caché de PSO se volvió pronto un requisito para móviles. La idea era evitar que se produjeran errores, ya que se usaron los sombreadores por primera vez. Desarrollamos un proceso automatizado que crea una versión del juego que renderiza automáticamente todos los elementos visuales posibles con todos los ajustes de calidad para luego implementarse en un dispositivo físico. Al terminar con la ejecución automatizada, la aplicación publica el caché de PSO por completo en el proceso de versiones para que se incluya en versiones futuras.
Con un equipo pequeño, solo se puede lanzar y actualizar constantemente Omega Strikers en dispositivos móviles si se crean versiones para estos desde el principio y si se emplean las herramientas de UE con las que se optimizan las labores de desarrollo. Nuestras herramientas están pensadas para aligerar la carga de trabajo en dispositivos con menos capacidad, elementos de transmisión o datos y que el juego funcione en dispositivos con menos memoria. Y, además, emplean soluciones para móviles cuando se necesite. Ejemplo de ello son la IU y los controles. Al validar el juego continuamente en dispositivos con unas especificaciones mínimas, sabemos qué problemas existen cuando estos se originan. De este modo, no nos sorprenderemos de su existencia al llegar a ciertos parámetros. Por otro lado, al planificar y realizar pruebas en una etapa temprana del desarrollo nos aseguramos de tener las estrategias y capacidades indicadas antes de seguir adelante con la producción. Con todas estas soluciones, así como gracias a nuestro increíble equipo, Omega Strikers ha podido funcionar en la mayor variedad posible de plataformas y seguir recibiendo actualizaciones de una forma tremendamente sencilla.
Espero que lo aprendido sea de ayuda para juegos futuros. ¡Estoy deseando jugarlos!
¡Hazte ya con Unreal Engine!
Consigue la herramienta de creación más abierta y avanzada del mundo.
Unreal Engine incluye todas las funciones y acceso ilimitado al código fuente, ¡listo para usar!