Comment des jeux comme Minecraft génèrent-ils des mondes entiers à partir d'un numéro de graine?

32

Je veux créer un monde complètement unique avec des biomes (comme ce que font Minecraft et des jeux similaires). Je ne comprends pas comment ils génèrent ces mondes entiers à partir d'un seul numéro "de graine". Quelqu'un peut-il fournir un aperçu de base de la technique?

Josh
la source
13
Notch a en fait écrit un article sur la génération de terrain , qui est maintenant complètement obsolète car le nouveau code contient des biomes et FRACTALS, entre autres. Il n'y a jamais eu de partie 2 non plus.
Un chat

Réponses:

27
  1. Comment générez-vous X aléatoire à partir d'une graine? une valeur de départ est l'état initial d'un générateur de nombres aléatoires. Dans la plupart des langages de programmation, vous pouvez définir cette graine. Par exemple, C utilise srand(). Si vous ne spécifiez pas de graine spécifique pour commencer, une valeur d'horodatage est généralement utilisée comme graine. Ainsi, chaque fois que vous courez, les nombres aléatoires sont différents.

    // C example
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    
    1270216262 
    1085377743 
    1481765933
    1270216262 
    1085377743 
    1481765933

    Comme vous pouvez le constater, chaque fois que vous spécifiez une certaine valeur (j’en ai utilisé 1 en tant que valeur), les nombres aléatoires obtenus sont identiques.

  2. Comment créez-vous un monde minecraft-life basé sur des nombres aléatoires? Notch a un post à ce sujet. Vous pouvez également consulter les didacticiels d'autres personnes sur les "mondes de type minecraft". J'ai apprécié celui-ci, par exemple: Le rendu de type Minecraft dans OpenGL 4 . L'idée de base est d'utiliser le bruit Perlin (ou le bruit simplex). Voici une bonne question sur les fonctions de bruit: Comprendre le bruit de Perlin

Jimmy
la source
1
En fait, vous ne pourrez pas utiliser Perlin Noise. Je crains que minecraft ne possède des falaises, des cavernes, etc., et PN ne peut pas en faire autant.
jcora
6
Le bruit Perlin est simplement un système de bruit que vous pouvez utiliser dans le cadre d'une méthode de génération de terrain plus large. par exemple. Vous pouvez utiliser 3D Perlin bruit avec une valeur de seuil en fonction de l' altitude pour générer des falaises, grottes, etc. (Edit - en fait, je vois à partir du lien dans la réponse qui est exactement ce que Notch faisait à un moment donné.)
Kylotan
1
+1 Kylotan. Voici la citation du blog de Notch: "Plus précisément, il n’ya aucun moyen pour [altimétrie 2D Perlin] de générer des surplombs. J’ai donc basculé le système dans un système similaire basé sur le bruit 3D Perlin. Au lieu d’échantillonner la" hauteur du sol ", a traité la valeur de bruit comme la "densité", où tout ce qui est inférieur à 0 serait de l'air, et tout ce qui est supérieur ou égal à 0 serait de la terre. "
Jimmy