Saya sedang membangun sebuah pulau. Saya menggunakan solusi heightmap klasik: dengan fungsi pembangunan bukit, menghindari sudut-sudut peta, saya membuat ketinggian. Kemudian, perlin noise memberi saya beberapa variabel iklim untuk menangani bioma. Sekarang, saya menghadapi dua tantangan yang, dalam beberapa hal, terhubung:
Dalam Dwarf Fortress, salah satu aspek rapi dari generasi dunia adalah bagaimana permainan tampaknya "mengetahui" area, dan memberi mereka nama, meskipun mereka bukan bentuk persegi panjang. Saya ingin dapat "mengenali" hutan saya, sungai saya, bukit saya ... tahu algoritma seperti apa yang bisa saya gunakan untuk memindai peta saya dan menginterpretasikan wilayahnya? Dan bagaimana Anda menyimpannya? Saya menggunakan grafik dasar C ++ yang terbuat dari vektor vektor "ubin objek".
Pulau ini harus dibagi dalam bidang politik, tidak hanya daerah murni alami. Saya bisa menggunakan gunung dan sungai untuk membuat "batas alami", tetapi peta yang saya buat secara prosedural tidak menjamin saya akan memiliki "kantong" bagus yang akan membentuk kerajaan; Saya dapat menemukan diri saya memiliki wilayah politik "pita" raksasa yang dikelilingi oleh kerajaan mikro. Kemungkinan lain adalah mencari area yang sesuai untuk kota atau kastil. Lalu, "tumbuhkan" area politik di sekitarnya. Tetapi di sana lagi, saya ingin memiliki beberapa algoritma terkenal sebelum mencoba untuk membuat sendiri.
Pertanyaan ini bisa ditafsirkan sebagai agak terlalu kabur, jadi salah satu cara pengulangan kata itu adalah: bagaimana cara mempartisi (tanpa memodifikasi!) Dunia yang dihasilkan secara prosedural menjadi area yang cocok untuk gameplay? Terima kasih sebelumnya atas bantuan Anda.
sumber
Jawaban:
Amitp menyarankan menggunakan daerah aliran sungai untuk mendefinisikan berbagai daerah, seperti yang dijelaskan dalam posnya tentang pembuatan peta poligon . Daerah aliran sungai paling bagus dilihat dengan membuat peta menggunakan demo- nya . Keuntungan menggunakan daerah aliran sungai untuk membantu membagi benua adalah memberikan batas yang tegak lurus terhadap garis pantai, sementara gunung biasanya memberikan batas paralel.
Jika saya membagi wilayah geografis, saya akan menggunakan kombinasi pegunungan, daerah aliran sungai, dan deteksi tepi pada berbagai bioma di peta saya.
Saya juga akan menunjukkan bahwa wilayah politik umumnya menjangkau banyak wilayah geografis. Saya akan menghasilkan daerah geografis terlebih dahulu, kemudian menetapkan peringkat diinginkan masing-masing daerah (apakah itu pantai? Apakah ada emas? Tanah pertanian yang baik?) Dan biaya perjalanan (medan curam? Kayu berat ?.) Kemudian menggunakan algoritma jalur favorit Anda , buat peta panas perjalanan antara daerah yang diinginkan. Ini akhirnya akan menjadi jalan Anda, dan Anda dapat membangun batas politik Anda dari sana. Batas-batas ini umumnya memiliki banyak jalan di dalamnya, dan lebih sedikit jalan di antara mereka.
sumber
Untuk menambah jawaban Dan Rasmussen :
Salah satu alasan utama saya beralih dari Perlin Noise ( proyek ini ) ke menggunakan poligon ( proyek ini ) adalah bahwa poligon menyediakan beberapa struktur yang bagus untuk menetapkan area yang lebih besar (wilayah politik, hutan, gurun, area yang ditentukan , batas, dll.). Dimulai dengan struktur dan kemudian menghasilkan peta mirip dengan rendering poligon - sesuatu yang relatif mudah. Dimulai dengan peta dan kemudian menyimpulkan strukturnya mirip dengan visi komputer - sesuatu yang relatif sulit, tetapi mungkin. Saya ingin struktur dan peta jadi saya memutuskan untuk pergi dengan rute yang relatif mudah untuk membangun peta di atas struktur (node dan tepi).
Bahkan kemudian, saya menemukan bahwa saya menginginkan struktur yang lebih besar daripada yang saya hasilkan. Daerah aliran sungai adalah salah satu upaya untuk membangun struktur yang lebih besar itu tetapi saya perlu mencoba lebih banyak pendekatan pengelompokan poligon bersama. Saya belum menemukan sesuatu yang saya sukai.
Saya tidak yakin bagaimana Dwarf Fortress melakukannya. Mengingat betapa briliannya mereka, saya tidak akan terkejut jika mereka memiliki jenis algoritma "visi komputer" yang canggih.
sumber
Untuk pertanyaan pertama Anda, tebakan terbaik saya adalah menggunakan algoritma deteksi tepi untuk menemukan batas wilayah alami Anda (hutan, bukit, ...). Ada banyak algoritma untuk masalah seperti ini.
Untuk pertanyaan kedua, Anda dapat menggunakan ide Anda sendiri untuk menelurkan sebuah kastil (biasanya di atas bukit untuk pertahanan yang baik, dan dekat air tawar), kemudian gunakan algoritma voronoi untuk memiliki daerah di sekitar setiap kastil. Anda dapat menggunakan noise atau batas bioma Anda untuk membuat batas lebih realistis.
sumber