Поля и шум

Искажение пространства

Шум, который дважды сдвигает сам себя: дым, мрамор, разводы жидкости, мраморная бумага. Метод Иниго Килеса. Бесшовно и зацикленно.

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

Если сдвинуть фрактальным шумом координаты, в которых берётся другой шум, плоскость начинает течь. Если сделать так дважды, появятся клубы дыма, прожилки мрамора, разводы масла на воде, облачные пояса Юпитера. Приём называется domain warping, искажение области определения: меняется не цвет, а само пространство, в котором его вычисляют.

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

Ступеней три, как в статье Иниго Килеса. Сначала двумерный шум q — пара fbm с разными смещениями. Затем шум r, взятый в точке, сдвинутой на q. Наконец, итоговый f — в точке, сдвинутой на r. Каждая ступень уносит точку дальше оттуда, куда её занесла предыдущая, поэтому завихрения закручиваются внутри завихрений.

q = fbm₂(p) r = fbm₂(p + k·q) f = fbm(p + k·r) k = 1,7 · «Сила искажения»

Внутренние ступени нарочно гладкие, не больше трёх-четырёх октав: их мелкую рябь следующие ступени раздули бы в пиксельный мусор. «Октавы» и «Детали» управляют только последней ступенью.

Главная находка Килеса — векторы q и r работают ещё и красками. В «дыме» f задаёт основной тон, длина q его затемняет, а r.x высветляет; «Смешение цветов» решает, насколько сильно. «Мрамор» — синусоида вдоль диагонали искажённой плоскости: её нули становятся прожилками, которые то набухают, то истончаются. «Жидкость» гонит плавные полосы через всю палитру. «Тушь» проводит по прозрачному фону семейство линий, которые течение сгущает и разводит, но никогда не скрещивает. Каждая ступень — периодический шум, так что картинка тайлится, а при анимации градиенты поворачиваются целыми оборотами и петля замыкается.

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

Искажать координаты начали вместе с процедурной графикой: уже в статье Кена Перлина 1985 года мрамор — это синус от координаты плюс турбулентность. Иниго Килес, один из создателей Shadertoy, сделал приём рекурсивным и описал его на своём сайте в статье «Domain warping», с роликами 2002 и 2012 годов. С тех пор f(p + fbm(p + fbm(p))) — одна из самых узнаваемых формул шейдерного искусства. А у стиля «тушь» предки постарше: японская суминагаси, «плавающая тушь», известная с XII века, и турецкая эбру. Краски пускают по воде (для эбру её загущают), ведут гребнем или раздувают, а узор снимают листом бумаги.

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

  • «Сила искажения» 0,3 — лёгкая рябь, 1,5–2,5 — водовороты и тонкие жгуты.
  • «Мрамор» с палитрой из белого, серого и почти чёрного — каррарский камень; «Смешение цветов» поменьше делает его спокойнее.
  • «Жидкость» с яркой палитрой из 5–7 цветов — мраморная бумага для форзаца.
  • «Тушь» прозрачна: положите её поверх «Градиентной сетки» или цветного фона.
  • Сверху — эффект «Мозаика» с кладкой «Вороной»: мрамор разрежется на смальту с затиркой. А эффект «Рельеф» сделает прожилки объёмными.

Параметры

Масштаб
Сколько крупных завихрений укладывается в кадр
Сила искажения
Как далеко шум уносит точки: от лёгкой ряби до водоворотов
Октавы
Сколько слоёв мелких деталей в итоговом шуме
Стиль
дым · мрамор · жидкость · тушь
Смешение цветов
Насколько сами векторы искажения раскрашивают картину — как в статье Килеса
Скорость
Сколько оборотов делает шум за петлю анимации
Детали
Насколько громки мелкие октавы: меньше — мягче, больше — зернистее