Google
 

jueves, julio 27, 2006

Generador aleatorio de terrenos

Este algoritmo no tiene mucho misterio y es ampliamente usado en juegos como el Age of Empires.

Nos creamos un mapa de alturas. Hay varios algoritmos para esto: el ruido de Perlin es el más usado pero el algoritmo de crear colinas da también resultados bastante interesantes. Imaginemos que el mapa de alturas va desde el 0 como la altura más baja hasta el 255 como la más alta.

A cada rango de alturas le asignamos un tipo diferente de terreno. Por ejemplo:
- De 0 a 20 el mar profundo
- De 21 a 30 la costa
- De 31 a 34 la playa
- De 35 a 90 el terreno llano
- De 91 a 140 las colinas
- De 140 a 230 las montañas
- De 231 a 255 los picos nevados de las montañas

Podemos añadir ríos para hacer los mapas más interesantes. Una forma de poder hacerlo sería escoger un punto aleatorio en el mapa e ir trazando el río por el camino que te lleve cada vez a una altura más baja. Si al final llegamos al mar hemos acabado y si no es que estamos en un punto en el cual se debería crear un lago.

Y listo, así de sencillo. Lo único que nos quedará es hacer la conversión a un tile-map o a una malla en 3d pues éste algoritmo sirve tanto para juegos en 2d como en 3d. Normalmente en este punto se añaden unos arbolitos o unos arbustos a voleo en el mapa.

3 comentarios:

javi dijo...

A veces se suelen usar otro tipo de ruidos fractales diferentes a pelin, por ejemplo el multifractal qu permite tener zonas altas (montañas) y zonas bajas.

De cualquier forma no es tan simple como lo pintas, para que quede bien no basta con tener en cuenta la altura, etc.

samsaga2 dijo...

Reconozco que es una explicación un poco patatera pero es únicamente para hacerse una idea de como funciona.

El mapa de alturas se crea a gusto del consumidor yo sólo mostraba dos posibles formas de hacerlo.

tamat dijo...

Lo mejor es sin duda aplicar algoritmos de erosion/sedimentación a un ruido perlin, el resultado suele ser perfecto.

Os recomiendo el programa World Machine para hacer pruebas sobre generación de terrenos.