Crea mundos infinitos generando procedurales en Unity

Crea mundos infinitos generando procedurales en Unity. La generación procedural es un tema fascinante para explorar, ya que ofrece casi infinitas formas de jugar un juego o decorar una escena. También hace que la creación de contenido sea más fácil, ya que no tienes que crear meticulosamente cada detalle.

En el video tutorial de TNTC, aprenderás las diferencias entre la generación procedural y aleatoria, y cómo utilizar la aleatoriedad a tu favor en Unity. El narrador también demuestra cómo utilizar un enfoque paramétrico para generar una habitación procedural para un calabozo de fantasía, y muestra cómo renderizarlo utilizando la API «DrawMeshInstanced».

Con suerte, las técnicas del video te ayudarán a interesarte por la creación de contenido procedural o a comenzar a hacer tus propias escenas.

Crea mundos infinitos generando procedurales en Unity
Crea mundos infinitos generando procedurales en Unity

Generación procedural de contenido

En los últimos meses, hemos estado profundizando en el mundo de la generación procedural de contenido y experimentando con diferentes técnicas para generar contenido para nuestros proyectos. Ha sido un viaje emocionante y hemos descubierto mucho sobre la generación procedural y cómo crear experiencias únicas e interesantes.

En este video, vamos a compartir lo que hemos aprendido sobre la generación procedural de contenido. Veremos cómo funciona y cómo utilizarlo para generar contenido en Unity. Así que siéntete cómodo, relájate y únete a nosotros en esta aventura de generación procedural de contenido.

El primer paso es entender qué significa la generación procedural. Al principio puede parecer aterrador o incluso mágico, y a menudo se confunde con la aleatoriedad. Pero la generación procedural no es aleatoria. Piénselo como un conjunto de reglas o algoritmos para generar automáticamente datos o contenido.

La diferencia clave entre la generación procedural y la generación aleatoria es que con la generación procedural, tenemos control sobre las reglas y podemos ajustarlas para producir tipos específicos de contenido.

Esto significa que, aunque los resultados pueden parecer impredecibles, en realidad son deterministas. En otras palabras, la aleatoriedad por sí sola no genera algo significativo, lo cual es algo que la generación procedural puede hacer. Para hacer un ejemplo, podemos pedirle a nuestro ordenador que genere una serie de números en los que cada número es la suma de los dos anteriores, también conocido como la serie de Fibonacci.

Enemigo con inteligencia artificial
Enemigo con inteligencia artificial

Fibonacci aplicado a la imagen

Bueno, esto es realmente básico, pero de hecho es un ejemplo de generación procedural, y hasta puedes hacer arte con eso. Intentemos con algo más visual. En Unity, hay un componente incorporado que es un ejemplo perfecto de generación procedural: el sistema de partículas.

Tienes un montón de módulos y puedes personalizarlos, sus reglas, para lograr muchos resultados diferentes. Cada pequeño cambio tiene un gran impacto en el efecto final. Por supuesto, seguir siendo determinista no significa que la generación procedural no pueda aprovechar la aleatoriedad, o pseudo-aleatoriedad para ser más precisos. De hecho, la aleatoriedad se utiliza mucho, impulsada por una semilla.

Imagina la función aleatoria como una caja negra que toma tus entradas y devuelve un valor arbitrario como salida. No puedes prever la salida porque no sabes lo que sucede dentro de ella. Sin embargo, hay una manera de hacerlo, porque hay una entrada secreta que determina el estado inicial de la secuencia aleatoria: la semilla.

La semilla es un valor que se proporciona a la función aleatoria, por lo general un número, que sirve como punto de partida para generar los valores. Si usas la misma semilla, obtendrás la misma secuencia de valores aleatorios cada vez, lo que es útil para crear una salida reproducible. Esto se debe a que la función aleatoria es en realidad un algoritmo determinista que utiliza una fórmula matemática para generar números aparentemente aleatorios en función de la semilla y otras variables internas de estado.

La salida parece aleatoria porque la fórmula está diseñada para ser muy sensible a los cambios en la semilla y otras entradas, por lo que incluso pequeñas diferencias en los valores de entrada darán lugar a secuencias de salida muy diferentes. En resumen, la semilla es lo que utilizamos para mantener nuestro resultado determinista.

Crea mundos infinitos utilizando la magia
Crea mundos infinitos utilizando la magia

Crea mundos infinitos generando utilizando la magia

Ahora bien, ¿cómo podemos utilizar la generación procedural para crear algo verdaderamente mágico? Estamos acostumbrados a ver muchos videojuegos que utilizan la generación procedural como una forma de crear un montón de contenido único e interesante. Hablando prácticamente, esto se puede lograr de muchas maneras.

Dividamos nuestro problema en dos partes: la generación de datos y la representación del contenido. La generación procedural se centra sólo en la generación de datos, y existen diversos algoritmos y técnicas disponibles para lograr esto. Todos ellos tienen muchos pros y contras, y desafortunadamente, no hay una forma sencilla de elegir uno entre los demás. ¿Cuál es mejor para nuestro escenario? Bueno, no es fácil responder a esa pregunta. Es fundamental familiarizarnos con tantas técnicas como sea posible y considerarlas como herramientas. Con la experiencia, aprenderemos a reconocer qué técnicas son las más adecuadas para nuestras necesidades específicas.

Por ejemplo: existe la generación de PCG basada en gramática, que es una técnica que utiliza una gramática para proporcionar un conjunto de reglas y símbolos que definen cómo debe estructurarse y generarse el contenido. Y se utiliza a menudo para generar edificios o ciudades. O existe L-Systems, que se utiliza mucho para generar plantas o árboles. (Un método para generar formas y patrones aplicando recursivamente reglas a una forma inicial.) O también, Colapso de la Función de Onda, Automata Celular, las diversas formas de funciones de Ruido, Distribuciones, Partición de Espacio Binario, y muchas más. Pero es posible encontrar una lista de las técnicas más utilizadas en cualquier lugar.

Creemos algo utilizando un enfoque paramétrico y representémoslo. Como sugiere el nombre, el enfoque paramétrico es básicamente la definición de un conjunto de parámetros que se pueden ajustar para producir diferentes resultados. Esto es lo que queremos generar, una sala procedural para una mazmorra de fantasía. La entrada que queremos especificar es sólo el tamaño de la habitación, y queremos que nuestro algoritmo cree los diseños de las paredes para nosotros. Nuestras paredes están compuestas de piezas más pequeñas, llamémoslas módulos.

La importancia de trabajar con módulos en Unity

Para agregar variación a nuestro caso básico, podemos introducir diferentes módulos y elegir entre ellos con algún tipo de regla. También podemos usar la aleatoriedad para liderar la elección, lo importante es recordar establecer el estado inicial aleatorio con una semilla.

Para pasar de una sola pared a una habitación, podemos simplemente repetir el procedimiento para las que faltan. Léase paredes, el suelo y todas las demás piezas que queramos añadir. Para llenar la sala, primero creamos un sistema de cuadrícula y asignamos a cada celda una etiqueta basada en su posición y su lado. Ahora ya tenemos las celdas internas y las celdas externas. Pero también, podemos discriminar las celdas norte, sur, este y oeste.

Para insertar accesorios, verificamos todas las posiciones disponibles en la cuadrícula y realizamos una probabilidad de verificación basada en la zona de la celda. Cada zona tenía un conjunto diferente de posibles objetos, y cada objeto tenía una posibilidad diferente de ser colocado y un tamaño específico. Una vez que se colocó un objeto, actualizamos la lista de celdas disponibles eliminando las ocupadas.


Hasta aquí esta guí para crear mundos infinitos generando procedurales en Unity, si te gusta el tema, no olvides pasarte por el canal del creador de estos videos, puedes verlo aquí.

No te pierdas las demás noticias sobre Unity aquí. En el foro puedes leer el artículo completo y los comentarios, también puedes dejar el tuyo, sigue leyendo…