Algoritmos para precipitação + criação de rios em terrenos gerados processualmente

52

Recentemente, fiquei fascinado pelas coisas que podem ser feitas com terrenos processuais e comecei a experimentar um pouco a construção do mundo. Eu gostaria de poder fazer dos mundos algo como a Fortaleza dos Anões, com biomas criados a partir da junção de vários mapas.

Então, o primeiro passo foi feito. Usando o algoritmo de diamante quadrado, criei alguns hieghtmaps agradáveis. O próximo passo é adicionar algumas características da água e gerá-las de maneira realista com a chuva. Eu li sobre algumas abordagens diferentes, como começar nos pontos altos do mapa e "descer" para o ponto vizinho mais baixo, acumulando / desgastando enquanto desce até o nível do mar.

Existem algoritmos documentados com isso ou eles estão mais fora do manguito?

Adoraria qualquer conselho / pensamentos.

Peck
fonte
Eu implementei partes do algoritmo descrito neste artigo .
chaosTechnician

Respostas:

35

Quando experimentei esse tipo de coisa (final dos anos 90), li alguns papéis e livros para aprender sobre o fluxo de água, mas não mantinha um registro de quais deles eu olhava. Acabei fazendo minhas próprias coisas porque queria lidar com a erosão. Eu queria que os rios produzissem desfiladeiros e várzeas. Eu queria que os reservatórios da barragem se enchessem de sedimentos. Eu queria que os rios produzissem efeitos como os meandros e os lagos de oxbow. Eu queria canais para irrigação e desvio de água. Eu queria inundações para danificar fazendas e casas nas planícies de inundação.

Eu guardei algumas anotações (links) na seção Geografia desta página . Há um artigo de Jos Stam que é uma leitura obrigatória. Infelizmente, nunca organizei as anotações. Infelizmente também, o jogo era para o OS / 2, então não posso fornecer facilmente um executável executável para você brincar. E também, infelizmente, meu código é terrível, mas se você quiser dar uma olhada, consulte water.cpp no ​​código-fonte (zip).

Coisas que eu brincava na minha simulação (nem todas realistas):

  • Áreas próximas a rios têm solo úmido; áreas distantes dos rios têm solo seco. A umidade afetou a vegetação. A vegetação diminui o fluxo de água.
  • A chuva cria água em todos os lugares, algumas vezes. Em seguida, flui ladeira abaixo. Então evapora e é absorvido pelo solo. A chuva escava os canais do rio.
  • As fontes criam água o tempo todo, mas apenas em alguns locais. As nascentes mantêm os canais do rio cheios. Não simulei camadas de rocha ou fluxo de águas subterrâneas; Acabei de colocar fontes aleatoriamente nas montanhas.
  • Água corrente tem impulso. Se bem me lembro, isso era importante para tornar os rios sinuosos.
  • Água em movimento rápido capta sedimentos; depósitos de água em movimento lento sedimentam à sua frente. Isso esculpe os vales dos rios.
  • Durante a criação inicial do mapa, acelerei o fluxo e a erosão da água; durante o jogo, ele rodava na velocidade normal.

No geral, minha experiência foi de que tudo isso foi muito divertido de se jogar, mas foram necessárias muitas heurísticas e ajustes para fazê-lo funcionar. Eu nunca cheguei a um ponto em que eu poderia dizer que a criação de rios parecia natural e inevitável sem ajustes. Foi tão divertido (tanto como programador quanto como jogador) que passei anos nele e nunca terminei o resto do jogo. :)

amitp
fonte
12
Simplesmente fale seu nome e ele chegará.
MichaelHouse
3
@ Byte56 Ele é como o Candlejack de stackexcha ....
DampeS8N
2
Você me inspirou a escrever uma imementação com base no seu artigo de grade hexagonal e agora me inspira novamente!
Adam Arold 20/08/16