У дриады была ещё фраза "Бесшумно словно рысь", но эту я слышал на порядок чаще
У дриады была ещё фраза "Бесшумно словно рысь", но эту я слышал на порядок чаще

Играясь с генерацией карт высот в unity, я заметил одну неприятную тенденцию: большинство статей и материалов рассказывают либо о Value Noise, либо о Perlin Noise, либо о Voronoi Noise. Возможно я плохо искал, но это не отменяет того факта, что я сел писать эту статью, поэтому для всех нуждающихся я сделал шпаргалку. (Здесь нет реализаций, только собраны разные шумы с картинками, описанием и применением)

Начиная это писать, я не понимал, что лезу в непроглядные дебри. Прошу простить неточности, так как я чёрт, который вообще не вдупляет о чём тут говорится. Я не включал сюда множество шумов, которые применимы в основном в различных фильтрах для фотографий.


Perlin Noise

Да, я на него сетовал, но и без обойтись нельзя

Шум Перлина является самым ярким примером Градиентных шумов (Gradient Noise).

Ощущение, что в глазах поплыло
Ощущение, что в глазах поплыло

Наиболее очевидное различие — картинка выглядит «облачной». Если говорить о технических деталях, она непрерывна — если сильно увеличить ее масштаб, градиент всегда будет плавным. Нет резких переходов от чёрного к белому, поэтому алгоритм работает на удивление хорошо, когда нужно что-то «случайное», но не слишком.

Шум Перлина широко используется в двухмерной и трёхмерной компьютерной графике для создания таких визуальных эффектов, как дым, облака, туман, огонь и т. д. Он также очень часто используется как простая текстура, покрывающая геометрическую модель.

Похоже на облака?
Похоже на облака?
Выглядит иначе?
Выглядит иначе?

Стоит сказать, что у многих шумов есть аналоги, которые могут быть лучше оптимизированы или просто по-другому выглядят. Для шума Перлина таким аналогом служит Simplex Noise, он не сильно отличается от своего предшественника, но выигрывает в производительности. Особым ценителям могу ещё порекомендовать обратить внимание на Wavelet Noise - она решает проблемы со сглаживанием и потерей деталей (я не понял, но кто-то из вас может поймёт, о чём речь).

Voronoi Noise (Worley Noise)

Самым известным примером Клеточного шума (Cellular Noise) является шум Вороного.

Мне это напоминает плесень
Мне это напоминает плесень

Используется в компьютерной графике для случайного разбиения поверхностей.

Используется при генерации органических клеткообразных структур, таких как: крылья стрекозы, рисунок на листе или жирафе.

Горыныч
Горыныч
Я явно *****ящер, что вижу тут плитку
Я явно *****ящер, что вижу тут плитку





Одна из разновидностей Chebyshev Noise - имеет более резкие переходы, похоже на какую-то плитку или мозаику.

Curl Noise или Flow Noise

Честное слово: я пытался найти чёрно-белую, но не смог (а самому сделать - лень)
Честное слово: я пытался найти чёрно-белую, но не смог (а самому сделать - лень)

Шум Curl похож на шум Perlin, но вместо этого используется для физически обоснованного моделирования для создания "изменяющихся во времени полей несжимаемых турбулентных скоростей". Шум потока - это еще один шум, используемый для физического моделирования. Это полезно для создания изменяющихся во времени текстур с закручивающимся поведением.

Как раз для подобных шумов используется Симплекс, а не Перлин.

Хорошим примером будет ракета, выбрасывающая газ из сопла - серьёзную симуляцию газа никто не будет делать ради небольшого эффекта.

Так и передвигаются злые духи
Так и передвигаются злые духи

Sparse Convolution Noise и Gabor Noise

К этому моменту меня уже тошнит от всевозможных шумов
К этому моменту меня уже тошнит от всевозможных шумов

Это два разных шума, но суть одна: похоже на волосы или шерсть.

Почему-то пример вышел очень НЕ шерстяной
Почему-то пример вышел очень НЕ шерстяной

Fractal Brownian Motion Noise или Ridged-Multifractal Noise

Мой глаз замылился... опять
Мой глаз замылился... опять
А вы бы смогли произвести такое сложение?
А вы бы смогли произвести такое сложение?

Фрагмент 2D шума выглядит довольно хорошо и подойдет для создания хорошей текстуры шума в большинстве случаев. Однако, если вы используете шум для изображения реальных несовершенств, он получается слишком однородным и больше похож на размытую сетку. Случайность в реальном мире более динамична. Мы можем достичь этого, добавив несколько шумовых паттернов вместе, но разного размера. Это то, что обычно называют фрактальным броуновским движением.
Контролируя, сколько шумов мы добавляем (октавы), насколько интенсивным (амплитуда) и насколько “плотным” (частота) является каждый слой, мы получаем гораздо более динамичный шумовой паттерн.

Так выглядит Fractal Brownian Motion, если к нему добавить Ridged Noise
Так выглядит Fractal Brownian Motion, если к нему добавить Ridged Noise


Мы просто накладываем много слоёв друг на друга, чаще всего берут много слоёв шума Перлина с уменьшением масштаба, каждый раз добавляя всё больше деталей (Multi-Octaves Perlin Noise), но никто не запрещает складывать Вороной с Перлином и Габором. Чаще всего эту технику используют для создания ландшафтов.
Очень интересно наблюдать за изменением параметров такого преобразования.

Повторяю картинку, потому что разные контекст
Повторяю картинку, потому что разные контекст





Во время добавления октав можно провернуть приём под названием Turbulence. Им можно превратить Fractal Brownian Motion Noise в такое.

Ridged Noise

Сглаженные вершины исчезли
Сглаженные вершины исчезли

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

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

Я смог найти понятную реализацию.

Terraces

Появились ступеньки
Появились ступеньки

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

Мы просто приводим плавно изменяющиеся высоты к определённым значениям, которые чаще всего идут с каким-то шагом (высотой до следующей террасы).

Я смог найти понятную реализацию (опять).

Domain Warping

Похоже на растёкшуюся краску
Похоже на растёкшуюся краску

Деформирование, или доменное искажение, является очень распространенным приемом в компьютерной графике для создания процедурных текстур и геометрии. Его часто используют, чтобы сжать объект, растянуть его, скрутить, согнуть, сделать толще или нанести любую желаемую деформацию. Это работает до тех пор, пока ваш базовый цветовой узор или геометрия определены как функция пространства.

Завораживает
Завораживает




Очень хорошая статья с красивыми картинками про это.


Заключение

Самое главное в искусстве шума - это возможность модифицировать базовые паттерны, чтобы получать красивые картинки, а из них и текстуры, и анимации, и партиклы, и материалы.

Я проделал большую работу по поиску всего этого, поэтому, надеюсь вы оцените мой первый пост и укажите на недочёты или неточности.

"Опять работа?"
"Опять работа?"

Комментарии (6)


  1. noRoman
    26.06.2023 12:14
    +1

    Это перевод или авторская статья?

    Perlin Noise - Шум Перлина
    Voronoi Noise - Вороной шум?!? Может лучше Шум Вороного. Основано на диаграммах Вороного (https://ru.wikipedia.org/wiki/Диаграмма_Вороного).


    1. AnPosy Автор
      26.06.2023 12:14

      Авторская (все цитаты сделаны как "цитаты")
      Про Вороной шум исправил (Спасибо, по запаре не заметил)


  1. s1im
    26.06.2023 12:14
    +1

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


    1. AnPosy Автор
      26.06.2023 12:14

      Хорошая идея, возьму на заметку. Не было цели сделать полноценное исследование - я просто собрал общую информацию, чтобы люди заинтересованные могли понять в каком направлении им копать, если они почувствуют, что какой-то шум или техника могли бы им пригодится.


  1. Jianke
    26.06.2023 12:14

    Спасибо! Не знал, что существует столько шумов.


  1. DrZlodberg
    26.06.2023 12:14

    Похоже на облака?

    Конкретно этот больше поход на Diamond Square


    Шум Curl похож на шум Perlin

    Он не похож на него, а делается из него.


    Однако с областью применения я зашёл в тупик — конкретных примеров не нашёл.

    Имитация турбулентных потоков в воде, огне, дыму


    Довольно детально?

    1. Это как раз Ridged Noise
    2. Острые пики из чистого перла получить не выйдет (разве что использовать очень большой диапазон октав)
      Подобную картинку обычно получают суммированием половины перла. В суммируем не шум на диапазоне -0.5..0.5, а abs(шум). Тогда получаются либо острые пики, либо наоборот, исключительно округлые грани (в зависмотсти от того, какую половину взять). Используется для скал и камней.

    Terraces

    Просто отбрасываем дробную часть


    Domain Warping

    По сути шум второго порядка. Используем в качестве входных параметров не координаты, а координаты+шум первого порядка