Процедурный рельеф c ребристым фрактальным шумом

я реализовал билинейный интерполированный белый шум, чтобы процедурно генерировать местность.

Я могу получить такой результат:

enter image description here

Я хотел бы реализовать ребристый фрактальный шум, чтобы получить более реалистичную местность, такую как:

enter image description here

однако я не могу найти хороший учебник для ребристого фрактального шума. Вы можете объяснить мне, как это сделать?

1 ответов


Ridged perlin noise на самом деле довольно легко сделать - вам просто нужно ABS() либо окончательную карту высоты, либо некоторое подмножество слоев шума (а затем инвертировать полученные значения карты высоты, чтобы убедиться, что хребет происходит при высоких значениях).

пример: enter image description here (основной шум Перлина с трилинейной интерполяцией с последующим ABS и инвертированием всего поля высоты). (Инверсия означает "умножить на -1".)

Я настоятельно рекомендую экспериментировать с различные конфигурации фрактальных шумовых слоев и основные математические/логические операции.

еще пример: enter image description here (два разных низкочастотных слоя шума Перлина объединены с помощью функции логического пересечения / математического минимума)

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

для получения некоторой информации об этом я рекомендую эти два документа (вы можете игнорировать часть GPU, алгоритмы отлично работают на CPU, хотя по моему опыту моделирование займет минуту или около того для изображения 1000x1000 px):

  1. Мэй, Син, Декоден, Филипп и Ху, Бао-Ган. Быстрое моделирование и визуализация гидравлической эрозии на GPU. 2007.
  2. быстрая гидравлическая и термическая эрозия на GPU. Jákó, Balász. 2011. 15-й Центральноевропейский семинар по компьютерной графике.

EDIT:

давайте проясним, что я имею в виду под "применить ABS на поле высоты".

вы просто хватаете числовое значение высоты в каждом пикселе карты и применяете на нем функцию ABS (), отбрасывая ее знак.

Это предполагает, что генератор шума perlin генерирует значения в диапазоне (или другом диапазоне с центром 0). Ожидается, что ~50% пикселей будут иметь значение больше 0 и ~50% будут иметь значение меньше 0.

ABS вызывает острые гребни, которые будут созданы там, где 0, так как вся билинейная/трилинейная интерполяция гарантирует, что раньше был гладкий наклон, проходящий через значение 0.

считайте это изображение:

enter image description here

Он показывает два COS(x) функции, одна из которых была модулирована функцией ABS (я добавил небольшое смещение, чтобы убедиться, что обе линии видны отдельно). Теперь представьте, что фиолетовая линия перевернута вертикально - вы заканчиваете двумя горами с острыми хребтами и долиной между ними:)