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.
for(int i = 0; i < CHUNKMAX_X; i++)
for(int j = 0; j < CHUNKMAX_Y; j++)
for(int k = 0; k < CHUNKMAX_Z; k++)
if(isSolid(perlinNoise.get(chunkPosition.x + i,
chunkPosition.y + j,
chunkPosition.z + k))
thisChunk[i,j,k] = new Voxel(solid);
else
thisChunk[i,j,k] = new Voxel(air);
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 mana isSolid
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.