Categorías
Informática Universitario Videojuego

Optimización del rendimiento

Los videojuegos suelen ser aplicaciones software que tratan de exprimir al máximo las posibilidades audiovisuales y de computación del hardware. Desde ese punto de vista todo esfuerzo para buscar el rendimiento óptimo de estas aplicaciones tendrá su recompensa.

Código limpio

Algunos de los consejos que se dan a los programadores para realizar «código limpio» pueden perjudicar seriamente el rendimiento, por lo que conviene evitarlos en la práctica.

Paralelismo

Obviamente la manera más contundente de mejorar el rendimiento es recurrir al procesamiento paralelo vía hardware. Cuando esto no es posible, se puede recurrir a la concurrencia (varias tareas intercaladas, no simultaneadas). Cuando se habla de programación multihilo esto puede suponer que por debajo haya paralelismo o concurrencia, ya que los hilos (threads) son unidades de ejecución a nivel software que debe gestionar el sistema operativo (y que no son procesos independientes, porque comparten memoria). En videojuegos se habla a veces de fibras (fibers), que serían una especie de hilos más ligeros que es el propio motor del juego y no el sistema operativo el que debe gestionarlas, como se explica en esta famosa charla de Naughty Dog sobre The Last of Us Remastered hecha en la GDC 2015.

Optimizaciones

En algunos entornos de desarrollo existe la posibilidad de cachear la información precompilada de los materiales según juega el desarrollador, de manera que cuando el jugador pruebe el juego no note «tirones» (ej. el uso del PSO Caching en Unreal Engine 5.2).

Si la compilación de shaders puede causar congelaciones (hitching), el streaming de recursos puede introducir perturbaciones en el framerate (stutter) y la recolección de basura, una carga de datos o una IA costosa puede ser el origen de un pico en el tiempo de renderizado de un frame (spike).

A la hora de desarrollar, aunque hayamos «congelado» el desarrollo en una versión del motor siempre es posible irse al código fuente en C++ y escoger (cherry picking) las novedades que interesen… por ejemplo arreglos o mejoras en tecnologías recientes como Nanite y Lumen.

Más información

Se recomienda consultar estos documentos recomendados: