Как Minecraft устроена за кадром
Насколько часто встречаются руды, как устроен генератор мира и откуда взялись «Далёкие земли».
В рубрике «За кадром» редакция и пользователи DTF публикуют и переводят материалы про «закулисье» видеоигр — контент, скрытый от посторонних глаз. Сюда попадают различные геймдизайнерские и художественные приёмы, которые наглядно демонстрируют то, как разрабатываются видеоигры, — а также разного рода баги и пасхалки.
Но выпуск про Minecraft получился немного иным. В отличие от других игр в рубрике, миры в Minecraft генерируются случайным образом. В них не отыскать ни пасхалок, ни «закулисного» контента — лишь баги и интересные закономерности при создании уровней.
Поэтому данный материал вряд ли будет полезен с точки зрения геймдева. Но зато здесь вы сможете прочесть множество любопытных фактов про техническую сторону Minecraft — известных и не очень.
Начнём с главного — с руд, которые нужно добывать. Они скрыты в толще каменных пород, и зачастую игрок вынужден копать вслепую, чтобы наткнуться на нужный металл.
Впрочем, если отключить текстуры камней при помощи читов, станет видно, насколько часто руды встречаются на самом деле. Те, кто хоть раз пробовал использовать моды в духе X-Ray, сразу узнают вид.
В Minecraft чем ниже копать, тем более редкие металлы начнут попадаться. Верхние пласты зачастую занимает уголь с железом, а пониже начинают появляться редстоун, золото, лазурит и настоящая ценность — алмазы с изумрудами. Последние, кстати, спаунятся лишь в горных биомах.
Вот так выглядит примерное распределение руд по всей высоте карты.
Миры в Minecraft поделены на чанки — столбы площадью 16х16, — и, согласно статистике, как минимум три блока алмазной руды приходится на один чанк. Так что если вы за несколько часов не нашли ни один из них, скорее всего, вы просто неправильно копаете.
Популярный совет о том, что если вы нашли лавовое озеро, то где-то рядом должны быть алмазы — это заблуждение. Генерация озёр и алмазной руды никак не взаимосвязаны — просто чаще всего их можно найти на одной высоте.
При помощи того же X-Ray можно увидеть, как выглядит сеть подземных пещер.
Следующие трюки можно провернуть и без читов — достаточно просто зайти в настройки генерации уровня.
Если в опциях создания плоского мира включить заброшенные шахты, но убрать слой камня, уровень будет выглядеть как-то так.
Таким же образом можно получить подземные Крепости в чистом виде.
Вот что будет, если создать плоский мир из песка и сломать нижний блок. Когда это происходит, все сторонние блоки считывают, что песок рядом с ними сломался — в итоге срабатывает триггер, и все они устремляются вниз.
Долго это пронаблюдать не получится, так как игра крашится.
В основе генерации мира Minecraft лежат шумы Перлина — алгоритм для генерации объёмных ландшафтов.
Генератором создаётся карта шумов — или, грубо говоря, карта высот. Её можно сравнить с топографической картой: там, где светлее — местность выше, там, где темнее — ниже.
Но получившаяся карта далека от идеала — большие значения могут соседствовать рядом с маленькими, из-за чего местность получается неестественно обрывистой. Что-то подобное можно было наблюдать в самой первой версии Minecraft, которая тогда ещё называлась «Cave Game».
Чтобы «сгладить» ландшафт, применяется интерполяция — находятся промежуточные значения. Генерируются горы и низины.
Затем добавляются элементы вроде деревьев, рек, озёр, деревень NPC и так далее. Получается привычный нам мир.
В отличие от игрового уровня, облака в Minecraft не генерируются случайно — наоборот, у них всегда одна и та же текстура, которую можно найти в файлах игры.
А если во время ливня подняться значительно выше облаков (где-то на высоту 460-470 блоков), дождь сменится снегопадом. Это касается не всех биомов — в пустыне осадков вообще никаких нет.
Из-за дальности прорисовки, если подняться на большую высоту, солнце можно увидеть даже ночью, а луну — днём.
Если применить зелье невидимости на пауках, в воздухе останутся видны их глаза. Разработчики смогли это реализовать в том числе благодаря тому, что глаза с технической точки зрения — это отдельная текстура.
С Эндерменами та же история.
Сейчас многие модификации и программы позволяют посмотреть на то, как тот или иной сгенерированный мир выглядит сверху. Ниже — несколько примеров со снимками.
Вот тут показана карта мира со всеми адскими крепостями, на которые можно наткнуться, если активировать портал в Нижний мир. Видно, что они генерируются полосами с юга на север.
А на снимке ниже по краям отчётливо видно, что с генератором происходит что-то не то.
Это называется «Далёкие земли» (Far Lands) — искажения в генераторе мира после того, как игрок пересекает координату в 12 550 824 блока от центра. Эффект уже пофиксили в Java Edition на ПК, но на мобильных платформах и консолях он всё ещё существует.
Причина генерации «Далёких земель» следующая. Как уже было сказано ранее, генератор миров использует трёхмерный шум Перлина, чтобы создать мир.
Карта шума покрывает значения в интервале [−2^31, 2^31) — поэтому, грубо говоря, последнее значение, которое учитывается картой, это число, меньшее 2^31 или 2 147 483 648.
При этом на каждый блок отводится 171,103 значений шума. И если разделить 2^31 на это число, получается 12 550 824 — место прохождения границы Далёких земель. На этих координатах с генератором начинают происходить ошибки.
Вот так они выглядят в Эндере.
А вот так — в Java Edition до того, как их пофиксили в версии Beta 1.8. На каждой платформе они смотрятся по-разному.
В Java Edition на ПК для того, чтобы «Далёкие земли» не появлялись в принципе, их сначала «отодвинули» при помощи фикса на расстояние свыше 30 миллионов блоков, а затем ограничили генерацию мира дальше этих значений.
Теперь, как только игрок попытается добраться до туда, на координате 29 999 983 он увидит мерцающую стену — границу мира.
Ну и напоследок немного типичного контента для рубрики. У снежного голема под тыквенным шлемом скрыто лицо снеговика.