Algoritmi per la creazione di precipitazioni + fiume in terreni generati proceduralmente


52

Di recente sono stato affascinato dalle cose che si possono fare con il terreno procedurale e ho iniziato a sperimentare un po 'la costruzione del mondo. Mi piacerebbe riuscire a rendere i mondi qualcosa come la fortezza nana con biomi creati dall'unione di varie mappe.

Quindi il primo passo è stato fatto. Usando l'algoritmo diamond-square ho creato delle belle hieghtmaps. Il prossimo passo è che vorrei aggiungere alcuni giochi d'acqua e generarli in qualche modo realisticamente con le precipitazioni. Ho letto di alcuni approcci diversi come iniziare dai punti più alti della mappa e "scendere" fino al punto più vicino più vicino, raggruppando / erodendo mentre scende fino al livello del mare.

Ci sono algoritmi documentati con questo o sono più fuori dal comune?

Mi piacerebbe qualsiasi consiglio / pensiero.


Ho implementato bit e pezzi dall'algoritmo descritto in questo documento .
caos Tecnico,

Risposte:



35

Quando ho sperimentato questo tipo di cose (fine degli anni '90), ho letto alcuni documenti e libri per conoscere il flusso d'acqua, ma non ho tenuto traccia di quelli che ho visto. Ho finito per fare le mie cose perché volevo gestire l'erosione. Volevo che i fiumi producessero canyon e pianure alluvionali. Volevo che i bacini idrici della diga si riempissero di sedimenti. Volevo che i fiumi producessero effetti come laghi serpeggianti e oxbow. Volevo canali per l'irrigazione e la diversione dell'acqua. Volevo che le alluvioni danneggiassero fattorie e case nelle pianure alluvionali.

Ho tenuto alcune note (collegamenti) nella sezione Geografia di questa pagina . C'è un articolo di Jos Stam da leggere. Purtroppo non ho mai organizzato gli appunti. Inoltre, purtroppo, il gioco era per OS / 2, quindi non posso darti facilmente un eseguibile eseguibile con cui giocare. E purtroppo anche il mio codice è terribile, ma se vuoi dare un'occhiata, vedi water.cpp nel codice sorgente (zip).

Cose con cui ho giocato nella mia simulazione (non tutte realistiche):

  • Le aree vicino ai fiumi hanno terreno umido; le aree lontane dai fiumi hanno terreno asciutto. Vegetazione interessata dall'umidità. La vegetazione rallenta il flusso d'acqua.
  • La pioggia crea acqua in tutti i luoghi, alcune volte. Quindi scorre in discesa. Quindi evapora e viene assorbito dal terreno. La pioggia scolpisce i canali fluviali.
  • Le sorgenti creano acqua continuamente, ma solo in alcune località. Le sorgenti mantengono i canali fluviali pieni. Non ho simulato gli strati rocciosi o il flusso delle acque sotterranee; Ho appena posizionato molle a caso sulle montagne.
  • L'acqua che scorre ha slancio. Se ricordo bene, questo è stato importante per rendere più tortuosi i fiumi.
  • L'acqua in rapido movimento raccoglie i sedimenti; depositi di acqua a lento movimento sedimentano davanti a sé Questo scolpisce le valli fluviali.
  • Durante la creazione della mappa iniziale ho accelerato il flusso dell'acqua e l'erosione; durante il gioco ha funzionato a velocità normale.

Nel complesso, la mia esperienza è stata che tutto questo è stato abbastanza divertente con cui giocare, ma ci sono volute molte euristiche e modifiche per farlo funzionare. Non sono mai arrivato a un punto in cui potrei dire che la creazione del fiume sembrava naturale e inevitabile senza modificare. È stato così divertente (sia come programmatore che come giocatore) che ci ho passato anni e non ho mai finito il resto del gioco. :)


12
Pronuncia semplicemente il suo nome e arriverà.
MichaelHouse

3
@ Byte56 È come il Candlejack di Stackexcha ....
DampeS8N,

2
Mi hai ispirato a scrivere un'implementazione basata sul tuo articolo a griglia esagonale e ora mi ispiri di nuovo!
Adam Arold,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.