Играясь с генерацией карт высот в 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 шума выглядит довольно хорошо и подойдет для создания хорошей текстуры шума в большинстве случаев. Однако, если вы используете шум для изображения реальных несовершенств, он получается слишком однородным и больше похож на размытую сетку. Случайность в реальном мире более динамична. Мы можем достичь этого, добавив несколько шумовых паттернов вместе, но разного размера. Это то, что обычно называют фрактальным броуновским движением.
Контролируя, сколько шумов мы добавляем (октавы), насколько интенсивным (амплитуда) и насколько “плотным” (частота) является каждый слой, мы получаем гораздо более динамичный шумовой паттерн.
Мы просто накладываем много слоёв друг на друга, чаще всего берут много слоёв шума Перлина с уменьшением масштаба, каждый раз добавляя всё больше деталей (Multi-Octaves Perlin Noise), но никто не запрещает складывать Вороной с Перлином и Габором. Чаще всего эту технику используют для создания ландшафтов.
Очень интересно наблюдать за изменением параметров такого преобразования.
Во время добавления октав можно провернуть приём под названием Turbulence. Им можно превратить Fractal Brownian Motion Noise в такое.
Ridged Noise
Чтобы добавить октавы, мы можем изменять амплитуды более высоких частот так, чтобы дополнительный шум был виден только в горах.
Этот шум позволяет делать острые вершины, которые получаются в природе в результате эрозии (вода уносит часть почвы со склона). Такой способ намного проще, чем симуляция эрозии, но и эффект выглядит менее реалистичным.
Я смог найти понятную реализацию.
Terraces
Это применение функций перераспределения высот. При использовании функции, отличной от ступенчатой, террасы могут быть более круглыми или располагаться только на некоторых высотах.
Мы просто приводим плавно изменяющиеся высоты к определённым значениям, которые чаще всего идут с каким-то шагом (высотой до следующей террасы).
Я смог найти понятную реализацию (опять).
Domain Warping
Деформирование, или доменное искажение, является очень распространенным приемом в компьютерной графике для создания процедурных текстур и геометрии. Его часто используют, чтобы сжать объект, растянуть его, скрутить, согнуть, сделать толще или нанести любую желаемую деформацию. Это работает до тех пор, пока ваш базовый цветовой узор или геометрия определены как функция пространства.
Очень хорошая статья с красивыми картинками про это.
Заключение
Самое главное в искусстве шума - это возможность модифицировать базовые паттерны, чтобы получать красивые картинки, а из них и текстуры, и анимации, и партиклы, и материалы.
Я проделал большую работу по поиску всего этого, поэтому, надеюсь вы оцените мой первый пост и укажите на недочёты или неточности.
Комментарии (6)
s1im
26.06.2023 12:14+1Для исследовательской работы маловато выводов. Хотелось бы больше деталей о сложности самих алгоритмов, о методах их оптимизации, о вариантах применения не просто в духе "результат похож на шерсть поэтому сгодится для текстуры шерсти", а конкретно, какие параметры генерации на что влияют или, например, рассмотреть какие варианты местностей можно сгенерировать каждым из алгоритмов.
AnPosy Автор
26.06.2023 12:14Хорошая идея, возьму на заметку. Не было цели сделать полноценное исследование - я просто собрал общую информацию, чтобы люди заинтересованные могли понять в каком направлении им копать, если они почувствуют, что какой-то шум или техника могли бы им пригодится.
DrZlodberg
26.06.2023 12:14Похоже на облака?
Конкретно этот больше поход на Diamond Square
Шум Curl похож на шум Perlin
Он не похож на него, а делается из него.
Однако с областью применения я зашёл в тупик — конкретных примеров не нашёл.
Имитация турбулентных потоков в воде, огне, дыму
Довольно детально?
- Это как раз Ridged Noise
- Острые пики из чистого перла получить не выйдет (разве что использовать очень большой диапазон октав)
Подобную картинку обычно получают суммированием половины перла. В суммируем не шум на диапазоне -0.5..0.5, а abs(шум). Тогда получаются либо острые пики, либо наоборот, исключительно округлые грани (в зависмотсти от того, какую половину взять). Используется для скал и камней.
Terraces
Просто отбрасываем дробную часть
Domain Warping
По сути шум второго порядка. Используем в качестве входных параметров не координаты, а координаты+шум первого порядка
noRoman
Это перевод или авторская статья?
Perlin Noise - Шум Перлина
Voronoi Noise - Вороной шум?!? Может лучше Шум Вороного. Основано на диаграммах Вороного (https://ru.wikipedia.org/wiki/Диаграмма_Вороного).
AnPosy Автор
Авторская (все цитаты сделаны как "цитаты")
Про Вороной шум исправил (Спасибо, по запаре не заметил)