Motor de juego 5

Motor de juego

Cuando se va a crear un videojuego, sea cual sea la temática elegida, debemos tener en cuenta que se compone de varios objetos informáticos. Para empezar, un juego se produce en un escenario que puede ser en dos o tres dimensiones (2D o 3D). También cuenta con un personaje al que el jugador controlará, ya sea en primera persona, desde una cámara cenital o subido a un vehículo. También se han de definir una serie de objetos con los que el objeto principal interactuará.

Para definir todo este tipo de objetos y como han de comportarse a lo largo del juego debemos generar código por cada elemento. En el inicio de la industria del juego, cada compañía generaba sus propios códigos. Pero según los juego iban siendo más complejos se hizo patente la necesidad de reutilizar código.

Por esta razón se creo bajo capas de abstracción, un sistema por cada grupo de elementos de un juego y todo el conjunto se denominó motor de juego. Estos motores de juego están compuestos por una serie de módulos que gestionan la evolución del juego, como el motor de física o el renderizado de imágenes, y otros módulos dedicados a la optimización y ejecución del juego, así como la interacción con el hardware. Muchos de los módulos son reutilizables para todos los tipos de juego. Un módulo que recoge los eventos de teclado y ratón o del mando de la consola se puede aplicar a todos los juegos. Otros módulos son adaptables, como el de renderizado, que serán por ejemplo más eficaces en el pintado de escenarios para un juego de tiradores en primera persona (FPS (First person shooter)) que en uno de conducción de coches.

Esquema de las capas del motor de juego. (libro: Desarrollo de videojuegos. Arquitectura del motor de videojuegos.)
Esquema de las capas del motor de juego. (libro: Desarrollo de videojuegos. Arquitectura del motor de videojuegos.)

Los módulos más reutilizables y que forma el núcleo de los motores de juego son:

  • Motor de física: Para dar realismo al juego, los objetos 2D y 3D han de ser capaces de reconocerse entre ellos e interacionar. Para que sean capaces de hacerlo, se les envuelve en una cascara y se comprueba si las cascaras se chocan. El núcleo de este motor de física es por lo tanto el módulo de colisiones. Este módulo detecta las colisiones entre los objetos, calcula el punto de intersección y gestiona la respuesta de los objetos a dicha colisión.
  • Motor de renderizado: Es el encargado de «pintar» los objetos ya sean planos en 2D o sobre mayas de 3D. Tanto si son objetos simples como si tienen capas de texturas y/o materiales para dar más realismo, el motor de render es el encargado de gestionar los recursos visuales del juego e ir colocando en la escena las imágenes. Tiene una arquitectura de varias capas que se encargan de comunicarse con el interface gráfico (DirectX, OpenGl, etc.), componer y optimizar una escena o generar los efectos visuales.
    Para conseguir una ejecución de juego óptima el renderizado debe de ser tal que cumpla con el requisito de frames por segundo (fps) o número de «fotogramas» por segundo necesarios para crear la sensación de movimiento (30 fps para un juego normal y 60 para uno de alta calidad). El pintado de cada frame dependerá del peso de las imágenes y los modelos de cada escena y de la optimización aplicada.
  • Audio: El sonido ambiente es una pieza importante para crear la sensación de realidad. Al envolver al jugador con efectos sonoros se consigue que este se implique más con el juego. Este módulo gestiona los recursos sonoros.
  • Networking: En la actualidad, la gran mayoría, si no todos los juegos, poseen un modo multijugador que permite al usuario jugar contra oponentes de todo el mundo por internet. El modo de juego es similar al modo monojugador pero hay que coordinar las posiciones y movimientos de todos los jugadores. Para conseguirlo este módulo se encarga de transmitir y recibir los datos de los jugadores en red.
  • Interfaces: Es el encargado de gestionar los eventos de entrada (ratón, teclado, etc.) y de salida (vibración del mano, etc). Es independiente de la plataforma, solo gestiona datos que transmite a las capas de drivers, hardware y sistema operativo que si que son específicas de las plataformas.

Todos estos módulos se encuentran en la misma capa de abstracción solo por debajo de los sistemas propios del juego y por encima del resto de capas independientes del juego y relacionadas con la gestión y manejo de recursos y hardware más específicas.

Dentro de los sistemas propios encontramos los códigos que definen el juego y sus reglas, así como la interacción entre objetos y la definición del personaje. Suelen estar compuestos por scripts basados en la programación orientada a objetos. También puede encontrarse un módulo de inteligencia artificial (IA) para controlar el resto de componentes.

Del las otras capas cabe destacar la capa relacionada con los SDK (Software Development Kits) y los middlewares. Esta capa es muy importante en el desarrollo de juegos y va ligada más a la plataforma que se va a utilizar que al juego en sí. Está formada por las bibliotecas o librerías sobre las que se sustentará el código del juego. Desde la librería estándar STL (Standard Template Library), para el uso listas de objetos, hasta otras más complejas como DirectX u OpenGL para la gestión de imágenes y objetos 3D.

El resto de bibliotecas que necesitará el juego para ejecutar el código, como la biblioteca matemática, la encargada de gestionar la memoria, etc. se engloban en la capa de subsistemas principales. La capa independiente de la plataforma es la encargada de permitir la ejecución del juego en diferentes plataformas independientemente de las bibliotecas utilizadas.

La capa de gestor de recursos es la encargada de acceder a los datos del juego mediante lectura y escritura en disco. Partidas guardadas, inventarios, etc. Estos recursos se guardan en las memorias y evolucionan con el juego. También almacena y gestiona los componentes de las escenas y los datos de los modelos 3D.

Los motores de juego, suelen estar codificados en C/C++ pues es un lenguaje común, independiente de plataforma, con una gran cantidad de recursos y un tiempo de compilación/ejecución bastante rápido al no necesitar plataformas de conexión como la máquina virtual de Java.

Pantalla del videojuego Doom.
Pantalla del videojuego Doom.

El primer motor de juego fue el creado para el famoso juego Doom de id Software. Bajo la dirección de John Carmack, la compañía monto el primer sistema modular y reutilizable para la gestión y ejecución de un juego. El resultado fue un cambio radical en el sector, creando un mundo hiperrealista, dinámico y con modelos 3D. Desde entonces la industria del juego ha evolucionado enormemente y los motores de juego han crecido tanto que cada módulo por separado requiere un gran número de líneas de código. Por esa razón, las compañías dedicadas al sector ponen a disposición de los programadores motores de juego completos o versiones reducidas y libres para que otras empresas o creadores independientes puedan realizar juegos y que así no estanque el sector.

En la actualidad existen varias compañías con motores de juego completo que tienen paquetes para usuarios independientes. Los más famosos y completos son Unreal EngineCryEngine o Unity, pero hay una amplia gama. Cada motor tiene sus características. Por ejemplo, Unity tiene un interfaz amigable y una buena curva de aprendizaje pero Unreal y CryEngine son mucho más potentes y por lo tanto más complicados. Los desarrolladores pueden descargarse las versiones libres, que según cual sea puede estar más o menos completas, o comprar las versiones oficiales por un precio cerrado o un porcentaje de los beneficios del juego que se desarrolle.




Referencias:

  • Desarrollo de videojuegos. Arquitectura del motor de videojuegos.- D. Vallejo Fernández y C. Martín Angelina. Escuela Superior de Informática.




Comparativas de motores:


Deja un comentario

5 ideas sobre “Motor de juego