Играясь с генерацией карт высот в 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
Деформирование, или доменное искажение, является очень распространенным приемом в компьютерной графике для создания процедурных текстур и геометрии. Его часто используют, чтобы сжать объект, растянуть его, скрутить, согнуть, сделать толще или нанести любую желаемую деформацию. Это работает до тех пор, пока ваш базовый цветовой узор или геометрия определены как функция пространства.
Очень хорошая статья с красивыми картинками про это.
Заключение
Самое главное в искусстве шума - это возможность модифицировать базовые паттерны, чтобы получать красивые картинки, а из них и текстуры, и анимации, и партиклы, и материалы.
Я проделал большую работу по поиску всего этого, поэтому, надеюсь вы оцените мой первый пост и укажите на недочёты или неточности.