Генерация мира 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.cs | BSP-разбиение и комнаты. |
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.
рабочая 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/.