En los inicios del mundillo de los videojuegos no existía el concepto de motor de videojuegos (tambien conocido como engine) ni por asomo. En una época en la cual el software se desarrollaba pensando en un hardware muy específico y nada más, la idea de tener código reutilizable que permitiera desarrollar videojuegos de distinto género o para varias plataformas era casi impensable.

Sin embargo la tecnología cambió, las arquitecturas de esa tecnología cambiaron, y desarrollar código reutilizable se convirtió en una realidad. Debido a que muchos componentes que son muy necesarios en videojuegos realmente son comunes de un juego a otro , la idea de comercializar el código se hizo realidad, y en la actualidad tenemos engines comerciales como Unity3D o Unreal 4, los más famosos del momento, aunque la cosa no acaba ahí. Engines propietarios como Frostbite de EA o de código abierto como Godot se suman a la interminable lista de engines que uno puede encontrar en la actualidad en el mundillo de los videojuegos.

A pesar de que se puede hablar mucho de las diferencias entre los engines, y de las cualidades de cada uno, no es la intención de este artículo discutir sobre cual es el mejor, sino dar una idea de lo que un engine hace dentro de un videojuego.

Cuando uno piensa en un juego se le vienen a la cabeza tres cosas casi de manera inmediata: gráficos, sonido y controles. Y eso es una parte muy importante de lo que define a un engine, pero por detrás de lo visual hay muchas más tareas de las cuales un engine se hace cargo. Sin embargo, son tan buen sitio como cualquier otro para empezar.

Motor Gráfico

El motor gráfico es, en la actualidad, uno de los componentes a los que se dedica más cuidado en cada videojuego. El hecho de poder decir que X juego es el que mejores gráficos dispone hasta la fecha siempre es un aliciente para las ventas muy significativo. Y a pesar de que hay juegos que empujan a nuestros equipos al límite, poniendo nuestros ventiladores a toda mecha y nuestros corazones a 100, todos en el fondo hacen la misma labor de caballo, ponen los triángulos que les mandamos en la pantalla.

Desde el modelo 3D más complejo a la imagen plana más sencilla se renderizan a base de triángulos texturizados, y es la labor del motor gráfico calcular como los triángulos de los modelos que le mandamos se verán en la pantalla. Es por ello que ningún renderer funciona sin una buena librería de funciones matemáticas detrás. Además, el engine se encarga de la comunicación con las grandes API (interfaces de programación de aplicaciones) OpenGL y DirectX (y cuando salga, Vulkan), de encapsularlas y facilitar al programador su uso.

El motor gráfico también se encarga de procesar la iluminación y otros programas cortos que definen como se dibujan los objetos conocidos como shaders. A grandes rasgos se encarga de determinar las propiedades visuales de los objetos de la escena, es decir, como interactua la luz con la superficie de cada objeto, resolviendo una ecuación global conocida como la ecuación de renderizado (rendering equation o shading equation).

El motor gráfico se encarga de muchas cosas, más de la que me puedo aventurar a redactar aquí, y mediante los lenguajes de shading ofrece a los desarrolladores muchas posibilidades en cuanto a estilo, iluminación, etc… permitiendo llegar a prometer maravillas como esta en tiempo real (gracias a EA y su puntero Frostbite).

Para los curiosos, un motor gráfico Open Source bastante conocido es OGRE(aun definido como sus creadores como motor de renderizado, es decir, para obtención de imagenes pero no en tiempo real, es posible trasladar su uso al de motor de videojuegos), bastante bien documentado para aquellos que tengan las ganas de meterse en los entresijos de como funcionan los gráficos 3D.

Motor de Audio

No hay que subestimar la importancia del audio en un videojuego. Que serían, por ejemplo, los juegos de terror sin los sonidos al límite de nuestra audición, pistas de nuestro terrorífico enemigo aproximándose o de la respiración rasgada de nuestro personaje mientras huye de su destino. El audio es ese amigo al que no siempre se tiene en cuenta, pero que se nota su ausencia cuando falla.

Un motor de audio tiene la tarea de gestionar los archivos de sonido que le manda el juego, pero no solo eso. En juegos 3D es necesario ajustar como se reproduce el audio para saber la procedencia de cada sonido y también hacer cálculos sobre como funcionará la propagación del sonido en el entorno del juego. Una vez determinados, mediante las librerías asociadas a este engine, se calcula la intensidad con la que cada sonido se reproducirá en cada uno de los componentes de nuestro equipo de audio (ya sean unos cascos normales y corrientes o un equipo DOLBY 5.1). En cualquier caso, un engine de audio no tiene tanta carga de trabajo como el motor gráfico, pero hace un trabajo de relevancia.

Dispositivos de interfaz humano

Esta parte del código de un motor de videojuegos se encarga de facilitar la comunicacion entre el hardware que tengamos a nuestra disposición y el videojuego. Generalmente, cuando pulsemos una tecla de nuestro teclado o un botón de nuestro controlador queremos que el juego reaccione tal y como le ordenamos, y los diseñadores quieren lo mismo sin tener que preocuparse del funcionamiento interno de cada pieza de hardware que se va a usar como interfaz. De esta manera mediante las librerías de control que ofrecen los engines permiten comunicarse con estos dispositivos de una manera encapsulada, pero ofreciendo al desarrollador la libertad de como definir sus controles. Esta parte del engine no suele ser la que mas atención recibe, pero es elemental para cualquier juego.

Estos tres componentes son los primeros con los que uno entra en contacto cuando juega a un videojuego, y son los mas importantes para el jugador. Sin embargo, para el desarrollador hay otros componentes que cobran importancia también mucha importancia.

Sistema de Archivos

Todo engine necesita un sistema de archivos. Queremos ser capaces de importar y utilizar los recursos que hemos creado con facilidad y sin que ocupen demasiado espacio. Mallas 3D, archivos de sonido, imágenes de alta resolución… La naturaleza de los videojuegos es multimedia y nuestro engine tiene que ser capaz de manejarla. ¿Porque no usar, sin embargo, el sistema de archivos del propio ordenador, consola, tostadora…? Hay cualidades requeridas en determinados videojuegos que no ofrecen los sistemas de archivos estándar, como por ejemplo cargar datos usando streaming, es decir mientras el juego está funcionando, sin necesidad de una pantalla de carga, o a acceder a sistemas de archivos en linea. También crear un sistema de archivos propio facilita el uso del engine en distintas plataformas, algo casi esencial para los engines comerciales mas extendidos.

Así pues, un sistema de archivos poderoso acompañado de un buen gestor de recursos puede convertir un engine lento y engorroso en una maravilla fluida.

Dinámica del sólido rígido, animación y librerías físicas

Casi cualquier motor de videojuegos actual aplica las leyes físicas de los sólidos rígidos a la hora de definir los movimientos de sus personajes o de evitar cosas que a priori parecen tan evidentes como que un personaje atraviese el suelo del escenario. Sin embargo el disponer de una buena librerá de física permite ir mas allá. Entorno fragil de manera realista, puzzles complejos, cálculo de impactos de bala, simulaciones de tejidos, propagación de audio, simulaciones de líquidos… En resumen, incorporar una buena librería permite a cualquier engine ir mucha más allá.

Entre las librerías disponibles en la actualidad, Havok representa el estándar de calidad, aunque es un producto de pago no precisamente barato.

Estas librerías se pueden usar para obtener animaciones más realistas , aunque generalmente se incorporaran al sistemas de animación que soportan técnicas más tradicionales y comunes en el mundillo como la skinned animation (el modelo actúa como una piel y el animador define un esqueleto que la desplaza), practicamente una necesidad en todo engine 3D actual.

Herramientas de desarrollo

Por último pero por ello no menos importante están la herramientas de desarrollo. Un buen engine sin unas herramientas de desarrollo no deja de ser un montón de código , código debuggeado y mantenido por profesionales y que el desarrollador se ahorra escribir, pero código al fin y al cabo. Siendo sinceros, una interfaz gráfica bonita y sencilla junto con herramientas de importación y construcción de escenarios fáciles de usar hacen maravillas.

Interfaz de la herramienta de desarrollo de Unity 3D

Interfaz de la herramienta de desarrollo de Unity 3D

Si todas las tareas que en la actualidad se hacen a través de interfaces gráficos se hiciesen a través de consola y código, la cantidad de errores cometidos sería tremenda. Las interfaces gráficas nos hacen la vida mas fácil y permiten a gente menos formada técnicamente, como artistas, animadores o diseñadores utilizar el engine y trabajar sobre él, ayudando a que más gente se involucre en el desarrollo.

Eso es, a grandes rasgos, lo que en la actualidad ofrecen los engines de videojuegos, ayudando a estudios que no tienen ni el tiempo ni los recursos para desarrollar su propio engine a sacar adelante sus proyectos. Espero que esta mini-introducción a que hacen los engines de videojuegos haya servido para saciar la curiosidad de algunos y para despertar curiosidad en otros, porque en el mundo siempre creciente de los videojuegos, la base de todo son los engines y sus siempre crecientes capacidades.