Поля и шум

Фрактальный шум

Сумма октав решёточного шума: облака, мрамор, горы, дым. Бесшовно и зацикленно.

  • шейдер на GPU
  • бесшовный тайл
  • зацикленная анимация
Открыть в редакторе →

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

Как это устроено

Основа — решёточный шум. В узлах сетки лежат случайные числа или случайные направления-градиенты, а между узлами значение плавно интерполируется. Получается пологий рельеф из холмов размером примерно в клетку. «Основа» выбирает рецепт: симплекс строится на треугольной сетке, и в нём не видно осей, Перлин — квадратная сетка градиентов, значения — просто случайные числа в узлах (картинка чуть «квадратнее»), клетки — расстояние до ближайшей случайной точки.

Один такой слой скучен. Фрактальность появляется, когда складывают октавы: каждая следующая вдвое мельче предыдущей, а её амплитуда умножается на «Затухание». «Сумма» решает, что сделать с октавой перед сложением: fbm берёт её как есть, «хребты» переворачивают модуль и возводят в квадрат — нули шума становятся острыми гребнями, а вес каждой октавы зависит от предыдущей, чтобы мелкие гребни росли на крупных; «облака» и «турбулентность» берут модуль — выходят пухлые клубы и складки.

fbm(p) = Σ gᵒ·noise(2ᵒp) / Σ gᵒ o = 0 … «Октавы» − 1 g = «Затухание» хребты: (1 − |noise|)² турбулентность: |noise|

Частота растёт ровно вдвое, поэтому период сохраняется и картинка складывается в бесшовный тайл. Для анимации градиенты в узлах поворачиваются на целое число оборотов за петлю — последний кадр совпадает с первым. «Искажение» сдвигает координаты другим шумом, «Террасы» режут высоты на ступени.

Немного истории

Кен Перлин придумал свой шум в начале 1980-х, после работы над фильмом «Трон» (1982): его раздражал стерильный «машинный» вид компьютерной графики. Статья «An Image Synthesizer» вышла в 1985 году — в ней уже были и мрамор, и турбулентность, — а в 1997-м шум Перлина принёс автору «Оскар» за технические достижения. В 2001 году Перлин предложил симплексный шум — быстрее и без следов решётки. Здесь работает его периодическая версия psrdnoise Стефана Густавсона и Иэна Макьюэна (2022): она умеет тайлиться и вращать градиенты. Режим «хребты» восходит к гребнистым мультифракталам Ф. Кентона Масгрейва из книги «Texturing and Modeling» (1994).

Что покрутить

  • «Сумма» — «хребты», «Октавы» 7–8, «Затухание» около 0,5: получится карта горных цепей.
  • «Турбулентность» с «Искажением» 0,6–1 похожа на языки пламени и мраморные разводы.
  • «Террасы» 6–12 превращают облака в ступенчатые плато, как на физической карте.
  • «Прозрачность по яркости» оставляет от слоя только светлое — так облака ложатся поверх другого слоя.
  • Положите сверху эффект «Симметрия обоев» с группой p6m, и шум станет бесконечным орнаментом-снежинкой (готовая стопка «Калейдоскоп шума»).

Параметры

Масштаб
Сколько «бугров» шума укладывается в кадр
Основа
симплекс · Перлин · значения · клетки
Сумма
fbm · хребты · облака · турбулентность
Октавы
Сколько слоёв всё более мелких деталей
Затухание
Насколько каждая следующая октава тише предыдущей
Искажение
Шум сдвигает сам себя — получаются разводы
Контраст
Террасы
Разбить высоты на ступени, как на топографической карте
Скорость
Сколько оборотов делает шум за петлю анимации
Прозрачность по яркости