Saya sedang mengerjakan game bergaya Worms dan ingin menghasilkan beberapa medan secara prosedural. Saya sebelumnya telah melakukan banyak generasi medan menggunakan perlin noise, dan inilah yang saya mulai gunakan untuk game ini. Satu-satunya masalah dengan itu adalah itu terlalu sederhana dan membosankan, memberi saya beberapa bukit tetapi bukan kompleksitas yang saya inginkan. Saya ingin memiliki fitur seperti gua dan gunung gantung dan saya tidak keberatan pulau terapung dan semacamnya. Sesuatu seperti ini, tetapi lebih gila lagi tidak masalah:
Saya berpikir untuk membuat medan menggunakan kebisingan perlin klasik, kemudian hanya mengeluarkan bagian untuk membuat gua dan yang tidak, tapi saya mengalami kesulitan membimbing penghapusan bagian-bagian itu. Apakah ada alternatif untuk menghasilkan medan seperti itu?
Jawaban:
Saya sarankan Anda mulai dengan 2D Perlin-noise. Sesuatu seperti ini:
Kemudian menerapkan ambang pada gambar, sehingga Anda mendapatkan beberapa pulau yang terisolasi, seperti yang ditunjukkan di sini:
Saya memilih ambang 0,04, semua yang di atas ambang akan berwarna biru. Sisanya tersisa hitam. Kemudian setelah itu, saatnya menentukan "pulau" mana yang harus dijaga dan mana yang harus dibuang.
Pendekatan yang mungkin dilakukan adalah menjalankan gambar dari kiri ke kanan pada berbagai ketinggian dan memilih "pulau" berpotongan yang diberikan probabilitas tertentu. Pada contoh gambar, garis terendah memiliki probabilitas 100%, sehingga setiap pulau yang dilintasi akan dipilih (terisi putih). Baris kedua memiliki probabilitas 50% dan garis paling atas memiliki probabilitas 10%.
Setelah pulau Anda ditandai seperti itu, Anda dapat menutup celah di antaranya dengan menerapkan operasi morfologis ( melebarkan )
Dan ada kemungkinan lanskap.
"Granularity" dari kebisingan akan menentukan seberapa kecil detail di dunia Anda nantinya. Jadi mungkin yang terbaik adalah bereksperimen dengan nilai-nilai ini.
Juga di mana dan dengan probabilitas apa "posisi" Anda diposisikan, hasilnya akan sangat berbeda. Jika Anda memiliki garis di dekat bagian atas gambar dengan probabilitas tinggi untuk "memilih" suatu pulau, maka Anda dapat membangun semacam lanskap gua, dll.
sumber
24
untukbaseX
danbaseY
, 1 oktaf dan saya memilih untuk mengeluarkan suara skala abu-abu dan menonaktifkan "fraktal". Anda menggunakan bahasa apa ini?Saya akan mulai dengan suara perlin, disaring dengan hati-hati. Anda akan berakhir dengan sesuatu seperti pada gambar yang terlampir pada pertanyaan, dengan pulau-pulau terapung. Juste menghapus pulau terapung setelah itu menggunakan algoritma penghitungan seperti yang dibahas di sini
sumber
Saya benar-benar menerapkan ini mulai dari jawaban yang sangat baik bummzack.
Inilah langkah-langkah yang saya akhiri:
Dan ini adalah contoh hasilnya:
Saya menulis artikel terperinci tentang seluruh proses di sini dan kode (JavaScript) adalah open source, periksa apakah Anda ingin sesuatu siap digunakan;)
sumber