Bagaimana saya bisa menghasilkan peta acak yang terasa seperti peta acak Age of Empires II?


18

Saya suka cara Age of Empires II menghasilkan peta acak ternyata (variasi yang baik, transisi bioma yang layak, peta terasa acak tanpa merasa kacau), tetapi saya berjuang untuk meniru gaya. Saya sudah mencoba menggunakan misalnya, Perlin noise, tetapi semuanya keluar terlalu homogen, atau jika tidak, nilai Perlin -> heuristik medan terlalu sensitif dan rapuh untuk membuat berbagai tipe dunia.

Saya ingat tipe peta AoE2 "Yang Tidak Diketahui" mengiklankan "100.000 kemungkinan peta", menyarankan beberapa penggunaan nomor benih, tetapi saya tidak yakin bagaimana menggunakan nomor benih untuk menghasilkan varietas yang saya lihat.

Algoritma dan heuristik apa yang dapat saya gunakan untuk menghasilkan peta acak yang terasa seperti peta acak AoE2?

Edit menjadi lebih spesifik:

Memikirkan lebih jauh tentang masalah saya, dan mempelajari apa yang saya sukai tentang mesin peta acak AoE2, saya percaya masalah terbesar saya adalah mengelola distribusi air dan kehidupan tanaman di peta . Saya sekarang melihat bahwa saya juga telah mengikat itu dalam pikiran saya dengan "transisi bioma yang masuk akal", tapi itu masalah yang berbeda (meskipun saya berharap saya terus menggunakan kebisingan Perlin akan membuatnya sulit untuk diselesaikan).

Saya telah menambahkan beberapa peta acak AoE2 yang menyoroti apa yang saya sukai tentang mesin pemetaan mereka, yang gagal saya hasilkan sendiri. Semua tangkapan layar diambil dari jenis peta acak, "Custom" -> "The Unknown". Saya tidak menginstruksikan permainan untuk menggunakan geografi tertentu seperti kepulauan.

Lebih jauh di bawah ini adalah gambar dari mesin peta saya sendiri. Setiap piksel sesuai dengan satu ubin peta AoE2.

Satu komplikasi untuk proyek saya adalah saya ingin peta menjadi banyak, berkali-kali lebih besar dari peta AoE2. Dengan demikian, mesin apa pun yang saya gunakan harus dapat membuat rentang penuh dari bioma di setiap peta, dan tidak satu set bioma sempit per peta, seperti yang digunakan AoE2.

Peta Age of Empires II

Danau pedalaman

Berikut adalah contoh yang menampilkan danau pedalaman dan beberapa hal yang tampak seperti sungai. Saya suka bagaimana peta mencakup sejumlah besar air yang berserakan, tetapi air itu masih agak terkonsentrasi - ada petak besar tanah yang tersedia untuk membangun kerajaan Anda. Anda tidak harus menghabiskan seluruh permainan merencanakan kota Anda di sekitar air.

Pulau yang terhubung

Berikut adalah contoh serupa di mana permainan itu cukup pintar untuk menghubungkan pulau dengan rawa yang dapat dilalui. Saya tidak bisa membayangkan bagaimana algoritma berbasis kebisingan akan membuat rawa di sana, dan hanya tempat-tempat itu. Juga, perhatikan bagaimana gim ini menciptakan tanah sedemikian rupa sehingga setiap pemain memiliki lahan pribadi mereka sendiri yang luas untuk memulai. Itu tidak membuat tambalan acak dari tanah, lalu mengambil tebakan terbaik untuk yang mana yang paling tidak mengerikan bagi setiap pemain untuk memulai.

Kepulauan

Saya suka bahwa peta ini juga menggunakan banyak air, tetapi tidak termasuk banyak danau pedalaman. Bandingkan dengan gambar pertama. Saya suka cara AoE2 menciptakan geografi yang sama sekali berbeda menggunakan blok bangunan yang sama. Usaha saya menggunakan Perlin noise gagal di sini - saya mendapatkan samudera luas yang mengerdilkan daratan, atau Tanah 10.000 Danau. Saya juga kesulitan mendapatkan kedua pulau dan benua yang terhubung (pikirkan Amerika Utara / Selatan).

Kering, rimbun Gurun kering

Bandingkan gambar ini dengan gambar di atasnya. Mereka menunjukkan bahwa kegersangan peta tidak tergantung pada ketinggian air. Gambar pertama menampilkan peta yang hampir tanpa air, namun berisi hutan dan rumput. Gambar kedua memiliki jumlah air sedang, namun merupakan gurun. Saya suka itu mungkin (pikirkan memiliki New Mexico atau Sahara dan Kosta Rika di dunia Anda).

Peta saya sendiri

Saya telah membaca di banyak tempat bahwa cara yang baik untuk membangun peta adalah melapisi berbagai tingkat kebisingan Perlin, masing-masing mewakili dimensi data yang berbeda. Mengikuti rekomendasi populer, saya memilih elevasi dan kelembapan, memilih jenis medan dari tabel Whittaker di sini .

Saya mengambil dua peta perlin, mengkuantisasi nilai dari masing-masing ke dalam bilangan bulat melalui sederhana if perlin_val < x { i=some_int } else if perlin_val < y..., lalu memetakan pasangan bilangan bulat (ketinggian, kelembaban) ke tabel jenis medan (misalnya, [1,0] -> gurun tropis, [1,1 ] -> padang rumput). Lautan dimasukkan dalam sistem ini - ketinggian = 0 samudra yang ditentukan.

g1_success

Ada variasi yang baik, dan dalam banyak hal rasanya seperti dunia nyata, tetapi ada beberapa masalah:

  • Pertama, tidak ada pola pada kedalaman laut. Anda akan mengharapkan perairan dangkal dekat pantai dan perairan dalam lebih jauh, tidak ada sajak atau alasan di mana

  • Kedua, semua air terkonsentrasi di lautan; tidak ada danau atau sungai, karena kebisingan Perlin tidak tiba-tiba turun ke nilai yang lebih rendah di tengah benua.

  • Menciptakan keseimbangan antara jumlah masing-masing bioma sangat, sangat sulit. Saya mengaitkan ini dengan:

    • Perlin noise mengikuti distribusi normal, sehingga memperkirakan bagaimana menyesuaikan probabilitas setiap pemetaan dimensi sulit

    • Mencoba menyeimbangkan banyak dimensi itu sulit - mungkin saya ingin lebih (2,3) jadi saya meningkatkan peluang untuk mendapatkan (n, 3). Nah, sekarang saya punya terlalu banyak (3,3) dan semuanya terlihat salah.

    • Ketika saya memperbesar noise cukup dekat untuk memiliki data yang halus, saya tidak mendapatkan sampel nilai Perlin yang sangat lengkap. Jadi saya akan mengubah distribusi saya untuk peta di depan saya, memuat ulang peta acak baru, dan mendapatkan hasil yang sangat berbeda.

x-terpisah-air

Saya mencoba untuk memperbaiki masalah sungai / danau dengan membuat air dari nilai Perlin yang ketiga. Keputusan air / tanah biner, lalu terapkan semua hal di atas ke tanah. Ini membuatnya secara drastis lebih mudah untuk mengontrol distribusi air (masih belum sempurna, tetapi lebih baik), tetapi memperkenalkan masalah bahwa ada banyak transisi bioma yang tidak masuk akal. Misalnya, sepetak gurun yang tidak dapat dijelaskan di tengah-tengah padang rumput yang subur, salju di pantai, dll. Juga masih sulit untuk mengontrol proporsi bioma tanah, karena alasan yang disebutkan di atas.

Kegagalan satu dimensi

Melihat masalah di atas, saya mencoba algoritma yang lebih sederhana yang hanya memetakan suara Perlin ke satu dimensi. Saya sekarang memiliki berbagai jenis medan yang meningkat dari 0 = lautan dalam -> 1 = lautan dangkal -> 2 = pantai ... -> N = salju. Sementara ini menghasilkan pulau dan benua, dan membuatnya jauh lebih mudah untuk menyeimbangkan proporsi setiap medan, tipe medan terlalu berkelompok. Setiap massa daratan terlihat seperti peta ketinggian, umumnya tanpa jenis medan yang tersebar di permukaannya. Setiap massa daratan memiliki fitur yang kira-kira sama, selalu dalam urutan yang sama, dan selalu dalam bentuk seperti cincin yang sama.


Saya tidak yakin siapa pun yang tidak dalam tim pengembangan asli dapat benar-benar menjawab pertanyaan Anda, tetapi saya sarankan benihnya jauh lebih rendah dari yang Anda harapkan. Benih hampir pasti menghasilkan peta yang berbeda per jenis peta dasar, dan termasuk mereka semua dalam kombinasi apa pun yang memungkinkannya mencapai 100.000.
Magus

Pertanyaan ini tampaknya di luar topik karena meminta detail implementasi tentang game tertentu yang sudah ada, bukan tentang membuat game.
Trevor Powell

@TrevorPowell Setelah meninjau pedoman untuk pertanyaan tentang topik untuk situs ini, saya telah mengulangi pertanyaan itu.
spiffytech

Anda memposting edit itu sekitar sepuluh detik setelah komentar saya. Nah, itu layanan! ;)
Trevor Powell

1
-1 Kurasa masih terlalu luas. Anda harus spesifik tentang apa artinya "peta yang terasa seperti". Diperlukan contoh spesifik dari apa yang Anda bicarakan untuk menjawab pertanyaan ini. Generasi prosedural, lebih artistik daripada yang sering orang pikirkan. Penciptaan dan persepsi seni adalah topik subyektif. Pilih hal tertentu yang ingin Anda fokuskan dan tanyakan hanya tentang itu. Ruang lingkup pertanyaan ini saat ini sangat luas.
MichaelHouse

Jawaban:


9

Lihat artikel bagus Amit Patel yang menurut saya merupakan sumber daya klasik untuk pembuatan prosedural medan ...

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/

Hal utama yang dia lakukan adalah menggunakan struktur grafik untuk memodelkan medannya, bukan meluruskan peta kebisingan (Perlin et al). Saya tidak akan menyematkan ilustrasinya, tetapi baca artikelnya, dan saya pikir Anda akan merasa terbantu jika Anda memikirkan pendekatan yang berbeda.

Jika Anda membuat game jenis CIV / AOE, penempatan sumber daya akan menjadi penting. Anda tidak dapat memiliki sumber daya utama terlalu langka, atau yang bernilai tinggi terlalu umum. Jika Anda menganggap setiap poligon sebagai zona dengan karakteristik yang diberikan (lihat ilustrasi artikel, itu akan lebih masuk akal), saya bisa melihat menetapkan sumber daya untuk setiap poligon berdasarkan pada beberapa algoritma yang Anda pilih. Anda bisa menjadi cukup pintar dengan membuat sumber daya dalam poligon secara statistik bias oleh tetangga sehingga hutan di sebelah gurun mungkin langka, tetapi hutan di sebelah padang rumput lebih umum misalnya.


2
Panduan Amit menghasilkan medan yang terlalu realistis untuk Zaman Kerajaan. :)
Seth Battin

Hehe ya benar. Tetapi konsep dasar menggunakan sel dengan ukuran yang berbeda-beda (di mana masing-masing adalah tipe medan tertentu) akan berfungsi dengan baik sebagai pendekatan yang saya pikir. Hapus gagasan ketinggian medan dari persamaan.
Tim Holt

Saya meninjau artikel Amit, tetapi dioptimalkan terlalu ketat untuk memiliki satu pulau. Menjadikan ketinggian sebagai fungsi sederhana jarak dari pantai akan menghasilkan hasil yang canggung dengan banyak pulau, atau benua yang lebih besar, dan metode distribusi airnya mengasumsikan puncak yang menonjol di lanskap yang akhirnya mengalir ke laut. Jika saya harus menghilangkan ketinggian medan dari skema Amit, saya tidak yakin bagaimana mengadaptasi ide distribusi bioma untuk proyek saya.
spiffytech

5

Saya membuat skrip peta acak untuk Age of Empires 2 . Yang terbaru adalah untuk versi HD.

Jika Anda ingin memahami cara membuat peta untuk Age of Empires 2, ada panduan yang sangat bagus untuk RMS (Random Map Scripting) .

Age of Empires menggunakan sistem pakar, yang memungkinkan skrip untuk menulis rutinitas untuk aturan generasi, yang dapat Anda pelajari banyak. Adapun daerah, saya membayangkan itu hanya akan menjadi kasus masking area dan menerapkan skrip / rutinitas yang berbeda untuk area masking sesuai. Anda dapat dengan mudah melihat aturan pembuatan skrip peta yang ada dengan membukanya di editor teks. Saya menulis milik saya di Notepad

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.