Algoritma untuk curah hujan + pembuatan sungai di medan yang dihasilkan secara prosedural

52

Saya baru-baru ini menjadi terpesona oleh hal-hal yang dapat dilakukan dengan medan prosedur dan sudah mulai bereksperimen dengan dunia membangun sedikit. Saya ingin membuat dunia seperti benteng Kerdil dengan bioma yang dibuat dari menyatukan berbagai peta.

Jadi langkah pertama sudah dilakukan. Menggunakan algoritma diamond-square saya telah membuat beberapa hieghtmaps yang bagus. Langkah selanjutnya adalah saya ingin menambahkan beberapa fitur air dan membuatnya agak realistis dihasilkan dengan curah hujan. Saya telah membaca tentang beberapa pendekatan yang berbeda seperti mulai dari titik-titik tinggi peta, dan "melangkah" ke titik tetangga terendah, mengumpulkan / mengikis saat ia bergerak turun ke permukaan laut.

Apakah ada algoritma yang didokumentasikan dengan ini atau mereka lebih dari manset?

Senang jika ada saran / pemikiran.

Mematuk
sumber
Saya telah mengimplementasikan sedikit demi sedikit dari algoritma yang dijelaskan dalam makalah ini .
chaosTechnician

Jawaban:

35

Kembali ketika saya bereksperimen dengan hal semacam ini (akhir 1990-an), saya membaca beberapa makalah dan buku untuk belajar tentang aliran air, tetapi saya tidak mencatat yang mana yang saya lihat. Saya akhirnya melakukan hal saya sendiri karena saya ingin menangani erosi. Saya ingin sungai menghasilkan ngarai dan dataran banjir. Saya ingin waduk bendungan terisi oleh sedimen. Saya ingin sungai menghasilkan efek seperti berkelok-kelok dan danau oxbow. Saya ingin saluran irigasi dan pengalihan air. Saya ingin banjir merusak pertanian dan rumah di dataran banjir.

Saya menyimpan beberapa catatan (tautan) di bagian Geografi halaman ini . Ada kertas Jos Stam yang harus dibaca. Sayangnya saya tidak pernah mengatur catatan. Sayangnya, game ini untuk OS / 2 jadi saya tidak bisa dengan mudah memberikan Anda executable yang bisa dijalankan. Dan juga sayangnya, kode saya mengerikan, tetapi jika Anda ingin melihatnya, lihat water.cpp dalam kode sumber (zip).

Hal-hal yang saya mainkan dalam simulasi saya (tidak semua realistis):

  • Daerah dekat sungai memiliki tanah lembab; daerah yang jauh dari sungai memiliki tanah kering. Vegetasi yang terpengaruh kelembaban. Vegetasi memperlambat aliran air.
  • Hujan menciptakan air di semua tempat, beberapa saat. Kemudian mengalir menurun. Kemudian menguap dan diserap oleh tanah. Hujan mengukir saluran sungai.
  • Mata air menciptakan air sepanjang waktu, tetapi hanya di beberapa lokasi. Mata air membuat saluran sungai terisi. Saya tidak mensimulasikan lapisan batuan atau aliran air tanah; Saya hanya menempatkan mata air secara acak di gunung.
  • Air yang mengalir memiliki momentum. Jika saya ingat benar, ini penting untuk membuat sungai berliku-liku.
  • Air yang bergerak cepat mengambil sedimen; endapan endapan air bergerak lambat di depannya. Ini mengukir lembah sungai.
  • Selama pembuatan peta awal saya mempercepat aliran air dan erosi; selama bermain game itu berjalan dengan kecepatan normal.

Secara keseluruhan, pengalaman saya adalah bahwa semua ini cukup menyenangkan untuk dimainkan, tetapi butuh banyak heuristik dan penyesuaian untuk membuatnya bekerja. Saya tidak pernah sampai pada titik di mana saya dapat mengatakan bahwa penciptaan sungai terasa alami dan tak terhindarkan tanpa mengutak-atik. Sangat menyenangkan (baik sebagai programmer dan sebagai pemain) sehingga saya menghabiskan waktu bertahun-tahun untuk itu, dan tidak pernah menyelesaikan sisa permainan. :)

amitp
sumber
12
Cukup ucapkan namanya dan dia akan tiba.
MichaelHouse
3
@ Byte56 Dia seperti Candlejack of stackexcha ....
DampeS8N
2
Anda mengilhami saya untuk menulis sebuah penerapan berdasarkan artikel kotak segi enam Anda dan sekarang Anda menginspirasi saya lagi!
Adam Arold