Saya telah bekerja di dunia prosedural 3D untuk sementara waktu sekarang dan saya ingin mulai menambahkan sistem gua. Saat ini saya menggunakan Perlin Noise 2D / 3D untuk generasi medan dikombinasikan dengan Marching Cubes untuk medan yang lebih halus. Aku hanya bingung ketika berbicara tentang gua-gua panjang yang saling berhubungan.
Saya berharap untuk mendapatkan sesuatu yang lebih seperti sistem gua Minecraft. Mereka tampaknya sangat terhubung, bercabang secara acak di hampir segala arah, dan hampir setiap titik di gua akan memiliki tampilan yang cukup melingkar dengan radius yang cukup sama di seluruh (bukan kata-kata terbaik, tetapi tidak yakin bagaimana cara lain untuk meletakkannya) .
Tantangan terbesar untuk menghasilkan gua seperti yang saya inginkan adalah saya ingin menghasilkan dunia dengan cepat. Dunia dihasilkan potongan demi sepotong saat ini, mulai dari tempat pemain itu dan itu menghasilkan keluar dari sana. Saya TIDAK ingin menghasilkan dunia mana pun dan kemudian menggali gua menggunakan pola pengembaraan, automata seluler, dll.
Apakah ada algoritma terkenal yang dapat digunakan untuk ini? Jika demikian, apakah ada yang ingin membagikan bagaimana mereka melakukan hal serupa? Saya sangat menghargai bantuan apa pun.
Sebuah contoh yang baik:
sumber
Jawaban:
Gua Minecraft dihasilkan oleh metode "cacing perlin". Generator ular melalui medan dan membuat terowongan. Minecraft tidak menggunakan noise 3D perlin untuk pembuatan gua, karena cenderung meninggalkan kantung yang tidak terhubung di medan. Gua Minecraft belum dihasilkan melalui 3d Perlin noise sejak versi Alpha yang sangat awal.
Berikut adalah gua di Gnomescroll yang dihasilkan dari metode "perlin worm".
Ini adalah libnoise "Perlin Worms" dari tutorial libnoise. Teknik ini mereproduksi erat gua yang dihasilkan di Minecraft.
Parameter mengular mempengaruhi kualitas sistem gua dan menentukan seberapa vertikal gua dan seberapa cepat mereka berubah arah. Gua-gua di cabang minecraft dan jari-jari terowongan gua bervariasi sepanjang gua.
Minecraft membuat gua berdasarkan chunk by chunk. Pendekatan yang diperlukan rumit dan belum ada yang membalik generator gua Minecraft dengan sempurna, meskipun ada minat dari pemodel server.
Pendekatan yang paling mungkin menghasilkan potongan-potongan gua berliku-liku sebagai potongan ketika peta tak terbatas dihasilkan dan diperluas ke luar. Gua-gua pada bongkahan saat ini adalah fungsi dari biji gua pada bongkahan N terdekat untuk beberapa N. Menggunakan generator bilangan acak yang merupakan fungsi dari koordinat bongkahan untuk menabur gua, dimungkinkan untuk menghitung gua pada bongkahan saat ini untuk peta tak terbatas sambil hanya mengevaluasi potongan dalam radius potongan terbatas.
sumber
Saya akan menghasilkan awan titik di dalam area di mana medannya padat - Anda dapat bereksperimen dengan kepadatan berbeda. Lalu saya akan menggunakan algoritma seperti pohon spanning minimum untuk menghubungkan semua poin - ini akan memastikan bahwa setiap area dapat dijangkau. Kemudian cukup gambar daerah berongga besar (terdiri dari udara) dari node ke node (yaitu garis tebal voxels).
sumber
Edisi April 2011 Game Developer Magazine menjelaskan secara terperinci tentang hal ini dengan fungsi noise Perlin yang berulang - lihat artikel Creator of Worlds mulai dari halaman 21.
sumber
Gunakan fungsi noise untuk menetapkan nilai untuk setiap bongkahan untuk menentukan apakah memiliki terowongan atau tidak dan kemudian menggunakannya untuk memutuskan di mana menempatkan gua. Jika Anda ingin terowongan, cukup gunakan lebih banyak fungsi noise (dengan biji yang berbeda) dan gunakan nilainya untuk menentukan apakah ada terowongan. Setelah itu, gunakan fungsi "menggambar" biasa untuk membuat terowongan. Untuk membuat semuanya lebih realistis, gunakan lebih banyak noise untuk melakukan perpindahan acak untuk titik asal gua / terowongan tersebut.
Jika Anda tidak ingin menggunakan beberapa fungsi noise, Anda dapat menyelidiki pada jarak yang lebih besar - misalnya, daripada melakukan noise3d (2,2,2) untuk chunk di (2,2,2) melakukan noise3d (2,2, 16) dan gunakan (2,2,16) untuk satu nilai, (2,2,17) untuk nilai kedua, dll .... maka sesuaikan frekuensi Anda untuk membuat semua nilai independen atau berkorelasi pada skala pendek.
Untuk memvariasikan kepadatan gua di seluruh dunia, gunakan fungsi frekuensi lain yang lebih rendah yang akan memengaruhi nilai-nilai tersebut.
Dalam hal ini menghasilkan gua-gua yang berantakan, cukup tingkatkan jarak titik-titik yang saling berhubungan atau setel algoritma.
Saya tidak yakin apakah Minecraft memang gua seperti ini (walaupun saya pikir memang demikian), tetapi solusi ini harus memberikan hasil yang memuaskan.
sumber
Meskipun sebagian besar gua seperti yang di atas menggunakan cacing Perlin , beberapa orang lebih suka melakukannya secara manual. Dengan cara ini mereka dapat membuatnya seperti yang mereka inginkan tepat untuk blok. Sebuah gua yang dibuat dengan menggunakan cacing Perlin dapat menjadi tidak akurat dan hanya dapat membuat gua setinggi 5 kaki dan lebar 6 kaki, ini bisa tidak akurat karena Anda mungkin menginginkannya setinggi 10 kaki dan lebar 15 kaki.
sumber