Algoritmos para la creación de lluvia + río en terreno generado por procedimientos

52

Recientemente me han fascinado las cosas que se pueden hacer con el terreno procesal y he comenzado a experimentar un poco con la construcción del mundo. Me gustaría poder hacer mundos como la fortaleza enana con biomas creados a partir de la combinación de varios mapas.

Así que el primer paso ya está hecho. Usando el algoritmo de diamante cuadrado, he creado algunos buenos mapas de altura. El siguiente paso es que me gustaría agregar algunas características del agua y hacer que se generen de manera realista con la lluvia. He leído acerca de algunos enfoques diferentes, como comenzar en los puntos más altos del mapa y "bajar" al punto vecino más bajo, agruparse / erosionarse a medida que avanza hacia el nivel del mar.

¿Hay algún algoritmo documentado con esto o están más fuera del alcance?

Me encantaría cualquier consejo / pensamiento.

Picotear
fuente
He implementado partes y piezas del algoritmo descrito en este documento .
chaosTechnician

Respuestas:

39

Amit Patel, un usuario de este sitio, ha creado un recurso maravilloso de información sobre la generación mundial aleatoria que sin duda será de utilidad para usted.

Además, hay algunas excelentes preguntas / respuestas sobre la generación de procedimientos en este sitio.

Generación de carreteras / ríos en un mapa de cuadrícula 2D

Generación procesal mundial orientada a características de juego

¿Cómo puedo generar lagos y ríos al azar en mi juego?

Generación aleatoria de mapas

MichaelHouse
fuente
35

Cuando experimenté con este tipo de cosas (fines de la década de 1990), leí algunos documentos y libros para aprender sobre el flujo de agua, pero no llevé un registro de cuáles miraba. Terminé haciendo lo mío porque quería manejar la erosión. Quería que los ríos produjeran cañones y llanuras aluviales. Quería que los embalses de las presas se llenaran de sedimento. Quería que los ríos produjeran efectos como serpenteantes y lagos oxbow. Quería canales para riego y desviación de agua. Quería inundaciones para dañar granjas y casas en llanuras aluviales.

Mantuve algunas notas (enlaces) en la sección de Geografía de esta página . Hay un documento de Jos Stam que es una lectura obligada. Lamentablemente nunca organicé las notas. También desafortunadamente, el juego era para OS / 2, así que no puedo darte fácilmente un ejecutable ejecutable para jugar. Y también, desafortunadamente, mi código es terrible, pero si quieres echarle un vistazo, mira water.cpp en el código fuente (zip).

Cosas con las que jugué en mi simulación (no todas realistas):

  • Las áreas cercanas a los ríos tienen suelo húmedo; Las áreas alejadas de los ríos tienen suelo seco. La humedad afectó la vegetación. La vegetación ralentiza el flujo de agua.
  • La lluvia crea agua en todos los lugares, algunas veces. Luego fluye cuesta abajo. Luego se evapora y es absorbido por el suelo. La lluvia esculpe los canales del río.
  • Los manantiales crean agua todo el tiempo, pero solo en algunos lugares. Los manantiales mantienen los canales del río llenos. No simulé capas de roca o flujo de agua subterránea; Acabo de colocar resortes al azar en las montañas.
  • El agua que fluye tiene impulso. Si no recuerdo mal, esto era importante para hacer que los ríos serpentearan.
  • El agua en rápido movimiento recoge sedimentos; el movimiento lento del agua deposita sedimentos por delante. Esto esculpe los valles de los ríos.
  • Durante la creación inicial del mapa, aceleré el flujo de agua y la erosión; durante el juego funcionó a velocidad normal.

En general, mi experiencia fue que todo esto fue bastante divertido para jugar, pero se necesitaron muchas heurísticas y ajustes para que funcionara. Nunca llegué a un punto en el que podría decir que la creación del río se sintió natural e inevitable sin modificar. Fue tan divertido (tanto como programador como jugador) que pasé años en él y nunca terminé el resto del juego. :)

amitp
fuente
12
Simplemente diga su nombre y él llegará.
MichaelHouse
3
@ Byte56 Él es como el Candelero de stackexcha ...
DampeS8N
2
¡Me inspiraste para escribir una aplicación basada en tu artículo de cuadrícula hexagonal y ahora me inspiras de nuevo!
Adam Arold