Je pense que je comprends mieux ce que vous demandez maintenant.
Le bruit n'est pas aléatoire - il a une apparence aléatoire, mais il est complètement basé sur une formule mathématique et peut être répété. Toutes les informations sont encodées dans la formule. Cela signifie que vous pouvez avoir une formule qui couvre potentiellement une zone infinie et utilisez-la simplement sur les coordonnées de la zone dont vous avez besoin. Lorsque vous avez besoin d'une zone adjacente, il vous suffit de réutiliser la formule sur les nouvelles coordonnées et, étant donné que la formule génère des valeurs continues, les zones se rejoignent de manière transparente.
Voici un exemple simplifié, utilisant le sinus au lieu du bruit perlin pour la génération de hauteur, et imaginant que le monde est infini sur l’axe des X, mais qu’il n’ya qu’une unité de hauteur sur les axes Y et Z.
La formule est: height(x,y) = sin(x/20)
Le jeu commence et nous générons des hauteurs pour les environs, c.-à-d. (0,0) à (9,0):
[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]
Nous avons une colline qui monte vers la droite. Disons que nous allons jusqu'au bout et devons générer les valeurs de (10,0 à 19,0) maintenant:
[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]
Remarquez que la colline continue à monter régulièrement et que la valeur de (10,0) découle bien de celle de (9,0). Cela est dû au fait que la fonction sinus est continue, ce qui signifie que si vous lui introduisez 2 nombres adjacents, vous obtiendrez 2 résultats adjacents - pour une certaine définition de adjacente. Ainsi, si vous utilisez les coordonnées de votre monde comme paramètres de la fonction qui définit votre monde, vous obtiendrez un paysage continu qui s'agencera, peu importe la quantité ou la quantité générée à la fois. Lorsque vous générez de nouvelles pièces, elles découlent automatiquement des pièces existantes, car les hauteurs sont déjà prédéterminées.
Si le monde ne va pas changer, vous n'avez même pas besoin de stocker quoi que ce soit, car vous pouvez calculer exactement quelle est la hauteur à tout moment de la formule. Évidemment, avec quelque chose comme Minecraft, le monde est totalement déformable, il vous suffit donc de sauvegarder chaque morceau au fur et à mesure que vous le créez. Étant donné le haut degré de cohérence entre les morceaux adjacents (par exemple, si un bloc est en herbe, il est plus probable qu'improbable que le bloc à côté soit en herbe également), vous pouvez compresser les données de manière très efficace - le codage en longueur devrait fonctionner bien, mais alors presque tout algorithme de compression standard.
Alors que j'ai parlé de la hauteur comme valeur la plus évidente, vous pouvez utiliser le même système pour générer les caractéristiques de votre choix. Utilisez une fonction mathématique avec des propriétés continues et où les entrées sont vos coordonnées mondiales et qui peuvent décider de la présence de points de repère, de gisements minéraux, de points d'apparition, comme vous voulez. (Évidemment, les valeurs d'une formule peuvent en affecter une autre - inutile de placer un gisement de charbon dans les airs, vous générez donc la carte de la hauteur du monde, puis vous ne calculez que les possibilités de charbon pour les blocs situés suffisamment au-dessous du sol.)