Procedural Island Generation (III)
Генерация процедурных островов (часть III)
Продолжаем с части II, где была создана основа карты высот и система горных хребтов. Теперь добавим детализированные шумовые слои, горные пики на основе расстояния и выполним смешивание для финального рельефа.
Карта высот (повтор)
Исходная карта высот из части I задаёт базовое распределение суши и воды:
Для визуализации используется палитра magma из matplotlib с искусственным затемнением океанских областей. Карта семплируется по центроидам треугольников Делоне.
Многоуровневые шумовые слои
Накладываем несколько октав шума Симплекса на разных частотах поверх базовой карты. Каждый слой добавляет детали разного масштаба.
Используется шесть слоёв с частотами: 1x, 2x, 4x, 16x, 32x, 64x. Отсутствует слой 8x (n₃).
Усиление прибрежного шума
Применяем высокочастотный шум specifically вдоль береговой линии:
\[e_{coast} = e + \alpha \cdot (1 - e^4) \cdot \left(n_4 + \frac{n_5}{2} + \frac{n_6}{4}\right)\]
Множитель \((1 - e^4)\) создает колоколообразную кривую, пикующуюся на береговой линии (e=0).
Поле расстояний до гор
Для горных пиков предварительно вычисляем поле расстояний через топологию триангуляции Делоне с использованием BFS:
- Начинаем от треугольников с горными точками (расстояние = 0)
- Посещаем соседние треугольники, увеличивая расстояние на рандомизированную величину
- Рандомизация создает естественные формы вместо идеальных конусов
Формула приращения расстояния: \[\Delta = s \cdot (1 + j \cdot r)\] где r использует треугольное распределение для естественного вида.
Порядок обработки соседей случайно перемешивается алгоритмом Фишера-Йейтса для избежания направленных смещений.
Смешивание высот
Финальная высота комбинирует все компоненты через взвешенное смешивание.