Bagaimana saya bisa mengidentifikasi daerah fitur di dunia yang dihasilkan secara prosedural?


26

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.


Terima kasih atas koreksinya, dan maaf untuk kualitas bahasa Inggris saya yang buruk :)
Raveline

Bahasa Inggris Anda hebat, hanya saja "judul" itu lebih disukai diutarakan sebagai pertanyaan di situs StackExchange.
dlras2

Jawaban:


21

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.


1
Terima kasih untuk bantuannya. Saya sudah tahu solusi Amit, dan meskipun saya merasa cukup elegan, saya tidak cukup tahu tentang matematika di belakang (saya harus mempelajarinya, yang akan saya lakukan cepat atau lambat, tetapi tidak sekarang!). Berpikir dalam hal DAS tentu bisa membantu saya dan mengutak-atik algoritma pembuatan sungai seharusnya tidak terlalu sulit. Saya suka solusi Anda untuk membangun jalan dan batasan politik, saya harus mempertimbangkan bagaimana tepatnya saya akan mengimplementasikannya, tetapi idenya bagus!
Raveline

@Raveline - Jika Anda menggunakan generasi batas politik, beri komentar di sini dan beri tahu saya! Saya ingin melihat bagaimana hasilnya.
dlras2

13

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.


Saya mengerti alasannya, meskipun saya tidak yakin jalur Anda semudah itu ... Karena proyek saya cukup rendah hati, saya akan mencoba untuk menambal sesuatu yang tidak terlalu canggih, tetapi tanpa poligon, karena itu berarti mempelajari lebih banyak algoritma tersirat. (PS: situs web Anda adalah sumber inspirasi yang luar biasa dan saya menyukainya!)
Raveline

3
artikel pembuatan peta poligon sangat bagus.
Raine

3

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.