Фрактальное пламя


Фрактальное пламя является членом системы итерированных функций. класса [1] фракталов , созданных Скоттом Дрейвсом в 1992 году. [2] Открытый исходный код Дравса позже был перенесен в Adobe After Effects . графическое программное обеспечение [3] и переведен в редактор фрактального пламени Apophys . [2]
Фрактальное пламя отличается от обычных систем итерированных функций тремя способами:
- Нелинейные функции повторяются в дополнение к аффинным преобразованиям .
- Отображение логарифмической плотности вместо линейного или двоичного (форма тонального отображения )
- Цвет по структуре (т. е. по пройденному рекурсивному пути) вместо монохромного или по плотности.
Тональное отображение и окраска предназначены для отображения как можно большего количества деталей фрактала, что обычно приводит к более эстетичному изображению.
Алгоритм
[ редактировать ]Алгоритм состоит из двух этапов: создание гистограммы и последующий ее рендеринг.
Создание гистограммы
[ редактировать ]
Сначала выполняется итерация набора функций, начиная со случайно выбранной точки P = (Px,Py,Pc) , где третья координата указывает текущий цвет точки.
- Набор функций пламени:
На каждой итерации выберите одну из приведенных выше функций, где вероятность F j выбора равна p j . Затем вычисляется следующая итерация P, применяя F j к (Px,Py) .
Каждая отдельная функция имеет следующий вид:
параметр wk Vk весом вариации где . называется Дравс предлагает [4] это все :s неотрицательны и в сумме равны единице, но такие реализации, как Apophys, не накладывают этого ограничения.
Функции V k представляют собой набор предопределенных функций. Несколько примеров [4] являются
- V 0 ( Икс , y ) = ( Икс , y ) (Линейный)
- V 1 ( x , y ) = (sin x ,sin y ) (синусоидальный)
- V 2 ( Икс , y ) знак равно ( Икс , y )/( Икс 2 + и 2 ) (Сферический)
Цвет Pc точки связанным с последней примененной функцией Fj смешивается с цветом , :
- Pc := (Pc + (F j ) цвет ) / 2
После каждой итерации гистограмма обновляется в точке, соответствующей (Px,Py) . Это делается следующим образом:
histogram[x][y][FREQUENCY] := histogram[x][y][FREQUENCY]+1
histogram[x][y][COLOR] := (histogram[x][y][COLOR] + P.c)/2
Таким образом, цвета изображения будут отражать, какие функции использовались для доступа к этой части изображения.
Рендеринг изображения
[ редактировать ]Чтобы повысить качество изображения, можно использовать суперсэмплинг для уменьшения шума. Это предполагает создание гистограммы большего размера, чем изображение, чтобы каждый пиксель имел несколько точек данных для извлечения. Например, создайте гистограмму с ячейками 300×300, чтобы нарисовать изображение размером 100×100 пикселей; каждый пиксель будет использовать группу сегментов гистограммы 3×3 для расчета своего значения.
Для каждого пикселя (x,y) конечного изображения выполните следующие вычисления:
frequency_avg[x][y] := average_of_histogram_cells_frequency(x,y);
color_avg[x][y] := average_of_histogram_cells_color(x,y);
alpha[x][y] := log(frequency_avg[x][y]) / log(frequency_max);
//frequency_max is the maximal number of iterations that hit a cell in the histogram.
final_pixel_color[x][y] := color_avg[x][y] * alpha[x][y]^(1/gamma); //gamma is a value greater than 1.
Приведенный выше алгоритм использует гамма-коррекцию , чтобы цвета выглядели ярче. Это реализовано, например, в программном обеспечении Apophys.
Чтобы еще больше повысить качество, можно использовать гамма-коррекцию для каждого отдельного цветового канала, но это очень тяжелые вычисления, поскольку функция журнала работает медленно.
Упрощенный алгоритм заключается в том, чтобы позволить яркости линейно зависеть от частоты:
final_pixel_color[x][y] := color_avg[x][y] * frequency_avg[x][y]/frequency_max;
но это приведет к тому, что некоторые части фрактала потеряют детализацию, что нежелательно. [4]
Оценка плотности
[ редактировать ]Алгоритм пламени похож на симуляцию Монте-Карло , при этом качество пламени прямо пропорционально количеству итераций симуляции. Шум, возникающий в результате такой стохастической выборки, можно уменьшить путем размытия изображения, чтобы получить более плавный результат за меньшее время. Однако нежелательно терять разрешение в тех частях изображения, которые получают много выборок и поэтому имеют мало шума.
Эту проблему можно решить с помощью адаптивной оценки плотности , чтобы повысить качество изображения, сводя к минимуму время рендеринга. FLAM3 использует упрощение методов, представленных в *Адаптивная фильтрация для прогрессивного рендеринга изображений Монте-Карло*, документе, представленном на WSCG 2000 Фрэнком Суйкенсом и Ивом Д. Виллемсом. Идея состоит в том, чтобы изменять ширину фильтра обратно пропорционально количеству доступных выборок.
В результате области с небольшим количеством сэмплов и высоким уровнем шума становятся размытыми и сглаженными, а области с большим количеством семплов и низким уровнем шума остаются незатронутыми. [5]
Не все реализации Flame используют оценку плотности.
См. также
[ редактировать ]- Apophys — редактор фрактального пламени с открытым исходным кодом для Microsoft Windows и Macintosh.
- Chaotica — коммерческий редактор фракталов, поддерживающий flam3, Apophys и другие обобщения.
- Electric Sheep , хранитель экрана, созданный изобретателем фрактального пламени, который визуализирует и отображает его посредством распределенных вычислений .
- GIMP , бесплатная на нескольких ОС программа для работы с изображениями , которая может генерировать фрактальное пламя.
Ссылки
[ редактировать ]- ^ Митчелл Уайтлоу (2004). Метатворение: искусство и искусственная жизнь . МТИ Пресс . стр. 155.
- ^ Jump up to: а б «Информация о программном обеспечении Апофиз» . Архивировано из оригинала 13 сентября 2008 г. Проверено 11 марта 2008 г.
- ^ Крис Геман и Стив Рейнке (2005). Самый острый момент: анимация в конце кино . Книги YYZ. стр. 269.
- ^ Jump up to: а б с «Алгоритм фрактального пламени» (PDF) . (22,5 МБ)
- ^ См . https://github.com/scottdraves/flam3/wiki/Density-Estimation .
