Saat ini saya mencoba membuat Minecraft seperti medan voxel dengan 3D Simplex Noise dan juga ingin mengimplementasikan gua.
Saya menemukan metode Cacing Perlin di utas ini , yang menghasilkan hasil yang sangat bagus. Namun, saya tidak tahu bagaimana cara menghasilkannya secara chunk. Apakah ini mungkin atau adakah alternatif yang menghasilkan cacing yang mirip seperti gua berdasarkan sepotong demi sepotong?
Sunting: Ini adalah masalah yang saya tidak tahu bagaimana menyelesaikannya.
Sunting2: Ini adalah hasil dari menggabungkan 2D Ridged Multifractal Noise dengan Simplex Noise heightmap. Masih perlu beberapa penyesuaian, tetapi ini adalah hasil yang saya inginkan. Terima kasih kepada Byte56.
terrain
minecraft-modding
voxels
perlin-noise
user000user
sumber
sumber
Jawaban:
Sebagian besar algoritma derau perlin akan memungkinkan Anda untuk mengambil nilai derau di lokasi tertentu, dengan sesuatu seperti
noise(x,y,z)
. Ini membuatnya cukup sepele untuk menghasilkan noise berdasarkan chunk by chunk. Yang perlu Anda lakukan adalah melewati posisi global, bukan posisi chunk.Jadi Anda dapat melihat, kami membuat medan untuk chunk, dengan mengulangi batas chunk, dan memeriksa untuk melihat apakah posisi global itu solid atau tidak. Ini kemungkinan metodologi yang sama yang Anda gunakan untuk menghasilkan medan secara umum.
perlinNoise.get
mengambil posisi global dan mengembalikan kepadatannya. Di manaisSolid
hanya akan menjadi tes sederhana untuk melihat apakah voxel itu "cukup padat" untuk memenuhi syarat untuk padat.perlinNoise.get
bisa jadi lebih kompleks dari sekadar algoritma noise sederhana. Anda dapat memiliki cek berdasarkan kedalaman voxel di dunia Anda. Misalnya, jika voxel di bawah apa yang Anda putuskan adalah "level dasar absolut", maka ia dapat menggunakan algoritme cacing perlin untuk mengembalikan kepadatan, jika di atas basis absolut, ia dapat menggunakan fungsi kerapatan normal untuk memberi Anda medannya lebih bervariasi. Saya akan merekomendasikan beberapa campuran antara keduanya.Menggabungkan berbagai fungsi kebisingan Perlin hanyalah sesuatu yang harus Anda mainkan dan lihat apa yang berhasil. Yang terbaik adalah mengatur lingkungan Anda sehingga Anda hanya dapat mengubah beberapa nilai dan bertukar hot-terain tanpa perlu memuat ulang game Anda. Selamat bereksperimen.
sumber
Saya pikir ini cara kerjanya di Minecraft. Setiap cacing memiliki panjang maksimum (sebut saja
M
). Kepala setiap cacing dihitung berdasarkan posisi chunk. Ketika Anda membuat setiap potongan, Anda harus memeriksa semua potongan dalamM
radius, dan mengikuti semua cacing mereka. Ini tidak ideal dalam hal kinerja, tetapi berhasil.sumber