Generasi Terrain untuk Platformer 2D Berbasis Ubin


15

Saat ini saya sedang mengerjakan platformer 2D berbasis ubin yang mirip dengan Terraria dalam beberapa hal, meskipun saya mengalami kesulitan dengan generasi terain. Saya memiliki beberapa dasar yang dilakukan, meskipun mereka tidak keluar sebagai sesuatu yang bermanfaat.

Saya telah mencoba beberapa teknik berbeda seperti Perlin Noise dan membaca tentang beberapa yang lain seperti Midpoint Displacement, walaupun saya tidak yakin mana yang terbaik, atau kombinasi teknik yang berbeda untuk menghasilkan area yang berbeda. (Seperti Pemindahan Titik Tengah untuk bentuk umum medan dan Perlin Noise untuk gua-gua.)

Saya telah menemukan penjelasan yang sangat bagus tentang bagaimana saya bisa melapisinya dengan Perpustakaan Kebisingan Kebetulan , meskipun dalam C ++, dan saya tidak tahu cukup C ++ untuk mengkompilasinya menjadi DLL yang dapat saya gunakan dari C #. Saya telah mencoba menyalin ini dalam C #, walaupun, saya tidak tahu bagaimana saya bisa menggabungkan dua efek bersama (gradien untuk basis umum, dan kemudian fraktal untuk detail).

Saat ini saya menggunakan Fraktal Plasma dan hasilnya sangat bervariasi. Misalnya dapat menghasilkan medan di mana hampir tidak ada permukaan, atau dapat menghasilkan medan di mana tidak ada permukaan sama sekali.

Contoh peta yang oke, akan lebih baik dengan beberapa perbaikan lagi. (Hitam solid, putih udara):

Peta yang bagus

Dan contoh peta yang mengerikan. (Hitam solid, putih udara):

Peta yang mengerikan

Pada dasarnya, yang saya tanyakan adalah, apa cara yang lebih baik untuk menghasilkan medan, atau memaksanya untuk memastikan bahwa ada jumlah permukaan yang masuk akal, dengan waktu pembuatan secepat mungkin. Atau, sebagai alternatif, bagaimana saya bisa mencapai hasil yang sama dengan Perpustakaan Kebisingan Kebetulan, tetapi dalam C #.

Setiap contoh akan sangat dihargai.


Hai, saya bertanya-tanya bagaimana Anda membuat ini. Saya mencoba untuk mendapatkan pemahaman tentang cara menghasilkan dunia seperti ini dan saya suka hasil yang Anda dapatkan. Algoritma apa yang Anda gunakan karena tidak terlihat seperti perlin noise 2D dan pasti bukan perlin noise 1D.
G3tinmybelly

Jawaban:


8

Saya akan mencoba bertahan dengan kebisingan Perlin, tetapi menambahkan bobot pada itu berdasarkan ketinggian, untuk memastikan kepadatan rata-rata pada ketinggian tertentu. Mengutip bagian dari pos Notch di generasi medan Minecraft :

Jadi saya beralih sistem ke sistem yang sama berdasarkan kebisingan 3D Perlin. Alih-alih mengambil sampel "ketinggian tanah", saya memperlakukan nilai kebisingan sebagai "kepadatan", di mana sesuatu yang lebih rendah dari 0 adalah udara, dan apa pun yang lebih tinggi dari atau sama dengan 0 akan menjadi tanah. Untuk memastikan lapisan bawahnya padat dan bagian atas tidak, saya hanya menambahkan ketinggian (diimbangi dengan ketinggian air) ke hasil sampel.

Intinya, Anda mengambil sepotong medan Minecraft. Jadi hasilkan 2D Perlin noise, tetapi timbanglah sehingga apa pun yang berada di atas titik tertentu kemungkinan besar adalah udara, dan apa pun di bawah titik tertentu kemungkinan besar adalah tanah.

Ini akan memberi Anda medan tanah yang baik, dengan beberapa overhang dan fitur menarik, serta beberapa gua dan pulau terapung. (Jika Anda tidak ingin pulau terapung, Anda dapat mengujinya dan menghapusnya secara manual.) Metode ini tidak akan memberi Anda hal-hal seperti terowongan, jadi Anda akan menginginkan metode untuk menambahkannya di generasi setelah medan, seperti berjalan secara acak .


Tidak sepenuhnya yakin bahwa saya menggunakan Perlin Noise untuk potensi penuhnya. Setelah melakukan persis seperti yang Anda gambarkan, itu hanya membuat banyak gua, dengan banyak pulau terapung. Tidak ada definisi tipe medan yang sebenarnya. Menggunakan gradien untuk menimbang hasilnya, saya mendapatkan hasil ini .
Dimensi Teduh

@Shaded Dimensions - Parameter Perlin Noise Anda perlu diubah. Anda memiliki noise yang sangat bervariasi, ketika apa yang Anda inginkan adalah pola yang jauh lebih halus dan lebih luas. Lihat freespace.virgin.net/hugo.elias/models/m_perlin.htm dan coba main-main dengan beberapa parameter Anda. Coba ketekunan yang lebih rendah dan oktaf lebih sedikit. (Istilah-istilah ini mungkin berbeda, jadi baca artikel itu.)
dlras2

Oke, terima kasih untuk tautannya. Saya juga menemukan bahwa berat tidak berfungsi sebagaimana mestinya setelah mengubah beberapa parameter.
Dimensi Teduh

Oke, memodifikasi parameternya sedikit dan saya sudah mendapatkan sesuatu yang cukup dapat diterima, untuk saat ini, setidaknya. Saya juga menghapus pembuatan gua hanya untuk tes ini, karena saya ingin menyelesaikan medan yang sebenarnya terlebih dahulu. Ini adalah hasil akhir . Hanya perlu menambahkan cek untuk menghapus pulau-pulau terapung itu. Terima kasih lagi.
Dimensi Teduh

Dimensi Berarsir @ - Bagus! Banyak waktu, medan yang baik datang dari hanya parameter tweaker dan overlay kebisingan. Butuh beberapa saat sebelum Anda mendapatkan sesuatu yang sangat Anda sukai, tetapi Anda selalu dapat menggunakan apa yang Anda miliki sekarang dan kembali untuk menambahkan sentuhan akhir. Semoga berhasil!
dlras2
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.