Optimizar juegos: la odisea del desarrollador
Tras largos meses o años de desarrollo, ya tienes todos los assets que necesitas para tu juego, los niveles construidos y sus características programadas, pero hay un problema: sólo los ordenadores de la NASA pueden correrlo a un framerate aceptable. No desesperes, no eres el único. Hay casos y casos de juegos AAA incontestablemente exquisitos cuya reputación se fue al traste por motivos de índole técnica. En esas ocasiones, el entuerto se suele solucionar mediante parches a posteriori, pero por muy eficaz o rápido que lleguen, el daño ya está hecho. El dicho “la primera impresión es lo que cuenta” aplica mucho al lanzamiento de un título. Tras una cadena de desafortunados lanzamientos a principios de la presente generación, optimizar juegos pasó a ser una fase más prioritaria para las desarrolladoras, un motivo más por el que los retrasos están a la orden del día. Antes de adentrarnos en qué hacen los estudios para mejorar el rendimiento de sus inminentes lanzamientos, veamos qué podemos hacer para paliar estos problemas desde el comienzo de su desarrollo.
Mejor prevenir que curar
Desgranar los pormenores de la eficiencia computacional va más allá del propósito de este artículo, pero las siguientes son algunas de las buenas prácticas a tener en cuenta durante todo el desarrollo, para evitar sorpresas de difícil remedio en una fase avanzada:
- Usar lenguajes de bajo nivel, como C++ (que antiguamente se consideraría del más alto nivel). Además de ser más flexibles, éstos dan instrucciones cercanas al código máquina, con lo que resultan más directos. Usar punteros en lugar de copiar estructuras también acelerará las cosas.
- Evitar excesivas actualizaciones de estados, sobre todo si aplican a numerosas instancias a la vez.
Descarga nuestra guía gratuita: Videojuegos. Las 5 tecnologías vencedoras y las 5 olvidadadas en la pugna tecnológica
- Limitar los polígonos de los modelos en la medida de lo posible. Para simular más detalle del real, hacer uso de técnicas PBR en los materiales. Para reducir el número de draw calls (las veces que se renderiza un objeto), combina diferentes meshes en una.
- Ahórrate cuanto puedas en el cálculo de las colisiones.
- Usar el menor número de texturas y materiales posible. Para ello, los mapas de texturas son la mejor solución. A propósito: aprovecha cada rincón, cada píxel de tus texturas.
- Cuidado con las luces dinámicas y la iluminación volumétrica. Asegúrate de que casi todas tus luces sean estáticas.
- La compresión de texturas debería priorizar formatos acelerados por hardware para reducir tiempos de carga.
- Los efectos de sonido deben estar sin comprimir cuanto más cortos sean y más frecuentemente se usen; los más largos, comprimidos en memoria; una canción se reproducirá desde disco directamente.
Pese a seguir estas pautas, si el acabado artístico es muy realista o hay un gran número de elementos en pantalla y scripts corriendo a la vez, es muy fácil que haya que pasar por una fase de optimización. Un error que también debemos evitar es el de optimizar juegos demasiado pronto, pues el código o los assets optimizados son muy cerrados, difíciles de modificar, por lo que se debería buscar su eficiencia sólo tras estar convencido con ellos.
Los profilers: la clave para optimizar juegos
La herramienta definitiva para optimizar juegos se conoce como performance profiler. Éstos programas de análisis de rendimiento permiten descubrir cuellos de botella mostrando el tiempo necesario para la ejecución de diversas partes del código. Existen numerosas alternativas, y los motores dedicados suelen integrar su propuesta de serie. Un “perfilador” se divide principalmente en CPU profiler y GPU profiler. Ambos funcionan de igual forma: monitorizan el uso del hardware, marcan los procesos que requieran más ciclos de lo normal (medidos en milisegundos), y éstos serán los que deban revisarse. Con su ayuda pueden editarse materiales en tiempo real para ver su impacto, maximizar el aprovechamiento de los núcleos y debugar variables, parámetros y llamadas a librerías externas. Por último, no deberían faltar testeos en el hardware destino. Cuantas más arquitecturas de procesador y gráficas hayan sido probadas, mejor. Si el acceso a múltiples configuraciones es difícil por motivos económicos, las pruebas en máquinas virtuales son una alternativa razonablemente fiable. ¿Tienes ganas de profundizar más en el proceso de optimización? En nuestro máster en videojuegos aprenderás a optimizar juegos como parte de su proceso creativo.