Генерация карты

Шкала генерации и загрузки мира

Генерация карты — это процесс случайного создания географических и геологических объектов на карте при первом запуске игры на пустом слоте для игрового мира. Процесс генерации отображается на шкале, которую можно увидеть при первой генерации карты. Но при этом карта генерируется не до конца. Она будет продолжать генерироваться по мере продвижения вами по карте. Это сделано для того, чтобы не нагружать игру и компьютер генерацией при первом запуске.

Алгоритм генерации

Алгоритм генерации несколько раз изменялся. Теперь ландшафт генерируется, хранится и загружается с диска и обрисовывается кусками по 16×16×16 блоков. У каждого куска имеется значение смещения, которое хранится в виде 32-битного целого числа и может находиться в диапазоне примерно от минус двух миллиардов до плюс двух миллиардов. Однако мир ограничен и генерируется только в координатах блоков до 30 миллионов во все стороны. Раньше этого ограничения не было и можно было выйти за пределы первого диапазона (а это примерно четверть расстояния от Земли до Солнца), тогда новые куски начинали перекрывать собой старые (так называемые «Далёкие земли»). А после того, как преодолена шестнадцатая часть этого расстояния, функции, использующие вещественные числа для работы с позициями блоков, такие как использование инструментов и поиск путей, начнут странно себя вести.

Генерация местности происходит в следующие несколько этапов:

Генерация биомов

График генерации биомов

Примерный график генерации биомов

Шум Перлина

Это визуализация простого двумерного шума Перлина.

С помощью шума Перлина создаются карты температуры и влажности.

Также на температуру влияет высота. Исключая болото, через каждый блок над уровнем моря (y = 64) температура становится ниже на 1/600. Температура влияет не только на карту биомов, но и на наличие осадков (За исключением грозы, возникающей в любых биомах Верхнего мира). На частоту выпадения осадков влияет влажность. В зависимости от температуры и влажности генерируется карта биомов. Биом реки генерируется на стыке двух биомов или с некоторым шансом в пределе одного биома.

Генерация ландшафта

В ранних версиях игры для придания миру формы была использована карта высот на основе двумерного шума Перлина. Или, если быть точнее, несколько карт высот. Одна для общей высоты, одна для шероховатости ландшафта и одна для мелких деталей. Для каждого столба блоков высота равнялась (общая высота + (шероховатость×детали))×64+64. Карты общей высоты и шероховатости были гладкими, сильно масштабированными шумами, а детали были более мелкими. У этого метода было замечательное преимущество в скорости, так как нужно было проводить всего 16×16×(количество_шумов) расчетов на чанк, но его недостатком был скучный ландшафт. В частности из-за невозможности генерировать нависающие над землей выступы.

Теперь игра перешла на похожую систему, использующую трёхмерный шум Перлина. Теперь уже не генерируется «высота земли». Значение шума было рассматривается как «плотность», и все блоки с плотностью меньше 0 становятся воздухом, а блоки с плотностью больше или равной 0 — землёй. Чтобы нижний слой был твёрдый, а верхний — нет, к полученному результату прибавляется высота (смещение относительно уровня моря). Кроме того, для улучшения результата и ускорения вычислений используется интерполяция - мир делится на блоки 3×4×3, а после вычисления «плотности» для каждого из блоков результаты сглаживаются.

В данной статье используются материалы из статьи «Генерация карты» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.