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


52

Нещодавно я захопився речами, які можна зробити з процедурною місцевістю, і трохи почав експериментувати зі світовим будівництвом. Мені б хотілося створити світи чимось на зразок карликової фортеці з біомами, створеними з з'єднання різних карт.

Отже перший крок зроблений. Використовуючи алгоритм алмазного квадрата, я створив кілька приємних схем. Наступним кроком є ​​те, що я хотів би додати деякі особливості води та мати їх дещо реалістично з опадами. Я читав про декілька різних підходів, наприклад, починаючи з високих точок карти і «спускаючись» до найнижчої сусідньої точки, об’єднуючись / розмиваючи, як це працює до рівня моря.

Чи є якісь задокументовані алгоритми з цим або вони більше від манжети?

Був би радий будь-які поради / думки.


Я реалізував біти та фрагменти з алгоритму, описаного в цій роботі .
хаосТехнік

Відповіді:


39

Користувач цього сайту Amit Patel створив чудовий ресурс інформації про випадкове покоління світу, який, безсумнівно, буде вам корисний.

Далі на цьому веб-сайті є кілька чудових питань / відповідей щодо процесуального генерування.

Генерація доріг / річок на 2d мапі сітки

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

Як я можу генерувати випадкові озера та річки у своїй грі?

Генерація випадкових карт


35

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

Я зберігав деякі замітки (посилання) у розділі Географія цієї сторінки . Є документ Jos Stam, який обов'язково потрібно прочитати. На жаль, я ніколи не організовував ноти. Також, на жаль, гра була для OS / 2, тому я не можу легко дати вам виконувати виконувану програму. А також, на жаль, мій код жахливий, але якщо ви хочете поглянути, дивіться water.cpp у вихідному коді (zip).

Речі, з якими я грав у своєму моделюванні (не всі реалістичні):

  • Області біля річок мають вологий ґрунт; райони, далекі від річок, мають сухий грунт. Вологість уражена рослинністю. Рослинність уповільнює потік води.
  • Дощ створює воду в усіх місцях, у певний час. Потім воно тече в гору. Потім він випаровується і поглинається землею. Дощ вирізає русла річки.
  • Джерела створюють воду весь час, але лише в кількох місцях. Джерела заповнюють русла річок заповненими. Я не імітував шари гірських порід чи потік ґрунтових вод; Я просто розміщував джерела випадковим чином на горах.
  • Тече вода набирає обертів. Якщо я добре пам'ятаю, це було важливо для того, щоб зробити річки меандрами.
  • Вода, що швидко рухається, збирає осад; повільно рухома вода відкладає осад перед нею. Це вирізає річкові долини.
  • Під час створення початкової карти я прискорив потік води та ерозію; під час гри він бігав із звичайною швидкістю.

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


12
Просто скажіть його ім'я, і ​​він приїде.
MichaelHouse

3
@ Byte56 Він схожий на Свічник stackexcha ....
DampeS8N

2
Ви надихнули мене написати втілення на основі вашої статті з шестикутною сіткою, і тепер ви надихаєте мене знову!
Адам Арольд

1

Більшість реалізацій, які я бачив, або поєднували "карту річки" (використовуючи вузьку смугу від шуму Перліна або якийсь подібний підхід) або метод "краплі дощу", який ви згадуєте.

Ось кілька моментів стрибків:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.