🗺️ Сделал программу для генерации карт почти в соло! Как я выжил, не бросил и пока не довел генератор карт до релиза.

🗺️ Сделал программу для генерации карт почти в соло! Как я выжил, не бросил и пока не довел генератор карт до релиза.

Привет. Я почти в одиночку... А не, в этот раз реально один. Давай по новой.
Привет. Я в одиночку делаю свою программу для генерации карт.

💬 Почему я использую существующие генераторы?

На самом деле, существует множество разных генераторов карт: какие-то реалистичные, какие-то нет, но для меня встала проблема в том, что простого, при этом подробного редактора просто не существует.Самым продвинутым на данный момент, как по мне, является Azgaar's Fantasy Map Generator, но вместе с этой продвинутостью мы получаем довольно тяжелый и неудобный интерфейс, кучу зачастую ненужных функций, а также, возможно для кого-то критичный момент, а именно отсутствие русского языка.Потыкав Azgaar's, а также несколько других подобных приложений, я понял, что нужно делать своё. На тот момент мне это казалось не таким уж и сложным делом, но чем дальше, тем больше трудностей возникало.

🐱 Что же это за приложение?

Начав работать над генератором, я сразу отбросил то, как генерируют карты многие простые генераторы или игры, а именно разные шумы. Перлин, симплекс - они дают красивую «рябь», но не умеют создавать осмысленную тектонику. Они не позволяют создавать реалистичные карты, где продумано формирование гор, рек, климата, а просто за счёт шума накидывают это всё рандомно. Взяв за основу идею, что главное - это реалистичность, которая упрощается там, где этим можно пренебречь, я начал делать своё приложение.

🌍 Тектоника и структура карты.

Окно генерации тектоники и движения плит.
Окно генерации тектоники и движения плит.

Именно с тектонических плит и началось моё движение. Изучив то, как делаются такие приложения, я пришел к ячеистой структуре. Если ты играл в Heroes of Might and Magic или RimWorld - ты знаешь, о чём я. Выглядит это не как прямоугольная сетка, а как органичная мозаика. Ячейки разной формы, чуть хаотичные - так границы получаются естественными. Именно за счёт ячеек Azgaar's Fantasy Map Generator делает свои карты. Только если в нем максимальное количество ячеек - это 100 000, то у меня за основу было взято 100 000, а лимит на данный момент - 1 000 000 ячеек. Это позволяет создавать максимально детализированные карты.

После того, как был написан базовый алгоритм генерации ячеек, я перешел к тектонике. Тектонические плиты бывают разных размеров, разного вида и они движутся в разном направлении. Всё это мне нужно было учесть. На данном этапе мы можем задать, сколько у нас тектонических плит на данном участке, а также сгенерировать их и задать вектор движения.

🏔 Горы, расщелины, материки и острова.

🗺️ Сделал программу для генерации карт почти в соло! Как я выжил, не бросил и пока не довел генератор карт до релиза.

После тектоники мы начинаем создавать материки и острова. Задаёшь процент суши, количество островов - алгоритм сам ищет удачные места для континентов, стараясь не лепить их к краям карты и не делать слишком круглыми, создавая естественные заливы и красивую форму.

Потом - самое интересное: рельеф. Горы растут вдоль границ плит, с учётом силы столкновения (чем сильнее - тем выше). Есть молодые пики, есть древние разрушенные горы, есть плоскогорья, холмы, впадины, расщелины.

Я сделал так, чтобы горы не выглядели как один толстый хребет - они разбегаются вширь, теряют высоту, огибают озёра (ну, будущие озёра, их пока нет, как и рек). Всё это настраивается: ширина гор, обилие шельфов, количество древних реликтовых хребтов.

Есть отдельный параметр: сколько островов ты хочешь добавить к основным материкам. Я сделал три типа островов: фрагменты (куски континента, отколовшиеся при разломах), дуги (вулканические цепочки, типа Курил) и горячие точки (всякие Гавайи, торчащие из ниоткуда). Программа сама решает, какой тип острова сгенерировать, в зависимости от случайного числа и тектонического контекста.

Программа также умеет затапливать низины. Если впадина соединяется с океаном - она становится морем или заливом. Это работает автоматически.

🧩 3D-режим.

3D карта поверхности
3D карта поверхности

Больше чисто визуальная штука, которая нужна, чтобы оценить свою карту. Она еще в процессе доработки, но уже позволяет взглянуть на свою карту под другим углом.

🌦 Климат, ветры, температура и осадки.

Климат - одна из самых сложных и, как по мне, важных систем тут. Когда начинаются дожди, пустыни, вечная мерзлота и тёплые течения - вот тогда мир действительно оживает. И я постарался сделать так, чтобы климат был не галочкой, а полноценной системой, где всё завязано на рельеф, широту и ветер. И, конечно, чтобы этим можно было управлять ползунками.

Карта температур, а так же течений.
Карта температур, а так же течений.

Температура.

Тут всё начинается с широты. Задаем центр карты (например, экватор или 45° северной широты) и размах (на сколько градусов вверх и вниз от центра растянута карта). Программа честно считает для каждой ячейки её широту и даёт базовую температуру: у экватора жара, у полюса - холод.

Дальше в игру вступает высота. Чем выше гора, тем холоднее - даже на экваторе на вершине будет снег.

Потом накидываешь глобальную температуру. Хочешь ледниковый период? Крути в минус. Хочешь пустыню и пальмы? В плюс.

И последнее - континентальность. Это штука простая: чем дальше от океана, тем более резкий климат - летом жарче, зимой холоднее. В центре большой суши будет адское пекло днём и мороз ночью. На побережье - ровно и мягко.

Морские течения работают как примитивная имитация Гольфстрима. У западных берегов материков в тропиках - холодное течение, у восточных - тёплое. Выше 40-й широты - наоборот.

Направление ветра.
Направление ветра.

Ветра.

Ветер дует максимально реалистично: в тропиках - с востока на запад, в умеренных широтах - с запада на восток, у полюсов - снова с востока. Но это только если нет гор. Горы ломают ветер - он огибает их, создаёт завихрения.

Потом я прогоняю ветра через сглаживание, чтобы они стали плавными. И отдельно считаю интенсивность - насколько сильный ветер в каждой ячейке. В горах слабеет, за горами почти затихает.

На карте можно включить отображение ветров галочкой, будут рисоваться стрелочки, и можно посмотреть, как они обтекают хребты.

Карта осадков.
Карта осадков.

Осадки.

Влага берётся из океана. Чем теплее океан, тем больше из него испаряется. Дальше ветер несёт эту влагу на сушу. Пока ветер идёт по равнине, влага расходуется постепенно. Как только упирается в гору - выпадает ливнем на наветренном склоне, создавая за большими горами пустыни.

Осадки также можно регулировать ползунком влажности, меняя то, как много воды испаряется.

В будущем в этом круговороте также будут учитываться реки и озёра.

🖌 Редактор: лепим свой мир сами.

Пример редактора
Пример редактора

Ну и, конечно, автоматика автоматикой, но иногда хочется вмешаться. Поэтому я сделал ручной редактор. Всё же реалистичностью иногда пренебрегают ради крутости.

Что главное, редактор понимает контекст. Если ты рисуешь океан поверх суши - он не просто красит ячейку в синий цвет, а реально понижает её высоту. Если рисуешь горы - поднимает высоту, устанавливает возраст и даже может активировать тектонический стресс. В общем, честно симулирует изменения рельефа, а не просто перекрашивает. Всё это также отражается на климате.

Дожди на отредактированной карте
Дожди на отредактированной карте
Отредактированная карта в 3D
Отредактированная карта в 3D

⚙ Чего пока нет и что будет дальше

Во-первых, конечно же, нужно много еще сделать. Следующим этапом будет создание рек, озер, лесов и других биомов и взаимодействие всего этого с уже существующим. Также в далеких планах - генерация государств, поселений, дорог, а также редактор всего этого, но это пока что только в планах.

🎯 Зачем это всё?

По итогу, я просто хотел сделать инструмент, которым сам бы с удовольствием пользовался, так как не смог найти нужного решения. И пока что меня устраивает то, что получается.

Когда закончу со всем этим, планирую выложить программу в открытый доступ, чтобы каждый мог насладиться и сделать что-то для себя.

4
1
5 комментариев