In che modo giochi come Minecraft generano interi mondi da un numero seme?


32

Voglio generare un mondo completamente unico con i biomi (come fanno Minecraft e giochi simili). Non capisco come generino questi interi mondi da un singolo numero "seed". Qualcuno può fornire una panoramica di base della tecnica?


13
Notch in realtà ha scritto un post sul blog sulla generazione del terreno , che ora è completamente obsoleto dal momento che il nuovo codice ha biomi e FRACTALS e altri maghi simili. Non c'è mai stata nemmeno una parte 2.
un gatto,

Risposte:


27
  1. Come si genera una X casuale da un seme? un valore seed è lo stato iniziale di un generatore di numeri casuali. Nella maggior parte dei linguaggi di programmazione, puoi impostare questo seed. Ad esempio, C usa srand(). Se non si specifica un seme specifico con cui iniziare, di solito viene utilizzato come seme un valore di data e ora. In questo modo, ogni volta che esegui, i numeri casuali sono diversi.

    // 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

    Come puoi vedere, ogni volta che esegui il seeding con un determinato valore (ho usato 1 come seed), i numeri casuali risultanti sono gli stessi.

  2. Come si crea un mondo di vita di Minecraft basato su numeri casuali? Notch ha un post su questo. Inoltre, puoi dare un'occhiata ai tutorial di altre persone su "mondi simili a minecraft". Mi è piaciuto questo, ad esempio: rendering simile a Minecraft in OpenGL 4 . L'idea di base è usare il rumore Perlin (o rumore simplex). Ecco una buona domanda sulle funzioni del rumore: Comprensione del rumore Perlin


1
In realtà, non sarai in grado di usare Perlin Noise, temo che Minecraft abbia scogliere, grotte e così via sospese, e PN non può farlo.
jcora,

6
Il rumore Perlin è solo un sistema di rumore che puoi usare come parte di un metodo di generazione del terreno più ampio. per esempio. Puoi usare il rumore perlin 3D con un valore di soglia dipendente dall'altitudine per generare scogliere, grotte, ecc. (Modifica - in effetti, vedo dal link nella risposta che è esattamente ciò che Notch stava facendo ad un certo punto.)
Kylotan

1
+1 Kylotan. Ecco la citazione dal blog di Notch: "Nello specifico, non è possibile che [altezza perlinata 2D Perlin] generi sporgenze. Quindi ho cambiato il sistema in un sistema simile basato sul rumore 3D Perlin. Invece di campionare l'altezza del suolo, I trattato il valore di rumore come la "densità", dove qualsiasi cosa inferiore a 0 sarebbe aria, e qualsiasi cosa maggiore o uguale a 0 sarebbe macinata ".
Jimmy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.