Фрактальное пламя, является членом системы повторяющихся функций класса фракталов, созданного Скоттом Дрейвсом в 1992 году. Открытый исходный код Дрейвса был позже перенесен в графическое ПО Adobe After Effects и переведен в редактор фрактального пламени Apophysis.
Фрактальное пламя отличаются от обычных систем повторяющихся функций по трем причинам:
Отображение тонов и окраска предназначены для отображения как можно большего количества деталей фрактала, которые обычно приводит к более эстетичный образ.
Алгоритм состоит из двух шагов: создание гистограммы и последующее отображение гистограммы.
Сначала выполняется итерация набора функций, начиная со случайно выбранной точки P = (Px, Py, Pc), где третья координата указывает текущий цвет точка.
На каждой итерации выберите одну из функций, приведенных выше, для которой вероятность того, что выбрано F j, равна p j. Затем вычисляют следующую итерацию P, применяя F j к (P.x, P.y).
Каждая отдельная функция имеет следующий вид:
, где параметр w k называется весом вариации Vk. Дрейвс предполагает, что все : s неотрицательны и в сумме равны единице, но реализации, такие как Apophysis, не налагают этого ограничения.
Функции V k представляют собой набор предварительно определенных функций. Вот несколько примеров:
Цвет Pc точки смешивается с цветом, связанным с последней примененной функцией F j:
После каждой итерации обновляется гистограмма в точке, соответствующей (Px, Py). Это делается следующим образом:
histogram [x] [y] [FREQUENCY]: = histogram [ x] [y] [ЧАСТОТА] +1 гистограмма [x] [y] [ЦВЕТ]: = (гистограмма [x] [y] [ЦВЕТ] + Pc) / 2
Таким образом, цвета на изображении будут отражать то, что Для перехода к этой части изображения использовались функции.
Чтобы повысить качество изображения, можно использовать суперсэмплинг для уменьшения шума. Это включает в себя создание гистограммы больше, чем изображение, поэтому каждый пиксель имеет несколько точек данных для извлечения.
Например, создание гистограммы с ячейками 300 × 300, чтобы нарисовать изображение размером 100 × 100 пикселей. Каждый пиксель будет использовать группу гистограмм 3 × 3 ведра для расчета его стоимости.
Для каждого пикселя (x, y) в конечном изображении выполните следующие вычисления:
frequency_avg [x] [y]: = average_of_histogram_cells_frequency (x, y); color_avg [x] [y]: = средний_цвет_гистограммы_ячейки (x, y); альфа [x] [y]: = журнал (средн_частота [x] [y]) / журнал (частота_макс); // frequency_max - это максимальное количество итераций, попадающих в ячейку гистограммы. final_pixel_color [x] [y]: = color_avg [x] [y] * альфа [x] [y] ^ (1 / гамма); // гамма - это значение больше 1.
В приведенном выше алгоритме используется гамма-коррекция, чтобы цвета казались ярче. Это реализовано, например, в программном обеспечении Apophysis.
Чтобы еще больше повысить качество, можно использовать гамма-коррекцию для каждого отдельного цветового канала, но это очень тяжелое вычисление, поскольку функция регистрации работает медленно.
В упрощенном алгоритме яркость будет линейно зависеть от частоты:
final_pixel_color [x] [y]: = color_avg [x] [y] * frequency_avg [x] [y] / frequency_max;
, но это приведет к потере деталей некоторых частей фрактала, что нежелательно.
Алгоритм пламени похож на симуляцию Монте-Карло, где качество пламени прямо пропорционально количеству итерации моделирования. Шум, возникающий в результате этой стохастической выборки, можно уменьшить за счет размытия изображения, чтобы получить более гладкий результат за меньшее время. Однако не следует терять разрешение в тех частях изображения, которые получают много выборок и поэтому имеют небольшой шум.
Эта проблема может быть решена с помощью адаптивной оценки плотности для повышения качества изображения при минимальном времени визуализации. FLAM3 использует упрощение методов, представленных в документе * Adaptive Filtering for Progressive Monte Carlo Image Rendering *, представленном в 2000 году Фрэнком Суйкенсом и Ивом Д. Виллемсом. Идея состоит в том, чтобы изменить ширину фильтра обратно пропорционально количеству доступных выборок.
В результате области с небольшим количеством образцов и высоким уровнем шума становятся размытыми и сглаженными, но области с большим количеством образцов и низким уровнем шума остаются нетронутыми. См. https://github.com/scottdraves/flam3/w/Density-Estimation.
Не все реализации Flame используют оценку плотности.
Викискладе есть материалы, связанные с фрактальным пламенем. |