Алгоритмы дождя + создание реки в процедурно генерируемой местности


52

Недавно я увлекся вещами, которые можно сделать с процедурной местностью, и начал немного экспериментировать с построением мира. Я хотел бы иметь возможность сделать миры чем-то вроде крепости Гномов с помощью биомов, созданных из множества различных карт.

Итак, первый шаг сделан. Используя алгоритм алмазного квадрата, я создал несколько хороших карт. Следующим шагом я хотел бы добавить некоторые водные объекты и сделать их несколько реалистично с дождями. Я читал о нескольких разных подходах, таких как начало в верхних точках карты и «спуск» к самой низкой соседней точке, объединение / размывание, когда он спускается к уровню моря.

Есть ли какие-либо документированные алгоритмы с этим или они больше не в порядке?

Буду любить любые советы / мысли.


Я реализовал фрагменты из алгоритма, описанного в этой статье .
ХаосТехник

Ответы:


39

Амит Патель, пользователь этого сайта, создал замечательный источник информации о генерации случайных миров, который, безусловно, будет вам полезен.

Далее на этом сайте есть несколько замечательных вопросов / ответов о процедурной генерации.

Генерация дороги / реки на 2-й карте сетки

Процедурное мировое поколение, ориентированное на особенности игрового процесса

Как я могу генерировать случайные озера и реки в моей игре?

Генерация случайной карты


35

Когда я экспериментировал с подобными вещами (конец 1990-х годов), я читал некоторые статьи и книги, чтобы узнать о потоке воды, но я не вел записи о том, на какие из них я смотрел. Я закончил тем, что делал свое дело, потому что хотел справиться с эрозией. Я хотел, чтобы реки производили каньоны и поймы. Я хотел, чтобы водохранилища плотины наполнились осадком. Я хотел, чтобы реки производили такие эффекты, как блуждающие и волнистые озера. Я хотел каналы для орошения и водозабора. Я хотел, чтобы наводнения повредили фермы и дома в поймах.

Я сохранил некоторые заметки (ссылки) в разделе географии этой страницы . Есть бумага Jos Stam, которую нужно прочитать. К сожалению, я никогда не организовывал заметки. Кроме того, к сожалению, игра была для OS / 2, поэтому я не могу легко дать вам исполняемый исполняемый файл для игры. И, к сожалению, мой код ужасен, но если вы хотите посмотреть, посмотрите water.cpp в исходном коде (zip).

Вещи, с которыми я играл в моей симуляции (не все реалистично):

  • Районы около рек имеют влажную почву; районы вдали от рек имеют сухую почву. Влага влияет на растительность. Растительность замедляет течение воды.
  • Дождь создает воду во всех местах, иногда. Затем он течет вниз. Затем он испаряется и поглощается землей. Дождь изрезает русло реки.
  • Источники создают воду постоянно, но только в нескольких местах. Источники поддерживают заполненные речные каналы. Я не имитировал слои горных пород или подземных вод; Я просто случайно расположил источники в горах.
  • Текущая вода имеет импульс. Если я правильно помню, это было важно для того, чтобы сделать реки извилистыми.
  • Быстро движущаяся вода собирает осадок; медленно движущиеся отложения воды отстают от него. Это вырезает речные долины.
  • Во время первоначального создания карты я ускорил поток воды и эрозию; во время игры он бегал с нормальной скоростью.

В целом, мой опыт заключался в том, что со всем этим было довольно весело играть, но для его работы потребовалось много эвристик и настроек. Я никогда не доходил до точки, где я мог бы сказать, что создание реки было естественным и неизбежным без настройки. Это было так весело (и как программист, и как игрок), что я потратил на это годы и никогда не заканчивал остальную часть игры. :)


12
Просто назовите его имя, и он приедет.
MichaelHouse

3
@ Byte56 Он как подсвечник стека excha ....
DampeS8N

2
Вы вдохновили меня написать материал, основанный на вашей статье с шестигранной сеткой, и теперь вы снова вдохновляете меня!
Адам Арольд

1

Большинство реализованных мною реализаций либо сочетали «карту реки» (используя узкую полосу из шума Перлина или какой-то похожий подход), либо метод «дождевой капли», о котором вы упомянули.

Вот несколько отправных точек:

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.