La opinión de
utad

Javier San Juan Cervera (U-tad): ¿Motores de juego o programación de base?

U-tad Diarios de Desarrollo Coven Arts Javier San Juan

El desarrollo de videojuegos es un campo complejo. Bajo la gestión de un productor, un grupo de programadores, artistas, diseñadores y expertos en otras áreas, trabajan durante meses (o años) en un mismo producto utilizando herramientas muy diversas. La interoperabilidad entre este equipo y la integración entre dichas herramientas es fundamental para que el desarrollo llegue a buen puerto. Se trata de un proceso iterativo, en el que a menudo debemos dar marcha atrás y abordar algún aspecto del proyecto desde una perspectiva diferente. Una vez desarrollada la idea inicial del juego, el grupo de diseñadores generará la documentación suficiente para que se pueda desarrollar un prototipo. Se implementará, en un tiempo muy breve, una versión arcaica de nuestro juego que, sin embargo, permitirá corroborar si la idea planteada inicialmente tiene potencial o no. Para ello, tendremos que jugar con distintos parámetros y opciones hasta que estemos satisfechos con la base sobre la que ponernos a trabajar.

Podríamos pensar en el prototipo como el boceto que un artista hace de su obra antes de empezar a trabajar en la versión final. Tras esto, se empieza una etapa de producción que culmina en la versión acabada y lista para salir al mercado de nuestro juego. En esta etapa, los artistas trabajarán con distintas herramientas para producir arte conceptual, texturas, elementos de interfaz, modelos, animaciones y, en definitiva, todo lo que el jugador verá. Los programadores utilizarán un entorno de desarrollo en el que poder escribir el programa que haga funcionar las mecánicas que los diseñadores hayan definido (y comprobar que estén libres de errores), y estos últimos tendrán que poder modificar los valores que definen los comportamientos del juego y probar varias opciones (es lo que se llama el balanceo del juego). Este proceso se repite una y otra vez hasta que llegamos al resultado final.

Para integrar el trabajo que realiza cada una de las áreas del equipo de desarrollo, se utiliza una herramienta llamada motor de juego. Este motor permite a los diseñadores integrar los modelos creados por los artistas en una escena, definir los comportamientos implementados por los programadores para cada uno de ellos, y modificar los valores que rigen el funcionamiento de cada uno de estos comportamientos. Existen múltiples motores de juegos, desde algunos orientados al trabajo de pequeños estudios (o desarrolladores individuales), hasta aquellos pensados para la integración del trabajo de un equipo formado por cientos de personas.

Cuando se diseña el programa de estudios de un título de posgrado de programación de videojuegos, has de enfrentarte al problema de tener que adoptar un determinado enfoque: o dedicas el año a enseñar a los programadores el uso de uno de estos motores, permitiendo profundizar en los aspectos avanzados del mismo, o bien abordas la enseñanza de los fundamentos de la programación de videojuegos que han permanecido inmutables a lo largo de los años (y que no tienen visos de cambiar).

U-tad Diarios de Desarrollo Javier San Juan
Los alumnos del Master en Programación de Videojuegos de U-tad aprenden los conocimientos para no depender de un motor específico.

El primer enfoque es de un claro pragmatismo: tan sólo hay que buscar el dominio de qué motores se solicita en las ofertas de empleo actuales, y desarrollar un plan de estudios acorde. En esta situación, encontramos de entrada un inconveniente: si se prepara al alumno en el uso del motor más utilizado en la actualidad, se da una formación demasiado específica que creará una barrera de cara a adoptar una nueva tecnología cuando ésta se presente. Aunque a rasgos generales la mayor parte de estos motores de juego comparten los mismos conceptos en sus bases, cada uno crea sus propias rutinas de trabajo respecto a cómo implementar aspectos concretos. Cuando adoptamos una nueva tecnología, debemos aprender sus nuevas mecánicas de trabajo, y tareas tan simples como mover un objeto en una determinada dirección se pueden abordar de distintas maneras (por ejemplo, utilizando vectores, matrices o cuaterniones). Por otro lado, se obvia un área de conocimiento muy importante de la programación de videojuegos, que es la de la introducción en los conocimientos necesarios para ser capaz de implementar las propias tecnologías en las que se basa un motor, y éste es un perfil de programador muy importante en las ofertas de trabajo de grandes estudios.

El segundo enfoque plantea una clara ventaja en este aspecto: independientemente del motor que utilicemos para desarrollar nuestro juego, éste ha sido creado por programadores siguiendo siempre unas bases comunes: el renderizado de gráficos por computador se basa en los principios de la geometría proyectiva (una rama de las matemáticas que estudia ciertas propiedades de las figuras geométricas), la forma habitual de definir el funcionamiento de distintas entidades es mediante árboles de comportamiento, las transiciones entre animaciones suelen estar dirigidas por una máquina de estados, las propias animaciones se calculan aplicando una serie de interpolaciones de vectores y cuaterniones y unos cuantos productos de matrices... Quien aprende estos fundamentos, tiene los conocimientos de base que permiten abordar el aprendizaje de cualquier herramienta, reduciendo el proceso de transición hacia una nueva tecnología. Siempre existen barreras al trasladar nuestro entorno de desarrollo, pero la tarea se asemeja más a la de un novelista que comienza su siguiente obra en un procesador de texto diferente.

En U-tad, optamos por diseñar un enfoque orientado hacia este segundo modelo de aprendizaje, pero permitiendo obtener las ventajas del primero: los alumnos aprenden los fundamentos que manejan los programadores de videojuegos, partiendo por la enseñanza del lenguaje C++ (rey indiscutible en este sector), los principios matemáticos de la programación gráfica (aplicados actualmente en el programa docente a OpenGL), el estudio de la arquitectura de un videojuego, y distintos patrones de diseño de motores (como Entity-Component-System), hasta la implementación de sistemas de audio, físicas y multijugador en red.

En paralelo, los alumnos trabajan en el desarrollo de un proyecto final, común a los tres másteres que impartimos (Programación, Arte Visual y Game Design), donde el enfoque no está en la tecnología sino en el juego: es decir, los programadores no se centran en la implementación del motor, sino en el desarrollo de un videojuego utilizando un motor de juego existente (Unity en el caso del prototipo inicial; Unreal Engine 4 para la versión final). De esta forma, obtienen unos fuertes conocimientos de base sobre las tareas que a día de hoy siguen siendo campo exclusivo de los programadores (la generación de herramientas y motores de juego), y por otro aprenden a desenvolverse en el uso de un motor concreto recibiendo tan sólo una pequeña formación que les permita ponerse en marcha, pero teniendo ellos que llevar a cabo el aprendizaje a la vez que trabajan en un proyecto real (de la misma forma que tendrían que hacerlo si se incorporan a un equipo de trabajo en un estudio de videojuegos).

Llevamos varios cursos mejorando este modelo y asumiendo nuevos retos de cara a los proyectos de nuestros alumnos, que año tras año se vuelven más ambiciosos. A la vista de los resultados obtenidos por el momento, al reconocimiento que los proyectos salidos de U-tad están teniendo en las ferias de videojuegos más importantes, y a las perspectivas laborales que se están abriendo para nuestros alumnos, podemos alegrarnos de estar trabajando en la dirección correcta. Y esta dirección nos lleva a un objetivo: la consolidación de este modelo como el más efectivo para labrar el futuro laboral de los estudiantes.