Penso di capire meglio cosa stai chiedendo ora.
Il rumore non è casuale: ha un aspetto casuale ma è completamente basato su una formula matematica ed è ripetibile. Tutte le informazioni sono codificate nella formula. Ciò significa che puoi avere una formula che potenzialmente copre un'area infinita e usare semplicemente la formula sulle coordinate dell'area di cui hai bisogno. Quando hai bisogno di un'area adiacente, devi semplicemente riutilizzare la formula sulle nuove coordinate e poiché la formula fornisce valori continui, le aree si uniranno senza soluzione di continuità.
Ecco un esempio semplificato, usando il rumore sinusoidale invece del perlin per la generazione dell'altezza, e immaginare il mondo è infinito nell'asse X ma solo 1 unità alta negli assi Y e Z.
La formula è: height(x,y) = sin(x/20)
Il gioco inizia e generiamo altezze per l'area vicina, ad es. Da (0,0) a (9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
Abbiamo una collina, che sale verso destra. Diciamo che camminiamo fino alla fine e dobbiamo generare i valori da (10,0 a 19,0) ora:
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
Notare come la collina continua a salire costantemente e che il valore di (10,0) segue piacevolmente quello di (9,0). Questo perché la funzione seno è continua, il che significa sostanzialmente che se lo inserisci 2 numeri adiacenti, otterrai 2 risultati adiacenti - per una certa definizione di adiacente. Quindi, se usi le coordinate del tuo mondo come parametri della funzione che definisce il tuo mondo, otterrai un paesaggio continuo che si adatta insieme, indipendentemente da quanto o poco ne generi in una volta. Quando si generano nuove parti, queste fluiranno automaticamente dalle parti esistenti, poiché le altezze sono già predeterminate.
Se il mondo non cambierà, non è nemmeno necessario memorizzare nulla, dal momento che puoi calcolare esattamente quale sia l'altezza in un dato punto dalla formula. Ovviamente con qualcosa come Minecraft il mondo è totalmente deformabile, quindi ti basta salvare ogni pezzo mentre lo crei. Dato che esiste un alto grado di coerenza tra blocchi adiacenti (ad es. Se 1 blocco è erba, è più probabile che non anche il blocco accanto ad esso sia erba) è possibile comprimere i dati in modo molto efficiente - la codifica della lunghezza di esecuzione funzionerebbe bene, ma così sarebbe quasi ogni algoritmo di compressione standard.
Mentre ho parlato dell'altezza come il valore più ovvio, puoi usare lo stesso sistema per generare qualsiasi caratteristica tu voglia. Usa una funzione matematica con proprietà continue e in cui gli input sono le tue coordinate mondiali e che può decidere la presenza di punti di riferimento, depositi minerali, punti di spawn, qualunque cosa tu voglia. (Ovviamente i valori di una formula possono influire su un'altra: non ha senso collocare un deposito di carbone a mezz'aria, quindi si genera la mappa dell'altezza mondiale e quindi si calcolano solo le possibilità di carbone per i blocchi abbastanza lontani dal terreno.)