La generación procedural o procedimental ha sido últimamente una palabra utilizada por muchos estudios como una panacea novedosa, surgida de las entrañas más profundas de la innovación técnica para traer a tus juegos el contenido más revolucionario. Sin embargo no hay nada a la vez tan cerca y más lejos de la realidad, pues la generación procedural lleva ya algún tiempo a nuestro alrededor ayudando a los desarrolladores a ofrecer contenidos siempre cambiantes.

¿En que consiste exactamente la generación procedural? Como definición genérica y bastante inexacta, se puede considerar como procedural todo aquel contenido generado mediante algoritmos en lugar de procedimientos manuales. Este proceso tiene tanto sus ventajas como sus inconvenientes, e invariablemente lleva a la palabra que todo el mundo espera oír en cuanto a lo que se refiere a procedural: aleatorio.

Y es que queda claro que la aleatoriedad que ofrece la generación procedural es uno de sus principales atractivos, si no el mas importante de todos, a la hora de implementar este tipo de algoritmos. Permite crear una variedad inalcanzable para métodos convencionales, añadir rejugabilidad y en algunos géneros incluso estas técnicas se han vuelto indispensables para cualquier juego que se precie . Ejemplos muy típicos de ésto son los mapas aleatorios que algunos juegos de estrategia o de rol presentaban ya hace unos cuantos años, como es el caso del generador de mapas aleatorios del juego Heroes of Might and Magic III (HoMM3), publicado en 1999.

Mapa generado aleatoriamente por el algoritmo del juego Heroes of Might and Magic III

Mapa generado aleatoriamente por el algoritmo del juego Heroes of Might and Magic III

Es cierto que este algoritmo ofrece partidas con ilimitadas sorpresas y descubrimientos, pero no estaba exento de fallos ni mucho menos. En muchas ocasiones el algoritmo dejaría aislado a jugadores o ciudades neutrales mediante obstáculos impasables, lo cual, además de no ser fácil de detectar a priori, en caso de que se diera, casi con toda seguridad podía arruinar una partida que llevara varias horas en curso al imposibilitar la victoria de ningún jugador.

Crear un algoritmo que genere un mapa como el que requiere un juego como el HoMM3 es un proceso complejo. Debe ofrecer puntos de interés para todos los jugadores, siempre una ruta de contacto entre ellos, estar equilibrado de manera que un jugador no obtenga una ventaja injusta frente a los demás y los enemigos presentes en el mapa deberán estar nivelados para así permitir a los jugadores progresar turno tras turno. No es de extrañar que no muchos juegos implementen este tipo de mapas, pues requieren un cuidado especial.

Un juego conocido por la generación procedural de sus mapas fue el Spelunky. Su creador, Derek Yu, logró hacer un sistema de generación procedural de mapas muy sencillo que aseguraba que el juego siempre pudiera ganarse y a la vez que no fuera demasiado sencillo y nunca igual, resultando en un juego muy adictivo. Una muy buena explicación de como funciona el algoritmo de Yu nos la proporcionan nuestros amigos de El Pixel Ilustre en este artículo.

La aplicación de estos algoritmos puede extenderse hasta niveles obsesivos, como es el caso del Dwarf Fortress, muy reconocible pos sus gráficos ASCII y por su gran complejidad. En la generación de mundos que los chicos de 12 Games crearon, no solo se generan de manera aleatoria montañas y rios, bosques e islas, si no que se generan leyendas y mitos del mundo, civilizaciones, vida salvaje, biomas, etc. Cada partida es un mundo nuevo, con todo lo que ello implica.

Mapa generado aleatoriamente en Dwarf Fortress

Mapa generado aleatoriamente en el juego Dwarf Fortress

Sin embargo, no todo lo procedural está basado en la aleatoriedad. David Rosen, creador de la Humble Store y la iniciativa Humble Bundle, que además es desarrollador Indie y dueño del estudio Wolfire Games, hizo una ponencia interesante en la GDC (Game Developers Conference). Siendo parte de un equipo muy pequeño (él mismo como programador y animador, y un artista) que tenía una meta bastante grande (levantar un motor de videojuegos y todo el contenido del juego desde cero), necesitaba abstraer la mayor cantidad de trabajo posible de su ya de por si enorme pila, por lo cual recurrió a métodos de animación procedural. A fin de no alargar el articulo demasiado, este link lleva a la ponencia de Rosen, la cual en resumidas cuentas habla de como David utilizó técnicas de interpolación muy bien cuidadas entre unos pocos keyframes (posturas del personaje) para conseguir unas animaciones fluidas a la vez que mantenía un control absoluto sobre los movimientos del personaje.

David Rosen demuestra en la GDC como utiliza la interpolación lineal entre 2 keyframes para realizar el movimiento de un personaje en el juego Overgrowth

David Rosen demuestra en la GDC como utiliza la interpolación lineal entre 2 keyframes para realizar el movimiento de un personaje en el juego Overgrowth

Otros juegos se han visto forzados a recurrir a técnicas de animación procedurales por necesidades mas inherentes al propio juego que la falta de tiempo de Rosen (que lleva ya desde 2009 desarrollando Overgrowth y sigue en Alpha a dia de hoy). En concreto el juego Spore daba lugar a un dilema mayor, pues la inmensa mayoría del contenido, las criaturas, se iba a crear después de la salida del juego, por parte de los propios jugadores, y los creadores debían anticipar y crear un sistema que hiciera que las criaturas parecieran vivas sin conocer exactamente la estructura del cuerpo.

En este GIF obtenido de  la página chrishecker.com  demuestra la gran variedad de criaturas que Spore permite Crear

En este GIF obtenido de la página chrishecker.com demuestra la gran variedad de criaturas que Spore permite crear, con sus diferentes estructuras y esqueletos

El proceso que utilizaron no fue nada intuitivo, intentando extrapolar las animaciones que hacían para un solo personaje a miles de personajes mediante software, con estructuras totalmente diferentes y reduciendo el número de fallos junto con la gravedad de éstos.

Otro ejemplo de generación procedural que no implica aleatoriedad necesariamente, y que además es una de las demos técnicas mas sorprendentes de los ultimos años, es el juego .kkrieger, un first person shooter contenido en la ridícula cantidad de 96KB. Para hacerse una idea de lo poco que es eso, si cogemos un antiguo floppy disk(un disquete de los de toda la vida) podriamos meter 3 veces este juego y nos sobraría espacio. En cambio los gráficos que tiene son 3D y no se ven para nada mal.

Imagen del juego .kkrieger

Imagen del juego .kkrieger

Las texturas del juego, por ejemplo, no se guardan en forma de imágenes, si no que se guarda su historial de creación y luego en tiempo de carga se genera la textura. Los demás objetos del juego, como armas o los enemigos que se ven en la imagen anterior son formas básicas como cilindros y cubos que se deforman y colocan para crear las figura. Por último, para rizar el rizo, la música se produce en tiempo real usando un sintetizador conocido como V2 al cual se le introduce un flujo constante de datos MIDI. Todo ello combinado agrupa todas las necesidades del juego en la ya anteriormente comentada miserable cantidad.

Como comentaba al principio del artículo, las técnicas procedurales no son nada nuevo y, a pesar de que requieren un gran esfuerzo, tienden a compensar si son aplicadas correctamente. Y si bien es cierto que ahora todos los estudios quieren subirse al carro de la generación procedural, hay un estudio, Hello Games, que si que verdaderamente va a la cabeza aplicando las técnicas de generación procedural y si que merece decir, con orgullo, que su juego utiliza generación procedural. Estoy hablando del No Man´s Sky, que cogiendo las buenas cualidades del Spore y el Dwarf Fortress ha generado un universo con millones de planetas con fauna, flora y clima propios, característicos y realistas.

Fauna y flora generada proceduralmente en un planeta en No Man´s Sky

Fauna y flora generada proceduralmente en un planeta en No Man´s Sky

Va a ser dificil, pero es necesario no ser victimas de la palabra de moda y saber apreciar donde hay verdaderos esfuerzos útiles y necesarios. Spore requería métodos procedurales para poder animar y crear sus criaturas, Spelunky métodos de creación de mapas para mantenerse interesante y No Man’s Sky busca ofrecer un universo completo en el que el jugador pueda perderse, lo cual no puede ser creado a mano sin invertir una cantidad obscena de tiempo o de recursos. Ahí las tecnicas de generación procedural se vuelven imprescindibles, y no solo un truco publicitario.

Y vosotros, ¿que pensáis de la generación procedural?