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