#3 - El comienzo de un sistema generativo: Quantum Engine

Quantum Engine: el sistema generativo creado para el videojuego Avademia.

El comienzo de un sistema generativo: Quantum Engine

O como evitar la monotonía haciendo simple lo complejo.

Al comienzo del proyecto, cuando estaba diseñando la estructura de alto nivel del juego, la complejidad comenzó a aumentar a tal nivel que en mi interior surgió la idea de explorar alternativas.

¿Y si utilizaba algún método procedural o generativo para desarrollar algún elemento?

Esta idea me gustó porque además daba cierta respuesta a mi obsesión por mantener el interés y la novedad del jugador durante toda la partida. Y, sobre todo, si se jugaban varias partidas. Ten en cuenta que concebí Avademia como una herramienta útil para toda la ESO. Es decir, conseguir que se utilice durante esos cuatro años es todo un reto adicional al propio de construir un juego atractivo.

Y así, sin más, decidí probar el método en la generación del mapa. Bueno de cada mapa. Cada partida. Cada inicio de partida se genera un mapa diferente. Aquí puedes ver unos cuantos.

Quantum Engine generando mapa 1.
Quantum Engine generando mapa 2.
Quantum Engine generando mapa 3

No te dejes engañar por la foto. Esos mapas suponen unos dos kilómetros cuadrados donde es fácil ¡perderse!

La naturaleza de los elementos son los mismos. Pero su distribución y número es diferente. A partir de esta base conceptual, hay mucha matemática detrás para combinarlos. Y un montón de decisiones. Y cada resultado debe ser coherente con la narrativa.

Voy a contarte algunas cosas sobre este generador de mapas que he llamado Quantum Engine

Tema 1. Procedural vs Generativo.

Me gusta llamarlo generativo, aunque tiene elementos procedurales.

¿Por qué considero que es más generativo que procedural?

Lo he comentado con algunas personas y así es como yo lo veo.

Procedural: con la misma semilla, aplicando las mismas reglas genera exactamente el mismo mapa.

Generativo: con la misma semilla, aplicando las mismas reglas genera un mapa distinto e impredecible cada vez.

El motor que hemos creado, aplicando las mismas reglas sobre una misma semilla, generaría un mapa diferente. La realidad es que aún siendo así, cuando lo creamos, no reutilizamos la misma semilla porque nos resultaba más cómodo utilizar una diferente cada vez.

Por eso digo que es generativo, aunque hay algunas partes dentro del proceso, que aisladas serían procedurales.

Dicho esto, lo importante no es esta disquisición sino el resultado.

Tema 2. Los elementos.

El generador utiliza cuatro categorías de elementos: árboles, arbustos, follaje y rocas. Dentro de cada uno de ellos hay varias elementos diferentes. Es decir, hay varios tipos de árboles, de arbustos, de follaje y de roca. 

En la versión actual hemos implementado tres biomas: bosque, selva y pradera. Estos biomas se corresponden con una región climática templada. Hemos asociado a cada bioma un subconjunto de árboles y arbustos.

Este sería el bioma selva por la noche.

Bioma selva. Vista nocturna.

Y éste un detalle de árboles del bosque.

Detalle de arboles en el bosque.

Tema 3. El sistema.

Quería cumplir con varios objetivos. El primero era la armonía. No quería colocar los elementos de forma aleatoria, aunque a primera vista pueda parecerlo. 

El segundo una estructura que estuviese al servicio de la narrativa. Una estructura matemática.

Y la respuesta la encontré en las propias matemáticas.

Primero. Se determina la proporción de superficie que se quiere de cada bioma. Actualmente es fija, pero el sistema está preparado para que el usuario pueda elegir dicha proporción en un futuro.

Segundo. Se generan espirales áureas de un tipo de bioma hasta alcanzar la superficie del punto anterior. Estoy simplificando la explicación. Hay idas y venidas (el algoritmo hace y deshace) aproximativas hasta optimizar una distribución muy cercana a la proporción definida en el punto anterior.

Tercero. Se definen puntos focales de interés dentro de cada espiral. Cada punto focal dentro de una misma espiral sigue la sucesión de Fibonacci en cuanto al número de elementos que forman parte del grupo que allí se genere.

Cuarto. Para poblar la superficie, se establece una densidad de mayor a menor comenzando desde el origen de la espiral.

Cinco. Con ese valor de densidad se van generando grupos de elementos idénticos (p.e. mismo árbol) con diferentes edades/tamaños. El número de elementos es un número de la sucesión de Fibonacci. Para estos grupos solo se seleccionan elementos asociados a ese bioma.

Seis. En los puntos focales, los grupos son diferentes. Son puntos de biodiversidad y siempre están formados por elementos distintos. Si hay dos árboles serán diferentes árboles. Aquí se combinan árboles, arbustos y rocas.

El único elemento que no sigue ninguna regla generativa ni procedural es el follaje. Hay dos tipos de follaje, y utilizamos el sistema de Unreal para asociar cada uno según el relieve y altura del terreno.

Gracias a este entramado, el juego es capaz de generar, hipotéticamente, infinitos mapas sin repetirse.

Y no solo eso, sino que, incluyendo nuevos elementos florales, podemos sin esfuerzo, generar otros tipos de biomas y combinarlos con los que existen.

Los beneficios no son solo a nivel de cada partida. ¡También lo utilizaremos para generar los mapas de los siguientes niveles! ¡Y los mapas de nuevas temporadas! 

Nos vemos el viernes que viene.

Y recuerda.

Si consideras que lo que te he contado está alineado contigo, tienes tres formas de estar involucrado:

1. Seguir apuntado a esta Bitácora. Te doy las gracias por adelantado.

2. Compartir nuestro proyecto con todo aquel que consideres que le pueda interesar

3. Unirte como fundador al programa Quantum Architects. 100 fundadores con beneficios especiales. Puedes solicitarlo en www.avadlf.com.

La semana próxima más.