The update that changed the world
The update that changed the world
Майнкрафт 1.7.10 Java Edition
Средняя оценка: 3.5
Майнкрафт 1.7 получил название The Update that Changed the World, что означает «Обновление, изменившее мир». Оно полностью оправдывает себя, ведь в игру было добавлено множество новых биомов и структур, что очень сильно повлияло на генерацию мира. Версия 1.7.10 стала финальным релизом, в котором устранили множество новых багов, а также добились отличной оптимизации. Эту версию все еще часто скачивают, ведь она содержит очень много контента, но при этом хорошо подходит для слабых ПК.
Именно в этой версии появился новый тип генерации мира под названием «Расширенный» (Amplified). Он позволит создавать невероятные миры с огромными горами, плавающими островами и другими необычными элементами рельефа. Однако, в Майнкрафт 1.7.10 известен и многими другими нововведениями.
Новые биомы
Большая часть биомов, присутствующих сегодня в Minecraft, была введена именно в этой версии. В апдейте 1.7 были добавлены такие типы местности:
Кроме того, для многих биомов были введены подвиды, которые сделали игру еще более разнообразными. Например, горы могли появиться в виде плато, а на границе с морем стала генерироваться переходная местность, выполняющая роль пляжа.
Многие существующие биомы также получили заметные изменения. Например, в 1.7.10 растительность на болоте получила другие цвета, на равнинах появились новые виды цветов, а в горах на определенной высоте начинал появляться снег. Значительно изменились океаны. С этой версии их средний размер стал гораздом меньше, а вероятность появления островов увеличилась.
Больше блоков и структур
В игру было введено два новых дерева: акация и темный дуб. Они были необходимы для наполнения таких биомов, как саванна и темный лес. Вместе с самими деревьями в игру были введены их саженцы, бревна и доски. Также появились несколько видов цветов, предназначенных как для старых, так и для новых биомов.
Любителей декораций порадовало введение разноцветных стекол. Совмещая их с любым доступны красителем, игрок могу получать множество вариаций стеклянных блоков и украшать с их помощью свою базу.
Другие изменения
В этом обновлении было исправлено множество ошибок, связанных с поведением мобов. Это сделало их действия более логичными и реалистичными. Также разработчики переработали систему генерации мира, благодаря чему игроки стали гораздо реже встречать неподгруженные чанки и другие ошибки. В релизе 1.7.10 было уделено много внимания сервису Realms, который стал гораздо удобнее для игроков.
Скачав версию 1.7.10, ты получишь доступ к огромному количеству модов. Именно после её выхода наблюдался резкий рост активности модмейеров. В этом время было выпущено множество интересных дополнений, многие из которых актуальны и сегодня.
1.28- The Update that Changed the World Again
The Update that Changed the World Again is a major Minecraft Update released on June 14, 2024. It is the second update focused on Biomes and World Generation, and is the sequel to The Update that Changed the World. It adds many new Biomes, as well as massively updating all older Biomes. The Biomes it adds are mainly similar to their real-world counterparts, but some are brand new. It includes some content inspired by the Biomes O’ Plenty mod. It is the largest Minecraft update ever.
Contents
Additions
Blocks
White Cherry Leaves
White Cherry Sapling
Pink Cherry Leaves
Pink Cherry Saplings
Ancient Oak Log
Ancient Oak Leaves
Ancient Log Sapling
Flowering Oak Leaves
Flowering Oak Sapling
Yellow Autumn Leaves
Yellow Autumn Sapling
Loamy Grass Block
Silty Grass Block
Chiseled Mud Bricks
Items
Rainbow Milk Bucket
Tools and Weapons
Armor
Posion Dart Frog
Structures
Biomes
Cherry Blossom Grove
Trees
Flowering Oak Tree
Yellow Autumn Tree
White Cherry Tree
Pink Cherry Tree
Ancient Oak Tree
Terrain Generation
Changes
Blocks
Dark Oak Leaves
Items
Structures
Biomes
Trees
Advancements
Somewhere Over the Rainbow
Snapshots
24w12a (Plant Life)
Adds Flowering Oak Leaves, Flowering Oak Sapling, Wheat Grass, Clover, Flax, Buttercup, Orange Cosmos, Flax String, Orchard, Scrubland, Rainforest, and Flowering Oak Tree.
24w13a (Forest Update)
Adds Mud, Dried Mud, Packed Dirt, Mud Bricks, Chiseled Mud Bricks, Raw Duck, Cooked Duck, Raw Squirrel, Cooked Squirrel, Bear Fur, Squirrel Fur, Duck Egg, Acorn, Bear Armor, Squirrel Armor, Brown Bear, Black Bear, Duck, Owl, Mud Patches, and Boulders.
24w14a (New Woods)
Adds Vertical Planks, Carved Planks, Fir Log (and variants), Fir Leaves, Fir Sapling, Maple Log (and variants), Maple Leaves, Maple Sapling, Toadstool, Leaf Pile, Dead Leaf Pile, Flat Mushroom, Violet, Fir Tree, Maple Tree, Shield, Woodland, and Maple Woods.
21w14b (Biome Fix)
Fixed a bug where Stone patches would spawn over Rivers in Shields.
21w15a (Tundra Update)
Adds Penguin Egg, Raw Venison, Cooked Venison, Penguin Feather, Freezing Arrow, Penguin, Reindeer, and Musk Ox.
24w16a (New Forests)
Adds Dead Log (and variants), Redwood Log (and variants), Redwood Leaves, Redwood Sapling, Dying Leaves, Dying Sapling, Yellow Autumn Leaves, Yellow Autumn Sapling, Loamy Dirt, Loamy Grass Block, Thorns, Thorn, Dead Tree, Dying Tree, Redwood Tree, Yellow Autumn Tree, Dead Forest, Redwood Forest, and Boreal Forest.
24w17a (Jungle Update)
Adds Jungle Lock, Fire Trap, Banana, Baked Banana, Raw Piranha, Cooked Piranha, Bomb Arrow, Mystic Vine, Jungle Key, Vine Whip, Whisperer, Poison-Quill Vine, Leapleaf, Poison Dart Frog, Piranha, Monkey, and Jungle Ruins.
24w18a (Oceanic Biomes)
Adds Rainbow Log, Rainbow Leaves, Rainbow Sapling, Pink Buttercup, Hibiscus, Ash Block, Ash, Rainbow Milk Bucket, Moobow, Rainbow Tree, Volcano, Tropical Island, and Rainbow Hills.
24w19a (Plains Update)
Adds Foliage, Raw Lizard, Cooked Lizard, Lizard Scale, Ferret Fur, Lizard Armor, Ferret Armor, Lizard, Ferret, and Ferret Burrows.
24w20a (Peaceful Biomes)
Adds Cherry Log, White Cherry Leaves, White Cherry Sapling, Pink Cherry Leaves, Pink Cherry Saplings, Jacaranda Log, Jacaranda Leaves, Jacaranda Sapling, Pink Daffodil, Lavender, Silty Dirt, Silty Grass Block, White Cherry Tree, Pink Cherry Tree, Jacaranda Tree, Cherry Blossom Grove, Lavender Fields, and Bog.
24w21a (Dark Forest Update)
Adds Ancient Oak Log, Ancient Oak Leaves, Ancient Oak Sapling, Ivy, Itching Ivy, Moth Blossom, Moth Scale, Nocturnal Potion, Moth, and Ancient Oak Tree.
Minecraft Forums
1.7 Pre-Release: «The Update That Changed the World»
Are you ready? Really? You’re really ready? Okay, here we go: THE 1.7 (pre-release) IS READY FOR TESTING!
Comments
Looking forward to the plugin API!
Nice
Less lag?
I have 9999999999999999999% moar lag.
Yes, I’m so freaking sick and tired of them claiming that there is less lag/better performance ect. It is all LIES. Most notably in chunk updates are completely broken.
I can effectively halt chunk loading simply by rotating my view. Try it yourself everyone. Create a map, fly up a bit to see the terrain around, and spin your view at a viewable but decent pace, Open your F3 and watch as the chunk updates hover around 0 for 99% of the time while the area within render distance stays less than half loaded. I can do this until ultimate boredom or my arm grows weary. Stop, give a second or two and they jump up to
40. Start spinning again, and it all comes to a grinding halt.
Back in Alpha and Beta days, where performance is supposedly «crap». I could allocate 4G of ram and practically have insta load terrain even on new generation. Now it doesn’t make any difference. I can allocate 16G and Minecraft just sits there only ever using
400mb at any point in time, failing to do but 2 thing at a time.
Mojang is getting good with the propaganda. Official announcement of improved performance every snapshot and release. People shout the praise as performance actually it continues to degrade.
But it’s not coming with 1.7’s release, it’s still under development.
Yeah, that was a mistake in the original post (on mojang.com) and has been corrected.
The change they did was to remove giant oceans that were thousands of blocks in all directions.
awesome. one of the best updates on minceraft history ^^
sorry for bad english
Because it is hilarious.
Because it is hilarious.
Yes, I’m so freaking sick and tired of them claiming that there is less lag/better performance ect. It is all LIES. Most notably in chunk updates are completely broken.
I can effectively halt chunk loading simply by rotating my view. Try it yourself everyone. Create a map, fly up a bit to see the terrain around, and spin your view at a viewable but decent pace, Open your F3 and watch as the chunk updates hover around 0 for 99% of the time while the area within render distance stays less than half loaded. I can do this until ultimate boredom or my arm grows weary. Stop, give a second or two and they jump up to
40. Start spinning again, and it all comes to a grinding halt.
Back in Alpha and Beta days, where performance is supposedly «crap». I could allocate 4G of ram and practically have insta load terrain even on new generation. Now it doesn’t make any difference. I can allocate 16G and Minecraft just sits there only ever using
400mb at any point in time, failing to do but 2 thing at a time.
Mojang is getting good with the propaganda. Official announcement of improved performance every snapshot and release. People shout the praise as performance actually it continues to degrade.
We need to accept it:
Every new update = Less FPS
Worst single player mode. Now their uses another network system that just print in my console things like:
Client> [19:25:59] [Server thread/WARN]: Can’t keep up! Did the system time change, or is the server overloaded? Running 95174ms behind, skipping 1903 tick(s)
THIS is no lag for Mojang?
The thing that I most hate in MC that SP mode uses a server. WTH is the sense of that?!
Adventure Update
Логотип обновления «Adventure Update».
Minecraft Adventure Update (Приключенческое обновление) — это крупное обновление, фокусирующееся на битвах, исследованиях и приключениях, а также многих других аспектах. Оно было выпущено в составе обновлений Beta 1.8 и 1.0.0.
Содержание
Нововведения
Трейлер
Официальный трейлер обновления, был сделан Hat Films и загружен на официальный канал Mojang 6 сентября 2011: https://youtu.be/tYoO9XkCCHg
Критика
Из-за большого количества вещей добавленных и изменённых в Beta 1.8, оно было раскритиковано большинством игроков. [4] Одной из наиболее критикуемых изменений стала новая система генерации. Если игрок загружает мир, созданный до обновления и идёт исследовать новые чанки, мир будет сломан, вызывая не состыковки генерации мира между старыми и новыми чанками. [5] Это также означает, что старые сиды не будут работать.
Другим раскритикованным нововведением был голод, который, по словам некоторых игроков, делает игру более сложной, так как голод постоянно падает со слишком быстрой скоростью. Было также холодно встречено новое поведение дружелюбных мобов, убегающих при получении урона, делая сбор предметов более сложным. И напротив, другие игроки считают, что это сделало игру более интересной, с чем согласился Нотч, и что «коровы, просто стоят на месте и смотрят на меня, пока я их бью снова и снова чтобы получить их заветный дроп» и это нововведение должно сделать игру веселее. [6]
Обновление изменило некоторые текстуры: жареная свинина стала светлой, а её оригинальная текстура была отдана жареной говядине, замшелый булыжник стал светлее. Сундук стал меньше, получил объёмный замок и стал открываться. Теперь он не открывается, если сверху стоит другой блок.
Некоторые люди также заявили, что это сделало игру более сложной и что Minecraft теперь стал игрой о битвах и выживании, нежели простой песочницей, какой он был на ранних стадиях разработки.
Наоборот, другие восхвалили возможности, добавленные в обновлении и заметили, что они сделали игру более захватывающей и вызывающей. Множество игроков обрадовалось добавлению давно желанного режима творчество, которое убирает все аспекты выживания из игры, позволяя игрокам фокусироваться исключительно на строительстве.
Как происходит генерация мира Minecraft
Задумывались ли вы когда-нибудь, сколько на нашей планете песчинок? По грубым оценкам, более 7 квинтиллионов! Это 7 с 18 нулями. И всё-таки это даже меньше половины количества уникальных миров в Minecraft. Как же Minecraft и другим похожим играм удаётся создавать такие сложные, красивые, однако полностью процедурные миры? В этой статье я расскажу, как игра генерирует свои миры, от самой высокой горы до самой глубокой пещеры.
Часть 1: процедурная генерация
Для многих из вас Minecraft может быть первой (а может быть, и единственной) игрой, в которой миры не творятся вручную дизайнером уровней, а создаются процедурно.
Однако первой игрой с процедурно сгенерированным миром является «Elite», первая версия которой вышла для компьютера BBC Micro в 1984 году. Это прапрадед относительно новой «Elite: Dangerous», выпущенной в 2014 году.
Автоматическая генерация новых миров может казаться привлекательным способом ленивого создания бесконечного контента для игры. Однако на самом деле всё наоборот! Чтобы научить машину тому, как выглядит хороший уровень… нужно быть очень хорошим программистом и дизайнером уровней.
Контент должен быть достаточно разнообразным, чтобы выглядеть свежим, но не настолько разнообразным, чтобы казаться атипичным. И необходимо создавать миры, на которые не просто интересно смотреть, но которые обеспечивают справедливую с точки зрения игрока сложность.
Процедурная генерация контента определённо не для слабых духом. Однако какими бы ни были ваши алгоритмы, все они зависят лишь от одного аспекта: случайности. И Minecraft в этом не исключение: каждый мир начинается с порождающего значения (seed); по сути, это число, используемое для инициализации генерации рельефа и всего, что на нём будет находиться.
Пусть эти алгоритмы и случайны, однако они детерминированы. Это значит, что при наличии одинаковых исходных условий (одинакового seed) они всегда дают одинаковые результаты. И именно благодаря этому каждый мир Minecraft можно воссоздать по его seed. А поскольку сами seed хранятся как 64-битные числа, то существует 18,4 квинтиллиона уникальных значений, которые можно создать.
В No Man’s Sky тоже используются 64-битные seed, и это объясняет, почему в этой игре тоже 18,4 квинтиллиона уникальных планет.
«Rogue» (1980 год)
Но как случайные числа (по сути, получаемые «бросанием кубиков» компьютером) могут создавать миры? Наверно, для объяснения нужно начать с чего-то меньшего, чем Minecraft. Добро пожаловать в «Dungeons of Doom».
Выпущенная в 1980 году игра «Rogue» считается первой графической адвенчурой, она стала главным источником вдохновения для разработчиков тысяч игр в жанре dungeon crawler, выпущенных за последующие десятилетия.
Minecraft тоже позаимствовала многие характеристики, сделавшие Rogue знаменитой, и генерация процедурных подземелий для исследований — лишь одна из них.
Rogue обычно называют первой «графической» адвенчурой, и она определённо была, по крайней мере, одной из первых.
Как же Rogue создавала свои «Dungeons of Doom» (подземелья рока) в 1980 году? Каждый уровень разделялся на сетку 3 на 3, а в каждую ячейку помещалась случайная комната.
Далее алгоритм выбирал комнату для создания игрока и помечал её как «достижимую». Затем он итеративно обходил все остальные комнаты, соединяя их с ранее достигнутым соседом (если это возможно), или переходя к следующей. Затем в последней присоединённой комнате размещалась лестница на следующий уровень.
В Rogue также могли появляться тупики, потайные двери и даже комнаты монстров! И всё это было реализовано примерно в девяти тысячах строках кода и более чем трёхстах функциях! …307, если точнее! Для сравнения: в Minecraft 1.18 насчитывается более 52 тысяч функций, находящихся примерно в 4200 файлах!
Итак, приготовьте свою алмазную броню и зачарованный меч, мы начинаем спускаться в предательские глубины исходного кода Minecraft.
Оригинальный исходный код «Rogue» можно найти в проекте Decoded: Rogue, где Mai Zure провёл тщательный разбор каждого файла. Основная часть кода была написана до появления стандарта ANSI C, что объясняет присутствие большого количества того, что не стоит считать антипаттернами.
Например, авторы использовали макросы для создания циклов until :
И как будто этого недостаточно, они ещё и заменили ключевые слова C case и default на when и otherwise :
Недавно я говорил об этом в Twitter, что привело к интересному обсуждению:
#define when break;case
#define otherwise break;default
Кодинг «Rogue» в 1980-х, должно быть, сильно походил на игру в рогалик. pic.twitter.com/HbAJbwqlBP— Alan Zucconi (@AlanZucconi) December 18, 2020
Строго говоря, исходный код Minecraft никогда не публиковался. Однако учитывая, что основная версия игры написана на Java, её достаточно легко декомпилировать. Mojang была толерантна и поддерживала эту практику, поскольку она помогала создать сообщество моддеров.
Если вам любопытно узнать больше об исходном коде Minecraft, то стоит изучить MCP Reborn — Mod Coder Pack, предназначенный для создания модифицированных клиентов и исследования их внутренней работы.
Часть 2: история Minecraft
Как бы ни была сложна эта игра, нельзя отрицать тот факт, что созданная Mojang вселенная построена на идеях, техниках и алгоритмах, первопроходцами в которых были другие игры (и даже фильмы), а некоторые из них выпущены десятки лет назад.
И было неправильным говорить об истории Minecraft без упоминания игры, которая стала источником вдохновения её разработчика: «Infiniminer».
Поначалу кажется, что это игра про добычу полезных ископаемых, в которой две команды соревнуются в сборе наибольшего количества руды, золота и алмазов. Но «Infinimer» был не только про добычу ресурсов, но и про создание; не только своей базы, но и историй.
Легко заметить, что игра стала непосредственным источником вдохновения для разработки Minecraft: блоки, кирка, пещеры и лавовые озёра, золото и алмазы, небо и пустота! Даже TNT! В параллельной Вселенной Minecraft могла бы выглядеть так.
Хотя каждая карта «Infiniminer» далеко не бесконечна, все они и в самом деле генерируется процедурно. Всё начинается с цельного блока земли, в котором отрисовывается множество рудных жил. Каждая начинается в случайной точке, и при каждой итерации жила движется в случайном направлении. Эта техника называется «случайным блужданием» (random walk).
Горы и пещеры создаются при помощи точно такой же методики: первые воздвигаются заменой воздуха землёй, вторые вырезаются заменой земли воздухом. Алмазы случайным образом разбрасываются по нижней части уровня.
Такой подход может показаться простым, может, даже слишком, однако это очень похоже на то, как работала Minecraft в первые девять месяцев своей разработки. В своей самой первой версии, в то время называвшейся «Cave Game», каждый мир состоял всего из 256 блоков в ширину и 64 в высоту.
Чтобы реализовать мечту о безграничном мире Minecraft, потребовалось девять месяцев. И реализована она была при помощи очень простого трюка: каждый раз, когда игрок забирался слишком далеко, создавался новый «фрагмент» мира.
Благодаря этому каждый мир был ограничен ПО: например, на 32-битной системе это примерно расстояние в 4,3 миллиарда блоков от точки создания игрока.
Но постойте, прежде чем вы начнёте паковать рюкзак, знайте, что на самом деле так далеко забраться невозможно! Игроки ограничены площадью 60 000 000 на 60 000 000 блоков. По сравнению с бесконечностью кажется, что это не очень много. Однако это всё равно в семь раз больше, чем поверхность Земли. Примерно в половину размера Нептуна!
Земля | Minecraft | Нептун | |
---|---|---|---|
Радиус | 6371 км 2 | 16925 км 2 | 24622 км 2 |
Площадь поверхности | 510064 км 2 | 3600000000 км 2 | 7618000000 км 2 |
Сторона квадрата | 22584 км | 60000 км | 87281 км |
Но даже при этом «больше» не всегда означает «лучше». Ни одна версия Minecraft не даёт игрокам никакой новой геймплейной механики в масштабе больше 25000 блоков. Хотя вблизи мир выглядит богатым и разнообразным, но чем дальше мы отходим, тем сильнее начинает проявляться паттерн. Рано или поздно каждый достаточно большой фрагмент мира будет неотличим от любого другого. В таком масштабе мир Minecraft изотропен, почти как наша Вселенная при максимальном масштабе. Это даёт нам понимание об «истинном» масштабе, в котором в неё нужно играть. И, следовательно, о масштабе, в котором должна по-настоящему работать генерация мира.
Minecraft позволяет игрокам рендерить карты мира при помощи стола картографа. Однако она может иметь ограниченное разрешение. Если вы хотите генерировать крупные карты биомов, то лучше всего использовать одну из множества утилит, созданных сообществом моддеров. Две лучшие Java-библиотеки — это BiomeUtils автора KaptainWutax и SeedFinding/mc_biome_java автора hube12. Для более новых версий Minecraft ещё одна библиотека на C — это Cubitect/cubiomes.
Это инструменты, которые можно использовать для сэмплирования биома любого мира в любой точке. Именно так сгенерированы карты из этой статьи.
Теперь вы видите, что все современные карты Minecraft выглядят «пятнистыми»: это вызвано тем, что каждый цвет представляет отдельный «биом»: область со своими географическими особенностями: растительностью, животными, зданиями и природными условиями.
Спустя девять месяцев после обновления, добавившего «бесконечность», в версии Alpha 1.2.0, больше известной как «Halloween Update», появилось десять таких биомов.
Игра определяла, к какому биому принадлежит конкретная часть мира, довольно простым образом: при помощи так называемых «карт шума». Если вкратце, это изображения, пиксели которых созданы при помощи случайных чисел. На основании исходных параметров и конфигурации их можно использовать для генерации множества различных паттернов.
В ранних версиях Minecraft использовались три такие карты шума. Одна — для определения высоты рельефа, две другие — для температуры и осадков.
И именно сочетание последних двух определяло биом области.
Высокая температура и низкая влажность? Пустынный биом!
Низкая температура и низкая влажность? Биом тундры!
Это сработало, потому что карты температуры и осадков были достаточно плавными, поэтому между биомами присутствовали переходы. Это значило, что редко можно было встретить лес по соседству, допустим, с саванной.
Так как биомы не зависели от рельефа, они могли располагаться на любой высоте, что создавало довольно необычные ландшафты.
Существенно переделали эту систему в Beta 1.8: «Adventure Update».
Во-первых, разработчики избавились от Далёких земель. Они обозначали своего рода точку невозврата, после которой генерация мира переставала работать правильно. Они обнаруживались на расстоянии примерно 12 миллионов блоков в любом направлении от точки создания игрока.
Однако избавление от Далёких земель стало лишь побочным эффектом более глубоких изменений. В «Adventure Update» появился совершенно новый генератор рельефа!
Опытные игроки помнят, что в ту эпоху миры имели очень отчётливый стиль. Они были довольно «континентальными»: большие острова, разделённые ещё более обширным океаном.
Всё полностью изменилось в Minecraft 1.7.2, больше известной как «The Update that Changed the World». И это обновление действительно изменило довольно многое! Например, сильно уменьшился размер океанов.
За три года Mojang существенно изменила способ генерации миров. Причём дважды! И это достаточно сильно повлияло на все старые серверы, например, на знаменитый 2b2t – старейший анархический сервер Minecraft. FitMC записал очень интересное видео, демонстрирующее, как такое простое изменение, вроде апгрейда на новую версию, навсегда изменило и так уже неспокойную ситуацию на 2b2t.
Несмотря на некоторые другие изменения в последующих обновлениях, генератор миров, появившийся в Minecraft 1.7.2, использовался практически 10 лет.
И хотя в Minecraft 1.18 кое-что изменилось, миры, которые вы годами исследовали, строили, любили и теряли… были созданы одним и тем же алгоритмом.
И, думаю, вы пришли сюда затем, чтобы узнать, как же он работает на самом деле.
Итак, Minecraft использует конгруэнтные генераторы для создания порождающих значений карт шума Перлина, которые используются как октавы для карт шума фрактального броуновского движения, которые затем обрабатываются несколькими слоями операторов наподобие клеточных автоматов для задания биомов, которые далее модулируют амплитуду карты фрактальной плотности, управляющей высотой рельефа.
Хм, наверно, это не самый эффективный способ объяснения работы алгоритма.
Может быть, стоит показать на примерах?
Часть 3: генерация мира
Всё начинается с так называемой «карты биомов», используемой в качестве шаблона, определяющего, какой тип биома должен находиться в каждой области мира. Равнины, пустыни, горы и океаны — всё это примеры возможных биомов, и сегодня в одном только Верхнем мире их насчитывается более шестидесяти.
Во второй фазе генерации мира происходит работа с рельефом, она разбита на три этапа.
На первом создаётся базовый контур при помощи карты биомов, определяющей высоту, которую может иметь каждая область. В результате получается сплошной бесплодный ландшафт, полностью состоящий из камня, на котором каждый пустой блок ниже превращается в воду.
На последующем этапе все каменные блоки на поверхности заменяются типом, соответствующим их биому. Травой в случае равнин, песком для пустынь, гравием для океанов, и так далее. Также на этом этапе генерируется слой коренной породы. Любопытно, что в Java Edition её паттерн не зависит от seed мира и одинаков для каждого мира Minecraft.
На третьем этапе из камня вырезаются пещеры и ущелья.
Третья фаза заполняет мир оставшимися элементами. Сначала размещаются такие постройки, как деревни, крепости и океанические монументы, затем идут декоративные элементы наподобие деревьев и травы. Также в этой фазе в мир добавляются рудные жилы, и этот процесс схож с используемым в «Infiniminer».
Давайте подробнее рассмотрим, как работает каждая фаза…
Карта биомов
Генерация карты биомов — самая критически важная фаза, потому что она служит чертежом для создания всего остального мира.
Карта создаётся последовательностью довольно простых операций, называемых «слоями», наложенными друг поверх друга. Каждый слой получает карту биомов с предыдущего слоя, добавляет деталей и передаёт её следующему.
Миры Minecraft создаются при помощи не одного, а целых четырёх наборов слоёв.
Основной отвечает за сушу, а два других поменьше используются для отрисовки рек и придания температур океану. Дополнительный набор применяется для добавления нюансов холмам и рекам.
Всё начинается с карты шума (случайно сгенерированного изображения), на которой присутствуют только два цвета, обозначающих сушу и океан в пропорции 1 к 10. Процесс схож с бросками кубика D10 для каждого пикселя: если выпадает 1, пиксель становится сушей, в противном случае он превращается в океан.
Разумеется, у Minecraft нет кубика D10, однако она может «бросать» случайные числа при помощи так называемого квадратичного конгруэнтного генератора.
Внутри исходного кода это называется Island Layer, потому что каждый отдельный пиксель этой карты шума будет шаблоном, из которого возникают континенты. На самом деле, каждый пиксель соответствует 4096 игровым блокам.
Чем глубже мы опускаемся по слоям биомов, тем детализированней становится карта. Это возможно благодаря слоям масштабирования (zoom), которые в два раза увеличивают разрешение, с которым будут работать последующие слои.
Например, если пиксель из Island layer соответствует 4096 блокам, то каждый добавленный после масштабирования пиксель будет иметь в игре размер 2048 блоков.
Слои Zoom в Minecraft имеют ещё одну важную задачу: добавление разнообразия. Они не масштабируют карты идеально точно, а иногда вносят небольшие изменения. Они закодированы работать как старый фотокопировальный аппарат: добавляют случайные погрешности и размазывают края идеально квадратных островов.
Следующий слой в генерации биомов предназначен для расширения уже имеющихся островов, создания более связанного мира.
Каждая часть суши имеет вероятность расширения в углы мелководья по соседству, но также может в процессе подвергнуться эрозии.
Если выполнять этот слой снова и снова, то мы увидим, что он не всегда обеспечивает одинаковый результат. Даже слои добавляют случайности!
Поэтому чтобы лучше понять, как они работают, можно представить их в виде стохастических клеточных автоматов. Иными словами, это простые правила, изменяющие пиксель на основании цвета пикселей по соседству. Под стохастичностью подразумевается, что на некоторые из этих правил может влиять случайность.
Клеточные автоматы выглядят обманчиво простыми, однако скрывают в себе бесконечную вселенную сложности. И они являются одним из самых популярных инструментов в процедурной генерации для видеоигр. На моём YouTube-канале есть целая посвящённая им документалка.
Основная часть формы суши создаётся попеременным использованием слоёв AddIsland и Zoom. Это позволяет создавать в мире уникальные элементы в различных разрешениях.
Области океанов
Форма океана в основном задаётся двумя слоями.
Первый был добавлен в «Adventure Update», чтобы сделать мир менее «континентальным» и более «взаимосвязанным». В коде Minecraft это в буквальном смысле называется Remove Too Much Ocean («убираем слишком большое количество океана»).
Все области океана, окружённые океаном, имеют вероятность 50% превращения в сушу.
Это не только создаёт более фрагментированные побережья, но и изменяет соотношение суши к воде с 27% до более чем 50%.
Следующий слой из основного набора помечает все области океана, окружённые другим океаном, как «глубокие». Позже это приведёт к созданию биомов мелководья и глубоководья.
Температуры и биомы
Ранее мы упоминали только два элемента: сушу и океан. Прелюдией к созданию биомов является последовательность слоёв климата, отвечающих за определение температуры каждой области: Warm (тёплый), Temperate (умеренный), Cold (холодный) или Freezing (морозный). В дальнейшем эта информация будет определять, в какие биомы могут превращаться эти области.
Сначала каждой точке суши случайно назначается температура: Warm (тёплая), Cold (холодная) или Freezing (морозная) в пропорциях 4, 1 и 1.
При таком случайном распределении рядом с заснеженной тундрой вполне может возникнуть пустыня. Чтобы избежать этого, в следующих двух слоях выполняется смешивание температуры каждой области, что обеспечивает более плавные переходы между ними.
Любая тёплая суша по соседству с холодной или морозной превратится в умеренную. А морозная суша рядом с тёплой или умеренной превратится в холодную.
В конечном итоге эти температуры являются основным фактором определения того, каким биомом станет конкретный фрагмент суши. Например, тёплые области имеют вероятность 50% превращения в пустыню, 33% в саванну, а оставшиеся 17% — в равнины.
Аналогичным образом умеренные, холодные и морозные области имеют определённые вероятности превращения в умеренный, холодный и морозный биомы (леса, тайгу и ледяные равнины).
Варианты биомов
На этом этапе ландшафт уже выглядит знакомым, но ему недостаёт вариативности в отдельных биомах. Чтобы исправить это, в данном слое имеется небольшая вероятность превращения биома в его «холмистый» вариант. Например, он может превратить пустыню в пустынные холмы, лес в лесистые холмы, а саванну в плато.
Этот слой работает и с областями океана, он может превращать глубокие океаны в равнины или леса. Это разбавляет океан множеством крошечных островов.
Выбор изменяемых областей зависит от дополнительной карты шума, которая генерируется отдельным набором слоёв. Когда цвет каждого пикселя выбирается случайным образом и независимо от остальных (как в данном случае), это называется «белым шумом». Примерно такое распределение мы получаем, когда смотрим на экран старого телевизора, не получающего никакого сигнала.
Обычно каждый слой работает с картой локально, игнорируя общую картину. А при наличии такого количества шагов сложно гарантировать гармоничное смешение между биомами.
Чтобы избежать проблем, ещё два слоя обеспечивают наличие плавного перехода между различными типами климата и наличие областей с экстремальными температурами.
Второй слой (Shore) также добавляет пляжи, на которых суша встречается с мелководьем океана.
Редкие биомы
Особого упоминания заслуживают редкие биомы, поскольку их генерация выполняется немного иначе. Кроме назначения температур слой климата имеет вероятность 1/13 пометить область как «особую».
Когда настаёт время назначения биомов в зависимости от температуры, особые области обрабатываются иначе. Тёплые, умеренные и холодные климатические области могут превратиться в собственные особые варианты: бесплодные плато, джунгли и многолетнюю тайгу.
Другая ситуация возникает с более нишевыми биомами, например, с бамбуковыми джунглями и подсолнуховыми равнинами: смысл в том, что они являются не отдельными областями, а небольшими участками крупных областей.
Два дополнительных слоя отвечают за превращение одних из десяти джунглей в бамбуковые джунгли, а одних из 57 равнин — в подсолнуховые равнины.
Легендарные грибные острова создаются схожим образом. Каждый блок океана, окружённый водой, имеет вероятность 1/100 превращения в грибное поле. Отвечающий за это слой находится довольно высоко, поэтому грибные острова обычно довольно большие и однородные.
Это один из редчайших биомов в Minecraft, единственный, где естественным образом не создаются враждебные мобы.
Слои создания рек
Основной набор слоёв в основном занимается сушей и не делает ничего для создания рек. Они создаются в отдельном наборе слоёв, который работает с той же картой шума, что используется при создании холмов.
После многократного масштабирования карта шума выглядит довольно неоднородно. Слой рек работает как своего рода алгоритм обнаружения краёв, создавая потенциальные русла рек вдоль швов разнородных участков.
Затем они сглаживаются фильтром низких частот, чтобы устранить любые зазоры или грубые края, и передаются в основной набор слоёв через River Mixer Layer.
Этот процесс вырезает реку в суше, за исключением биомов заснеженной тундры, в которых вместо этого создаются замёрзшие реки, и грибных полей, в которых, похоже, вообще нет рек.
Набор слоёв температуры океана
Последний элемент, задействованный в генерации биомов — это набор слоёв температуры океана. Он добавляет вариативности океану, который за исключением мелководья и глубоководья не имеет других отличительных черт.
Этот набор слоёв при помощи шума Перлина создаёт собственную карту температур. Это очень популярный алгоритм для создания процедурных карт шума, который был разработан в 1982 году, но не для игры, а для фильма «Трон».
Если создать карту белого шума, бросая кубик для каждого пикселя, как это происходило в первом слое, то в целом результат будет некрасиво хаотичным, потому что соседние пиксели, скорее всего, будут иметь очень отличающиеся значения. Шум Перлина создаёт очень красивые и плавные изображения.
Он генерирует случайные значения в сетке, по размерам гораздо больше, чем нужное нам готовое изображение. Все промежуточные точки плавно интерполируются между этими случайными значениями, что обеспечивает гораздо более гладкий результат. В шуме Перлина есть гораздо больше элементов, но углубляться в его изучение мы не будем.
С момента публикации статьи о шуме Перлина в 1985 году он стал очень популярен во всех медиа, где в той или иной форме присутствует процедурная генерация. Он настолько известен, что в большинстве движков имеется собственная реализация шума Перлина, например, Mathf.PerlinNoise движка Unity (документация) или Noise Texture Node в Blender.
Из-за его доступности и удобства управления иногда на шум Перлина возлагают слишком большие надежды. Поэтому многие разработчики создают свои миры и уровни на основе шума Перлина. Хотя в этом нет ничего плохого, карты шума Перлина легко распознаются намётанным глазом, что разбивает иллюзию реалистичного рельефа, когда проявляются его типичные артефакты. Характерной особенностью карт шума Перлина является то, что во всех углах ячейки их значение равно нулю, как показано на рисунке ниже.
Из-за этого созданные при помощи шума Перлина ландшафты обычно бывают очень «квадратными» и в них часто присутствуют выровненные по сетке элементы, раскрывающие происхождение шума, использованного при их создании.
Некоторые разработчики предупреждают, что не стоит во всём полагаться на шум Перлина как на первый, а иногда и единственный тип шума для творчества. Если вы хотите узнать об интересных альтернативах, не имеющих недостатков шума Перлина, то крайне рекомендую прочитать статью The Perlin Problem: Moving Past Square Noise.
Например, симплексный шум (наследник шума Перлина) вычисляется в сетке треугольников, благодаря чему карты получаются гораздо менее «квадратными». Симплексный шум был запатентован, но срок действия патента истёк в январе 2022 года. Кроме того, существует множество оперсорсных реализаций, например, OpenSimplex автора K.jpg.
После завершения генерации карта увеличивается в масштабе и вливается в полный набор слоёв при помощи OceanMixer Layer. Это наконец создаёт биомы в областях океана, которые могут быть тёплыми, тепловатыми, холодными и замёрзшими.
Самый последний этап — увеличение масштаба карты ещё два раза. Это выполняется не традиционными слоями Zoom, которые мы видели раньше, а при помощи другой техники, которая ещё сильнее разрушает края между разными биомами.
После этого у нас на руках остаётся готовая карта биомов, в которой каждый пиксель соответствует реальному блоку игры.
И мы готовы двигаться к следующей фазе!
Высота рельефа
Во второй фазе, разбитой на три этапа, генерация мира занимается рельефом.
На третьем этапе из камня в буквальном смысле вырезаются пещеры и ущелья. Эта операция выполняется усложнённым вариантом случайного блуждания, называемого «червями Перлина». Но по своей сути смысл такой же: мы плавно перемещаем сферу в случайных направлениях, вырезая по её пути длинные туннели.
Первый из трёх этапов генерации рельефа Minecraft определённо требует подробного объяснения.
Minecraft создаёт сложный и интересный рельеф при помощи техники под названием «фрактальный шум броуновского движения»: это ещё одно название карты шума.
Фрактальный шум создаётся сложением нескольких карт шума Перлина, сэмплируемых с разным масштабом. Каждая новая (называемая октавой) имеет в два раза большее разрешение по сравнению с предыдущей, но её вклад также снижается вдвое.
Фрактальный шум известен тем, что создаёт правдоподобно выглядящие рельефы. И он работает, потому что добавляет разную степень детализации в разных масштабах. Именно это мы и наблюдаем в реальных рельефах.
Minecraft запросто могла бы сэмплировать фрактальную карту в каждой координате , чтобы получить высоты рельефа. Однако алгоритмы игры работают иначе!
Так как же Minecraft получает высоту рельефа? Она начинает с самой вершины мира, в координате , и начинает двигаться вниз, вычисляя значение фрактального шума для каждой конкретной координаты
вдоль этого виртуального столбца. Первая координата
, для которой фрактальный шум равен или больше нуля, становится окончательной высотой рельефа в координате
.
В ранних девлогах объяснялось, зачем нужен этот процесс: мы должны интерпретировать «значение шума как „плотность“ — всё меньше нуля будет считаться воздухом, а всё, что больше или равно нулю, будет землёй».
В том же самом посте также говорится о том, насколько вычислительно затратен этот процесс. Поэтому ради оптимизации эту карту фрактального шума сэмплируют с меньшим разрешением: мир разделён на «ячейки» размером 4x8x4 блоков каждая.
Если точнее, в Minecraft не используется единая карта фрактального шума: на самом деле их три! Причина этого проста: эти карты замечательны, но довольно однородны. Благодаря использованию двух карт, инициализированных с разными параметрами и смешанными согласно третьей карте шума, Minecraft позволяет добавлять ещё более интересные и естественно выглядящие вариации рельефа.
Но и это ещё не всё! В ранних версиях Minecraft биомы и карта высот рельефа не зависели друг от друга. Однако начиная с Beta 1.8 и далее карта биома напрямую влияет на генерацию рельефа, модулируя максимальную высоту каждого биома.
Это выполняется при помощи двух параметров: «глубины» и «масштаба». Эти значения зависят от типа биома, они представляют его среднюю высоту и степень отклонения от неё. Благодаря тому, что биом напрямую связан с высотой рельефа, в конечном итоге создаётся гораздо более естественный ландшафт, в котором не возникают странные элементы наподобие пляжа в горах, например.
Строго говоря, в генерации рельефа задействовано ещё как минимум две карты шума. Карта «шума глубин» добавляет вариативности для компенсации того, что интерполяция между ячейками сглаживает мелкие детали. А карта «шума поверхности» определяет, сколько блоков камня нужно заменить стандартным блоком в каждом биоме.
И, вероятно, существует ещё с десяток других карт, используемых в мелких деталях наподобие распределения цветов. Но в этой статье мы в такие дебри залезать не будем!
Элементы мира
После создания карты биомов и высот рельефа мы получаем практически готовый ландшафт, однако на нём отсутствует растительность, животные, здания и даже руда.
Мир Minecraft не был бы полным без десятков различных элементов: травы, цветов, деревьев, грибов, шахт, подземелий, сломанных порталов, деревень и аванпостов, рудных жил, капельника и жеодов аметиста, окаменелостей, океанических монументов, хижин ведьм, храмов в джунглях и пустынях, айсбергов, иглу, обломков кораблей, океанских руин и поместий.
Так как каждый элемент создаётся по собственным правилам, в этой статье невозможно будет рассказать обо всех. Поэтому давайте сосредоточимся только на зданиях, которые необходимы для победы в игре: на крепостях.
Эти подземелья — единственный способ попасть в измерение Край. В каждом мире есть лишь 128 крепостей, созданных внутри восьми концентрических колец, последнее из которых имеет радиус 22-24 тысяч блоков от начальной точки.
В каждом кольце крепости генерируются приблизительно под прямыми углами от центра.
Хотя сами крепости размещаются в мире с другими зданиями на этапе заполнения, их позиция вычисляется даже до генерации рельефа. В отличие от других элементов, крепости являются ключом к завершению игры, поэтому это критический этап генерации мира, которому отдаётся больший приоритет, чем украшениям или другими избыточными элементами.
Поздравляю: теперь вы специалист по процедурной генерации!
Ну а теперь давайте возьмём все полученные знания и выбросим их в лаву.
Часть 4: Minecraft 1.18+
Потому что с «Caves & Cliffs Update» в Minecraft 1.18 появился совершенно новый генератор рельефа. Раньше ландшафт имел высоту лишь 128 блоков, а теперь растянулся вверх на 320 блоков. Из-за такого увеличения вертикального пространства неудивительно, что одним из крупнейших изменений стали горы, которые теперь гораздо выше и пропорциональнее к остальной части мира.
И чтобы избежать катастроф при игре в старые миры, в Minecraft 1.18 выполняется продуманное смешение. Это позволяет новым фрагментам бесшовно интегрироваться в окружающий ландшафт и биомы.
Но основная разница заключается в том, что для генерации карт биомов Minecraft 1.18 использует совершенно новый алгоритм. И это чётко можно увидеть при сравнении их со старыми версиями, созданными при помощи описанного выше набора слоёв. Ниже показано, как существенно изменился мир Minecraft между версиями 1.16 и 1.18:
Ещё более важно то, что теперь биомы в какой-то степени стали трёхмерными! Благодаря этому у подземных пещер могут быть собственные биомы, как это и происходит в долгожданных пышных пещерах.
И это тоже играет важную роль в новой системе пещер. Кроме вырезания пещер при помощи червей Перлина Minecraft 1.18 использует три новых типа пещер: «сырные» пещеры, «спагетти»-пещеры и «макаронные» пещеры. Да, здесь нет никакой ошибки.
Все они выполняют генерацию одинаково: применяют пороговое значение к 3D-карте шума Перлина для выбора подземных областей, которые должны быть вырезаны из камня. И просто создавая разные порождающие параметры для этих карт шума, они могут генерировать большие пещеры, длинные туннели и мелкую сеть взаимосвязанных проходов. Сыр, спагетти и макароны.
Также появилась новая функция, создающая внутри пещер столбы.
Кроме того, обновление привязывает генерацию пещер к новому распределению руды, которое должно стимулировать к исследованиям.
Как же работает Minecraft 1.18? Это сложный вопрос. К тому же, учитывая новизну этой версии, может быть слишком поспешно вдаваться в подробности системы, в которую по-прежнему вносят улучшения и исправления.
Но могу сказать, что биомы и рельеф теперь связаны ещё теснее.
Если раньше ландшафт изменялся в зависимости от биома, теперь они оба зависят от 3D-карты климата.
Каждая четверть фрагмента — кусок размером 4x4x4 блока — получает из карты шума пять климатических параметров: температуру, влажность, «континентность», эрозию и «странность».
Первые два очевидны, «континентность» определяет, насколько далеко область находится от побережья, а от эрозии зависит, насколько плоским или гористым должен быть рельеф. «Странность» определяет варианты биомов.
Каждый биом определяется по его собственной идеальной температуре, влажности, «континентальности», эрозии и «странности». Каждой четверти фрагмента присваивается биом, наиболее точно соответствующий этим пяти параметрам.
Например, стандартная пустыня будет иметь высокую температуру, «континентальность» и эрозию, при этом низкую влажность и «странность». Все области, соответствующие этим параметрам, превратятся в пустыни.
Очень любопытно, что эта новая система работает схоже с Alpha 1.2.0, но с пятью параметрами (шестью, если учитывать ещё и глубину) вместо двух.
Очевидно, существует ещё много особенностей, делающих Minecraft такой очаровательной игрой. И почти каждая из них имеет собственную карту шума. В новой версии только для одного рельефа используется больше пятидесяти карт.
Часть 5: заключение
Ни одна статья о генерации мира не была бы полной без упоминания потрясающего сообщества, активно проводящего исследования Minecraft.
Тысячи людей использовали платформы для распределённых вычислений в поисках порождающего значения потерянного мира по одному изображению, а одна команда нашла высочайший кактус в игре — 23 блока!
Если вы знакомы с пустынным биомом, то, вероятно, знаете, что кактусы растут высотой до трёх блоков. Однако два (или больше!) кактусов можно поставить один на другой, чтобы создать более высокий. Это относительно редкое событие, но оно позволяет превысить ограничение в три блока.
И как не упомянуть ежегодное соревнование The Generative Design in Minecraft Competition, участники которого стремятся расширить границы возможного для процедурной генерации.
В конечном итоге, именно это делает Minecraft настолько привлекательной игрой: вся её притягательная сложность возникает вследствие взаимодействия очень простых механик. И дело не только в геймплее, но и в генерации мира игры.