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

Материал из Playzone Minecraft Wiki
Перейти к: навигация, поиск
Шкала процесса генерации карты.

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

На месте ещё не с генерированной части карты вы можете увидеть коренную породу.


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

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

Теперь (примерно с Beta 1.3) пришлось перейти на похожую систему, использующую трехмерный шум Перлина. Теперь уже не генерируется "высота земли". Значение шума было рассматривается как "плотность", и все блоки с плотностью меньше 0 становятся воздухом, а блоки с плотностью больше или равной 0 - землей. Чтобы нижний слой был твердый, а верхний - нет, к полученному результату прибавляется высота (смещение относительно уровня моря).

К сожалению, мгновенно появились проблемы производительности и играбельности. Первые - из-за большого количества требуемых расчетов, вторые - из-за отсутствия плоских местностей и гладких холмов. Решение обеих проблем заключалось в понижении разрешения при расчетах (8x масштабирование по горизонталям и 4x по вертикали) и достраивании ландшафта с помощью линейной интерполяции. В игре появились плоскости и холмы, а заодно исчезло большинство парящих в воздухе блоков.

Окончательная формула, которая используется сейчас, немного улучшена (и секретна!). Она медленно развивалась в течение разработки игры, и, кстати, до сих пор использует двумерные карты высот и шумности.