Як такі ігри, як Minecraft, генерують цілі світи з початкового числа?


32

Я хочу створити абсолютно унікальний світ з біомами (як, наприклад, Minecraft та подібні ігри). Я не розумію, як вони генерують цілі світи з одного "насінного" числа. Чи може хтось надати базовий огляд методики?


13
Notch насправді написав повідомлення в блозі про генерування місцевості , яке тепер повністю застаріло, оскільки новий код отримав біоми, FRACTALS та інші подібні майстри. Також ніколи не було частини 2.
кіт

Відповіді:


27
  1. Як ви генеруєте випадковий X із насіння? значення насіння - це початковий стан генератора випадкових чисел. У більшості мов програмування ви можете встановити це насіння. Наприклад, C використовує srand(). Якщо ви не вказали конкретне насіння для початку, зазвичай в якості насіння використовується значення часової позначки. Таким чином, щоразу, коли ви запускаєте, випадкові числа різні.

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

    Як ви бачите, щоразу, коли ви сіяєте з певним значенням (я використовував 1 як насіння), отримані випадкові числа однакові.

  2. Як ви створюєте світ життя майнкрафт на основі випадкових чисел? Notch має пост про це. Також ви можете ознайомитись з навчальними посібниками інших людей про "світи, подібні до майнкрафт". Мені сподобалось це, наприклад: Візуалізація, схожа на Minecraft, у OpenGL 4 . Основна ідея - використовувати шум Перліна (або симплекс-шум). Ось гарне питання щодо шумових функцій: Розуміння шуму Perlin


1
Насправді, ви не зможете використовувати Perlin Noise, боюся, у Minecraft є надмісні скелі, печери і так далі, і PN не може це зробити.
jcora

6
Шум Перліна - це лише система шуму, яку ви можете використовувати як частину більшого способу генерації місцевості. напр. Ви можете використовувати 3D-перлін-шум із пороговим значенням, що залежить від висоти, щоб генерувати скелі, печери тощо (редагувати - насправді я бачу за посиланням у відповіді саме те, що робив Notch в один момент.)
Kylotan

1
+1 Килотан. Ось цитата з блогу Notch: "Конкретно, немає способу [2D Perlin heightmap] генерувати будь-які нависання. Тому я переключив систему на аналогічну систему, засновану на 3D-шумі Перліна. Замість того, щоб взяти вибірку" висоти землі ", я трактували значення шуму як "густину", де все, що нижче 0, було б повітрям, і все, що перевищує або дорівнює 0, було б землею ".
Джиммі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.