Saya pikir saya lebih mengerti apa yang Anda minta sekarang.
Kebisingan tidak acak - tampak acak tetapi sepenuhnya didasarkan pada rumus matematika dan dapat diulang. Semua informasi dikodekan dalam formula. Ini berarti bahwa Anda dapat memiliki rumus yang berpotensi mencakup area tak terbatas, dan cukup gunakan rumus pada koordinat area yang Anda butuhkan. Saat Anda membutuhkan area yang berdekatan, Anda cukup menggunakan ulang rumus pada koordinat baru, dan karena rumus menghasilkan nilai kontinu, area tersebut akan bergabung dengan mulus.
Berikut adalah contoh yang disederhanakan, menggunakan sinus bukannya perlin noise untuk generasi tinggi, dan membayangkan dunia tak terbatas dalam sumbu X tetapi hanya 1 unit tinggi di sumbu Y dan Z.
Formula adalah: height(x,y) = sin(x/20)
Permainan dimulai, dan kami menghasilkan ketinggian untuk area terdekat, yaitu. (0,0) hingga (9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
Kami memiliki bukit, naik ke arah kanan. Katakanlah kita berjalan sampai akhir dan perlu menghasilkan nilai dari (10,0 hingga 19,0) sekarang:
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
Perhatikan bagaimana bukit terus naik dengan mantap, dan bahwa nilai pada (10,0) mengikuti dengan baik dari yang di (9,0). Ini karena fungsi sinus kontinu, yang pada dasarnya berarti bahwa jika Anda memasukkan 2 angka yang berdekatan, Anda akan mendapatkan 2 hasil yang berdekatan - untuk definisi tertentu yang berdekatan. Jadi jika Anda menggunakan koordinat dunia Anda sebagai parameter untuk fungsi yang mendefinisikan dunia Anda, Anda akan mendapatkan lanskap berkelanjutan yang cocok bersama tidak peduli berapa banyak atau sedikit dari itu Anda hasilkan sekaligus. Ketika Anda menghasilkan bagian baru, mereka akan mengalir dari bagian yang ada secara otomatis, karena ketinggian sudah ditentukan sebelumnya.
Jika dunia tidak akan berubah, Anda bahkan tidak perlu menyimpan apa pun, karena Anda dapat menghitung dengan tepat berapa tinggi pada titik tertentu dari rumus. Tentunya dengan sesuatu seperti Minecraft, dunia ini benar-benar dapat dideformasi sehingga Anda hanya menyimpan setiap potongan saat Anda membuatnya. Mengingat bahwa ada tingkat koherensi yang tinggi antara potongan yang berdekatan (mis. Jika 1 blok adalah rumput, kemungkinan besar blok di sebelahnya juga rumput). Anda dapat mengompres data dengan sangat efisien - pengkodean jangka panjang akan bekerja baik, tapi kemudian hampir semua algoritma kompresi standar.
Sedangkan saya telah berbicara tentang tinggi sebagai nilai yang paling jelas, Anda dapat menggunakan sistem yang sama untuk menghasilkan karakteristik apa pun yang Anda inginkan. Gunakan fungsi matematika dengan sifat kontinu dan di mana inputnya adalah koordinat dunia Anda dan yang dapat menentukan keberadaan landmark, deposit mineral, titik spawn, apa pun yang Anda suka. (Jelas nilai-nilai dalam satu formula dapat memengaruhi formula lainnya - tidak ada titik menempatkan deposit batubara di udara, sehingga Anda menghasilkan peta ketinggian dunia dan kemudian hanya menghitung kemungkinan batubara untuk blok yang cukup jauh di bawah tanah.)