Generación procedural: perlin noise

La generación procedural es un concepto muy habitual en los videojuegos que consiste en generar escenarios u otros recursos de forma aleatoria pero consistente. He estado diseñando un pequeño generador de mundos con esta técnica.

World generator

Algunos juegos como Minecraft usan esta técnica para generar sus mundos infinitos, así que voy a ahondar un poco en cómo funcionan estas técnicas y por qué el ruido tipo perlin es esencial para esta tarea.

Captura de Minecraft

Lo primero que necesitamos para generar proceduralmente es una función de ruido que nos permita generar valores aleatorios. Pero no todo el ruido es igual, es importante que este ruido parezca natural. En la siguiente imagen puedes ver ruido completamente aleatorio a la izquierda y un ruido tipo Perlin a la derecha.

Comparación de ruido aleatorio (izquierda) y ruido Perlin (derecha).

Aunque el ruido aleatorio tiene muchos usos, es demasiado rugoso como para parecer natural. Al observar la naturaleza, es fácil darse cuenta de que muchas cosas tienen un aspecto fractal. El ejemplo más común es la altura de las montañas. Estas tienen grandes variaciones en altura (las montañas), variaciones medianas (colinas), variaciones pequeñas (rocas), variaciones minúsculas (piedras)… y podríamos seguir. Este mismo fenómeno ocurre en muchos otros casos: las olas en el mar, las ramas de los árboles, los movimientos de las hormigas, los patrones del mármol…

Siempre se observa el mismo patrón de grandes y pequeñas variaciones. Ken Perlin se dió cuenta de este fenómeno y decidió crear una función de ruido que lo recreara. El ruido Perlin consiste en sumar una gran cantidad de funciones de ruido de diferentes escalas.

Octavas Perlin

Una función de ruido aleatorio no es más que una función que devuelve números aleatorios, que después son interpolados para hacer una función continua.

Interpolación de ruido

Ahora, al tomar varias de estas funciones, con varias frecuencias y amplitudes, y sumarlas, se obtiene ruido Perlin.

También se puede hacer lo mismo en 2 dimensiones, interpolando una función de ruido 2D. Así, se genera un mapa de alturas. En la imagen de abajo se muestra un mismo mapa coloreado de 4 formas distintas.

Ejemplo de coloreado de Perlin 2D (small)

Este mapa tiene muchas aplicaciones, como generar terrenos, mapas de calor, nubes o imágenes psicodélicas. Puedes saber más sobre perlin noise en la página de Hugo Elías, de donde he sacado un par de figuras. Y si te ha gustado, ¡ya puedes trastear!

Comentarios

Jorge Arias Reply
Que interesante esta el tema, me servira de ayuda y punto de inicio en el desarrollo de video juegos como hobby, muchas gracias por la info. ¡Saludos!

Deja un comentario

Recibir un mail

🍪 ¿Cookies?

Esta web usa cookies para identificar qué contenido es interesante y mejorar su calidad. Más información aquí.

4d8cd43bbbfbbd2b7aed08d9a2b0ef251cebfd3e2603b74b710a2d38b7f8ec39