Iván Canosa (https://ivancanosa.net/ )

Introducción

meme_pcg_doesnotsimple

Procedural Content Generation(PCG) son técnicas para generar de forma algorítmica cualquier tipo de dato, ya sean terrenos, texturas, árboles, misiones un videojuego, etc. En los inicios de la era de los videojuegos era muy importante ya que permitía que los mundos fueran más grandes ocupando menos espacio en disco. Sin embargo, con la cantidad de gigabytes que disponemos hoy en día, esto ya no es una preocupación principal a menos que quieras generar planetas o galaxias como No Man’s Sky. Por el contrario, se tiende más a utilizarlo para generar contenido estético y/o jugable para ahorrar costes tanto en diseño como implementación del mismo, sobre todo en el ambiente indie. También, el hecho de que sea procedural se añade un valor especial al mismo haciendo que sea mucho más rejugable, ya que la técnica promete que siempre te vas a encontrar con niveles y mundos distintos hechos solo para ti.

Sin embargo, todo el mundo sabe que el contenido generado proceduralmente siempre va a ser peor que uno hecho específicamente por un diseñador. Además, personalmente, cuando estoy con un videojuego y me hago una idea general de las reglas que utiliza el sistema para generar el contenido, deja de ser mágico para mí y se vuelve una simple máquina que junta unas piezas para entretener al humano de turno. Es posible que uno de los mayores impacto en decepción que se haya visto ha sido con No Man’s Sky, pero, ¿por qué es esto?

Gameranx da una explicación a esto con un interesante punto de vista. En resumen, los mundos con PCG en general no tiene “alma”, y entiende por alma al hecho de que el jugador no se siente en inmersión con el contenido que es generado. Sin embargo, al ser algo subjetivo como la inmersión, hace que cada persona lo sienta de forma distinta. Este no es un problema solamente en PCG, también tienen que lidiar con ello los diseñadores de niveles, artistas y demás áreas, pero parece que solamente el PCG es el que más sufre en este aspecto. ¿Qué hace distinto a esas personas de un algoritmo? Claramente, para empezar el hecho de que son más versátiles y son entes pensantes. Además, tienen conocimiento sobre el contexto en el que será usado su trabajo y poseen cierto sentido artístico.

Claramente, las personas son superiores a un simple algoritmo de PCG y un jugador es capaz de diferenciar algo hecho por una máquina y algo manual. Siendo ese el caso, ¿no sería buena idea hacer que el PCG imite al humano? Normalmente, estos algortimos crean contenido en función de una reglas que el programador ha creído conveniente. En lugar de eso, es posible que sea mejor codificar las mismas reglas que disciernan un buen contenido de uno malo. O quizás, imitar la misma metodología que usa el humano. Por ejemplo, gamasutra analiza los niveles de The Legend of Zelda y extrae unas ciertas reglas parecen explicar la estructura de ese contenido. Si esas son las mismas reglas que parecen haber usado los diseñadores de esos niveles, nada nos impide codificarlo en forma de algoritmo. Bueno, en verdad sí: la complejidad. Si hay muchas reglas, algunas de ellas abstractas, ambiguas o que no siempre se apliquen, hace que su implementación sea difícil o imposible. Además, dependiendo del problema, es posible que las reglas den lugar a un problema NP-completo, lo que significa que si el contenido a generar es muy grande, el tiempo para resolverlo será muy grande (en algunos casos, milenios). Por lo tanto, para hacer mas fácil la implementación de este tipo de PCG necesitamos de un sistema capaz de codificar directamente las reglas sin preocuparnos de detalles de bajo nivel. Además, el sistema ha de ser eficiente, en el sentido que no tarde años en generar un simple nivel. Clingo es una posible herramienta que se podría usar por la flexibilidad que permite.

Sin embargo, PCG basado en reglas no siempre es la mejor solución. Dependiendo del problema y del tipo de contenido que queramos generar, será más adecuado un tipo de algoritmo u otro. Si nuestro objetivo es generar un terreno realista, aplicaremos simulaciones de placas tectónicas, erosión de la lluvia y demás procesos físicos. Por el contrario, si lo que queremos es generar terrenos que sean interesantes de explorar, necesitamos entender qué diferencia uno interesante de uno que no, saber algo de psicología humana y del sentimiento en específico que queremos transmitir. Por ejemplo, en Zelda Breath of The Wild usaron como diseño la “regla del triángulo”, insertando montañas en lugares estratégicos para que el jugador tenga que decidir su propio camino, entre otras muchas reglas.

En conclusión, una posible mejora que puede aplicarse en la industria con el PCG es intentar imitar el propio proceso y reglas que sigue el diseñador del contenido. Si son lo suficientemente simples puede intentarse programarse de forma artesanal, aunque es recomendable usar herramientas como Clingo sin son demasiado complejas. Existe un catálogo con todos los algoritmos existentes de PCG, de los cuales escribiré futuros artículos de los que me parezcan más interesantes.