mapgen
Первый генератор миров: единый крейт от шума до провинций. Наработки переехали в vernadsky, проект заморожен.
Что это было
С этого началась работа над генерацией миров. mapgen — единый крейт с
библиотекой и консольной утилитой, который собирал карту целиком, от шума до
провинций:
- карта высот — шум на цилиндрической проекции плюс эрозия;
- климат — температура по широте, влажность от ветров и рельефа;
- биомы — шестнадцать штук, по высоте, температуре и влажности;
- вода — океаны и озёра поиском в ширину от краёв карты;
- реки — накопление стока с прорезанием русла;
- провинции — семена, рост заливкой, слияние мелких;
- регионы — группа провинций по соседству и типу поверхности;
- стратегические точки — порты, устья, перевалы;
- экспорт — PNG-слои и JSON для игрового движка.
Мир настраивался TOML-файлом: сид, размеры, тип мира, параметры климата, островов и рельефа. Типов мира было шесть — EarthLike, Supercontinent, Archipelago, Mediterranean, IceAgeEarth, DesertMediterranean — с разной целевой долей суши, от 15 % у архипелага до 70 % у суперконтинента.
cargo run --release -- --config examples/earth_like.toml --output output/
На выходе получался набор карт (biomes.png, heightmap.png, normals.png,
provinces.png, regions.png, rivers.png) и два файла данных:
provinces.json с геометрией, биомами и типом каждой провинции и
regions.json с их группировкой.

Карта биомов. Пример earth_like.toml, сид 42, сетка 512×512: 16 биомов,
30 % суши, 120 провинций. Этот слой — тот самый набор биомов, который позже
переехал в vernadsky.
Эти же провинции умели собираться в WebAssembly — для браузера есть живая демонстрация.
Почему появился vernadsky
mapgen писался под конкретную игру — Chronicles of Realms — и в этом была его
слабость: алгоритмы и игровые допущения жили в одном месте, в одной
библиотеке, которая знала про провинции и стратегические точки.
Практика показала, что генератор должен быть устроен иначе:
- нейтральным — описывать только физическую географию и не знать ни про провинции, ни про правила игры;
- разбитым на стадии — каждая со своим входом и выходом, а не один проход от шума до административного деления;
- с версионированным контрактом — со схемой данных, стабильными идентификаторами и форматом, который можно читать годами;
- с проверяемой воспроизводимостью — с контрольными семенами, за которые отвечают тесты, а не обещание в README.
Так появился vernadsky — отдельная библиотека, где
эти четыре требования и есть конструкция проекта. mapgen остался прототипом,
на котором всё это было проверено на практике.
Что переехало
mapgen не заброшен — его наработки перенесены в vernadsky и работают там,
уже в виде стадий:
- генерация карты высот — в стадию
terrain; - климат (температура, влажность, осадки) — в
climate; - таблица шестнадцати биомов с её порогами — в
biome, в реестрbiomes-v1; - модель стока рек — в
hydrology; - разбиение на провинции — в
territory, где единица деления называется территорией и не несёт игрового смысла.
Соответствие видно прямо в коде vernadsky: портированные константы и формулы
помечены ссылкой на прототип — например, шкала высот в terrain, пороги
биомов в biome, начальный сток реки в hydrology. Сверять поведение было с
чем.
Дальше проекты разошлись: vernadsky развивается как библиотека, mapgen
заморожен на версии 0.1.0 и остаётся историей — первой попыткой, которая
показала, каким генератор быть не должен.
- ЛицензияMIT / Apache-2.0
- Версия0.1.0
- Работалянварь — май 2026
- Заменёнvernadsky