Как такие игры, как Minecraft, генерируют целые миры из начального числа?

32

Я хочу создать совершенно уникальный мир с биомами (например, что делают Minecraft и подобные игры). Я не понимаю, как они генерируют эти целые миры из одного «начального» числа. Может ли кто-нибудь дать базовый обзор техники?

мистифицировать
источник
13
Нотч на самом деле написал пост в блоге о создании ландшафта , который сейчас полностью устарел, так как в новом коде есть биомы, фракталы и другие подобные волшебства. Там тоже никогда не было второй части.
кошка

Ответы:

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. Как вы создаете мир Minecraft-Life, основанный на случайных числах? У Notch есть пост об этом. Кроме того, вы можете проверить учебники других людей о "мирах, похожих на майнкрафт". Мне понравился этот, например: Minecraft-подобный рендеринг в OpenGL 4 . Основная идея состоит в том, чтобы использовать шум Перлина (или симплексный шум). Вот хороший вопрос о шумовых функциях: Понимание Perlin Noise

Джимми
источник
1
На самом деле, вы не сможете использовать Perlin Noise. Боюсь, у майнкрафта есть нависающие скалы, пещеры и так далее, и PN не может в это поверить.
Jcora
6
Шум Перлина - это просто шумовая система, которую вы можете использовать как часть более крупного метода генерации ландшафта. например. Вы можете использовать трехмерный перлин-шум с пороговым значением, зависящим от высоты, для генерации скал, пещер и т. Д. (Правка - фактически, по ссылке в ответе я вижу, что именно то, что делал Нотч в какой-то момент).
Килотан
1
+1 килотан. Вот цитата из блога Notch: «В частности, [2D Perlin heightmap] не может генерировать какие-либо навесы. Поэтому я переключил систему на аналогичную систему, основанную на 3D-шуме Perlin. Вместо выборки« высоты земли »я рассматривал значение шума как «плотность», где все, что ниже 0, будет воздухом, а все, что выше или равно 0, будет землей ».
Джимми