Процедурная местность с ребристым фрактальным шумом
Я реализовал билинейный интерполированный белый шум, чтобы процедурно генерировать рельеф.
Я могу получить такой результат:
Я хотел бы реализовать ребристый фрактальный шум, чтобы получить более реалистичную местность, такую как:
Однако я не могу найти хороший учебник для ребристого фрактального шума. Вы можете объяснить мне, как это сделать?
1 ответ:
Ребристый шум Перлина на самом деле довольно легко сделать - вам просто нужно АБС() либо конечная карта высоты, либо некоторое подмножество слоев шума (а затем инвертировать результирующие Значения карты высоты, чтобы убедиться, что гребень происходит при высоких значениях).
Пример: (основной шум Перлина с трилинейной интерполяцией с последующим АБС и инвертированием всего поля высот). (Инвертировать означает "умножить на -1".)
Я настоятельно рекомендую экспериментировать с различными конфигурациями фрактальные шумовые слои и основные математические / логические операции.
Другой пример: (два различных низкочастотных слоя шума Перлина объединены с помощью логического пересечения / математической минимальной функции)
Однако никакая простая модификация алгоритма фрактального шума не даст вам тех деталей, которые кажутся "текучими вниз" (и делают местность намного более реалистичной и привлекательной). Чтобы достичь их, вам нужно будет добавить какой-то вид моделирования эрозии, который является очень более сложный зверь (как с точки зрения алгоритма, так и с точки зрения процессора).Для получения некоторой информации об этом я рекомендую эти две статьи (вы можете игнорировать часть GPU, алгоритмы прекрасно работают на CPU, хотя по моему опыту моделирование займет минуту или около того для изображения 1000x1000 px):
- Мэй, Син, Декоден, Филипп и Ху, Бао-Ган. Быстрое моделирование и визуализация гидравлической эрозии на графическом процессоре. 2007 год.
- быстрая гидравлическая и термическая эрозия на графическом процессоре. Яко, Балаш. 2011 год. 15-й Центральноевропейский семинар по компьютерной графике.
Правка:
Давайте уточним, что я имею в виду под "применить АБС на поле высоты".
Вы просто берете числовое значение высоты в каждом пикселе карты и применяете к нему функцию ABS (), отбрасывая ее знак.
, который предполагает, что генератор шума Перлина генерирует значения в диапазоне (или другом диапазоне с центром в 0). Ожидается, что ~50% пикселей будут иметь значение больше 0 и Ожидается, что значение ~50% будет меньше 0.
АБС приводит к созданию острых гребней там, где 0, так как вся билинейная/трилинейная интерполяция гарантирует, что раньше был гладкий наклон, проходящий через значение 0.
Рассмотрим этот образ:
Он показывает две функции COS (x), одна из которых была модулирована функцией ABS (я добавил небольшое смещение, чтобы убедиться, что обе линии видны отдельно). А теперь представьте, что фиолетовая линия переворачивается вертикально - вы заканчиваете двумя горами с острыми хребтами и долиной между ними:)