W jaki sposób gry takie jak Minecraft generują całe światy na podstawie liczby początkowej?

32

Chcę wygenerować całkowicie unikalny świat z biomami (jak to, co robią Minecraft i podobne gry). Nie rozumiem, w jaki sposób generują te całe światy z pojedynczej liczby „nasion”. Czy ktoś może przedstawić podstawowy przegląd techniki?

Josh
źródło
13
Notch napisał post na blogu o generowaniu terenu , który jest teraz całkowicie przestarzały, ponieważ nowy kod zawiera biomy, fraktale i inne tego rodzaju czarodziejstwa. Nigdy też nie było części 2.
kot

Odpowiedzi:

27
  1. Jak generujesz losowy X z nasion? wartość początkowa to stan początkowy generatora liczb losowych. W większości języków programowania możesz ustawić to ziarno. Na przykład C wykorzystuje srand(). Jeśli nie określisz konkretnego materiału siewnego na początek, zwykle jest używana wartość znacznika czasu. W ten sposób za każdym razem, gdy biegniesz, liczby losowe są różne.

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

    Jak widać, za każdym razem, gdy wysiewasz z określoną wartością (użyłem 1 jako ziarna), wynikowe liczby losowe są takie same.

  2. Jak stworzyć świat minecrafta oparty na losowych liczbach? Notch ma post na ten temat. Możesz także zapoznać się z samouczkami innych osób na temat „światów podobnych do minecrafta”. Podobał mi się ten, na przykład: renderowanie podobne do Minecraft w OpenGL 4 . Podstawową ideą jest użycie szumu Perlina (lub szumu simpleks). Oto dobre pytanie dotyczące funkcji hałasu: Zrozumienie hałasu Perlina

Jimmy
źródło
1
W rzeczywistości nie będziesz w stanie używać hałasu Perlina. Obawiam się, że minecraft ma wiszące klify, jaskinie i tak dalej, a PN nie może tego zrobić.
jcora
6
Hałas Perlina to po prostu system hałasu, którego można użyć w ramach większej metody generowania terenu. na przykład. Możesz użyć szumu perlina 3D z zależną od wysokości wartością progową do generowania klifów, jaskiń itp. (Edytuj - w rzeczywistości widzę na podstawie linku w odpowiedzi dokładnie to, co zrobił Notch w jednym punkcie).
Kylotan
1
+1 Kylotan. Oto cytat z bloga Notcha: „W szczególności [mapa wysokości Perlina 2D] nie może generować żadnych zwisów. Więc zmieniłem system na podobny system oparty na szumie 3D Perlina. Zamiast próbkowania„ wysokości ziemi ”, ja traktował wartość hałasu jako „gęstość”, w której wszystko niższe niż 0 byłoby powietrzem, a wszystko wyższe lub równe 0 byłoby uziemione. ”
Jimmy