La plupart des algorithmes de bruit perlin vous permettront de récupérer la valeur du bruit à n'importe quel endroit donné, avec quelque chose comme noise(x,y,z)
. Il est donc assez simple de générer du bruit morceau par morceau. Tout ce que vous devez faire est de passer la position globale, au lieu de la position de bloc.
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);
Vous pouvez donc voir que nous générons un terrain pour le bloc, en itérant sur les limites du bloc et en vérifiant si cette position globale est solide ou non. Il s'agit probablement de la même méthodologie que vous utilisez pour générer le terrain en général.
perlinNoise.get
prend une position globale et rend sa densité. Où isSolid
serait juste un simple test pour voir si le voxel est "suffisamment dense" pour se qualifier pour le solide.
perlinNoise.get
peut être plus complexe qu'un simple algorithme de bruit. Vous pouvez avoir des contrôles basés sur la profondeur du voxel dans votre monde. Par exemple, si le voxel est en dessous de ce que vous avez décidé d'être "au niveau du sol de base absolu", alors il peut utiliser l'algorithme des vers perlin pour renvoyer une densité, s'il est au-dessus de la base absolue, il peut utiliser une fonction de densité normale pour vous donner terrain plus varié. Je recommanderais cependant un mélange entre les deux.
La combinaison de différentes fonctions de bruit Perlin est juste quelque chose avec laquelle vous devez jouer et voir ce qui fonctionne. Il est préférable de configurer votre environnement de sorte que vous puissiez simplement modifier certaines valeurs et échanger à chaud le terrain sans avoir besoin de recharger votre jeu. Bonne expérimentation.