Текущая реализация

Генерация мира AS-BUILT

Как процедурно строится ландшафт в текущем движке: от гекс-чанков и шума до рек, плато, пещер, деформации террейна и покраски вершин.

⚠ Снимок кода, не целевой дизайн Описано фактическое поведение движка на сегодня. Параметры и алгоритмы будут меняться. Общий контекст раздела — на странице Обзор реализации.

Основа: гекс-сетка и чанки

Мир строится на гексагональной сетке и режется на чанки — единицы генерации и рендера геометрии (вершины, треугольники, UV, цвета вершин). Есть кэширование чанков и параллельная обработка, отдельные типы для земли, воды, тумана и миникарты.

Класс / файлРоль
ChunkGen.cs, ChunkInfo.csГенерация геометрии чанка и его метаданные.
LinearChunkBehaviour.csПоведение/жизненный цикл чанка в сцене.
ChunkWater.csВодные чанки.
LandDesign/Chunks/Chunk.cs, IChunkBuilder.csАбстракция построителя чанков.

рабочая Путь: Engine/LandEngine/Scripts/Geometry/, Engine/LandDesign/Scripts/Chunks/.

Система шума (Noise Engine)

Многоуровневый Perlin/Simplex-шум — топливо всей процедурной генерации. Отдельные каналы шума под разные аспекты, и блендер, комбинирующий их операциями Blend/Add/Min/Max.

NOISE_HEIGHTNOISE_ISLANDS NOISE_WATERLEVELNOISE_PLATO NOISE_FORESTNOISE_STONE NOISE_IRON / GOLDNOISE_BIOM_* NOISE_COAST / HILL / MOUNT / RIVER_MODEL

Класс / файлРоль
NoiseManager.csХранит и раздаёт каналы шума по типам.
NoiseBlender.csСмешивание нескольких шумов.
FastNoise.cs, Noise.csРеализации генераторов.
NoiseSO.cs, FastNoiseSO.cs, NoiseManagerConfigSO.csКонфиги-ScriptableObject (seed, scale, octaves, persistence, lacunarity, gain).

рабочая Путь: Engine/Core/NoiseEngine/Scripts/.

Биомы

Биом тайла определяется по высоте и широте с участием шумов NOISE_BIOM_*. Реализовано 34+ биома: море, трава, земля, снег, тундра, песок, саванна, лес, холм, гора, озеро, болото, обрыв и большой набор пещерных (CaveGround, CaveGrass, CaveMoss, CaveStone, CaveIce, CaveDark, CaveDamned, CavePlato…) и подземных городов (UnderCity: классический, разрушенный, уничтоженный).

Климатические зоны — по порогам широты (South / Middle / North). Пороги воды, холмов и гор задаются в процентах высоты.

Класс / файлРоль
BiomIDs.csПеречень биомов.
MapGenWorldAlgorithm.csАлгоритм назначения биомов.
BiomsDataUtils.cs, HeightAreaSettings.csУтилиты и пороги высот/широт.

рабочая Путь: Engine/Core/Scripts/MapDesign/.

Реки (процедурные сплайны)

Река прокладывается маршрутом по гекс-сетке, затем по контрольным точкам строится Catmull-Rom сплайн, а по нему — меш берегов переменной ширины. Ширина рандомизируется в заданных границах; берег может зашумляться. Есть спавн объектов вдоль реки.

Класс / файлРоль
RiverMeshGenerator.csПостроение меша реки по сплайну.
SimpleRiverSplineBuilder.cs, RiverSplineCore.csПостроение и ядро сплайна.
RiverPath.cs, RiverParsed.csМаршрут и распарсенные данные реки.
RiverObjectsSpawner.csОбъекты вдоль русла.

рабочая Параметры: defaultWidth, minWidth/maxWidth, набор допустимых ширин. Путь: Engine/LandEngine/Scripts/Rivers/.

Водопады

Контроллер масштабирует и поворачивает объекты-водопады (ParticleSystem) относительно высоты падения и направления течения, с ограничениями min/max масштаба.

рабочая WaterfallController.cs.

Береговые линии

Обработка переходов вода↔суша: сплайны берега и определение прибрежных (shoal) тайлов. Генерация береговых волн для водной системы KriptoFX в текущей версии (KWS v2) отключена.

в разработке CostSplineSubdiv.cs, WaterShorelineBuilder.cs.

Дороги

Дорога генерируется аналогично реке: сплайн-маршрут, переменная ширина по участкам, UV и цвета вершин, лёгкая волнистость через NOISE_RIVER_MODEL.

рабочая RoadMeshGenerator.cs, RoadParsed.cs, RoadInstancer.cs. Путь: Engine/LandEngine/Scripts/Roads/.

Деформация террейна (Height Pass)

Вершины ландшафта деформируются внутри зон (HeightPassAreas) — так делаются платформы, мосты и плавные переходы высот. Анализ граничных вершин зоны + смещение (по умолчанию порядка 4 единиц), сглаживание и эрозия для естественности. Есть отладочный экспорт данных эрозии в JSON.

Класс / файлРоль
HeightPassArea.cs, BaseHeightPassArea.csЗоны деформации.
HeighPassSubdiv.cs, HeightPassSplineSubdiv.csПодразбиение и применение смещений.
SplineWithMesh.csДеформация вершин меша вдоль сплайна.
ErosionDebugExporter.csОтладочный экспорт эрозии.

рабочая Пути: Engine/LandEngine/Scripts/SubDiv/, Engine/Core/Scripts/MapDesign/HeightPass/.

Плато и возвышенности

Плоские возвышенности по шуму NOISE_PLATO. Дискретная таблица высот по уровням (диапазон уровней ~0–14), построение контурных сплайнов границ плато, сглаживание переходов.

рабочая PlatoHeightData.cs, PlatoSplineSubdiv.cs, PlateauSplineSubdiv.cs, PlatoRange.cs.

Горы и хребты

Смежные горные тайлы объединяются в хребет (MountRange) с единым биомом — для согласованного оформления. Есть редакторное окно для правки формы гор.

рабочая MountRange.cs, MountainObject.cs, MountainShapeEditorWindow.cs.

Пещеры и подземелья

Процедурные пещеры на BSP (Binary Space Partition): комнаты трёх форм (квадрат / круг / органичная) размещаются в листьях дерева и соединяются коридорами. Настраиваются количество и размеры комнат, соотношения сторон, режим и приоритет коридоров, распределение высот. Поверх — иерархия локаций: комнаты, проходы, пути навигации.

Класс / файлРоль
CaveGenerator.cs, CaveCreator.csГенерация пещер.
CaveAlgorithmSettings.csПараметры алгоритма (комнаты, коридоры, высоты).
BSPLeaf.cs, CaveRoom.csBSP-разбиение и комнаты.
LocationsCaveRoom.cs, LocationsCavePassage.cs, LocationsCavePath.csИерархия подземных локаций.

рабочая (базовая) Путь: Engine/Core/Scripts/MapDesign/Map/Underground/.

Контуры и заборы (Fence)

По контурам областей (плато, высот) строятся сплайны, вдоль которых расставляются префабы — заборы, декор, обрамление. Полный набор ориентации точки (позиция, нормаль, тангент, бинормаль, поворот), ускоренный поиск ближайших точек через KD-подобную сетку.

Класс / файлРоль
ContourSpline.cs, ContourObjectSpawner.csКонтур и расстановка объектов.
SplineWithKDTree.csПространственный поиск точек.
FenceSpline.cs, FenceSplinePoint.cs, FenceSplineMath.csПайплайн заборов.

рабочая Параметры: расширение/смещение контура, высотный оффсет, поворот, пропуск краевых вершин. Путь: Engine/LandEngine/Scripts/Spline/.

Покраска: маски и vertex colors

Текстурирование ландшафта управляется через vertex colors (RGBA): на каждый тайл заполняются тексели маски (тип, маска, вторая текстура, нормаль, оверлей, биом-оверлей). Есть редакторный инструмент ручной и градиентной покраски вершин с блокировкой каналов и экспортом в FBX.

Каналы vertex color ландшафта R — экстрабиом для покраски (и вершины под рейкаст на fence-объектах) · G — покраска высотами (горы) · B — альфа использования экстрабиома из канала R · A — использование дополнительной lit-текстуры.

рабочая ChunkMaskSupport.cs, ColorMeshDataCreator.cs, ChunkMask.cs. Пути: Engine/LandEngine/Scripts/ChunkMasks/, Engine/Pregen/Scripts/.

Размещение декора и растительности

Асинхронная расстановка растений, камней и объектов: пресеты подбираются по типу, региону и ресурсу (через шум). Есть точечный и линейный (дороги/трубы/заборы) декор, контроль высоты размещения и опциональный бейкинг (объединение мешей) для производительности.

Класс / файлРоль
DecorPlacer.cs, DecorPlaceController.csПодбор пресетов и расстановка.
DecorJob.cs, DecorQueue.cs, DecorRegistry.csАсинхронные задачи, очередь, реестр.
LineDecorPlacer.cs, DecorPreset.csЛинейный декор и пресеты.

рабочая Путь: Engine/LandEngine/Scripts/DecorPlace/.

Связь с проектным GDD Деформация террейна и процедурные реки — это тот движок, на котором проектный документ предлагает показывать региональные техники эндшпиля (срезать гору, осушить русло). Здесь — как эти системы устроены на самом деле.