Las llamas fractales son una variante sofisticada de los fractales pertenecientes a la clase de los sistemas de funciones iteradas (IFS, por sus siglas en inglés). Fueron creadas por Scott Draves en 1992, introduciendo una nueva dimensión estética y complejidad técnica al arte generativo. El código de código abierto desarrollado por Draves fue posteriormente integrado en el software de gráficos Adobe After Effects y sirvió de base para el editor de llamas fractales Apophysis.
¿En qué se diferencian de los fractales IFS tradicionales?
A diferencia de los sistemas de funciones iteradas ordinarios, las llamas fractales introducen tres innovaciones fundamentales que permiten una mayor riqueza visual:
- Funciones no lineales: Se iteran funciones no lineales además de las transformaciones afines tradicionales.
- Visualización de densidad logarítmica: Utilizan un mapeo de tonos logarítmico en lugar de uno lineal o binario, lo que permite capturar detalles en áreas de muy alta y muy baja densidad.
- Color por estructura: El color se asigna según la ruta recursiva seguida por el punto, en lugar de basarse únicamente en la densidad o ser monocromático.
Estas mejoras en el mapeo de tonos y la coloración están diseñadas para maximizar la visibilidad de los detalles intrincados, resultando en imágenes mucho más atractivas visualmente.
El Algoritmo de Generación
El proceso de creación de una llama fractal se divide en dos etapas principales: la creación de un histograma y el renderizado posterior de dicho histograma.
1. Creación del Histograma
El proceso comienza iterando un conjunto de funciones a partir de un punto elegido al azar $P = (P.x, P.y, P.c)$, donde la tercera coordenada representa el color actual del punto.

En cada iteración, se elige una función $F_j$ con una probabilidad $p_j$. El siguiente punto se calcula aplicando dicha función a las coordenadas $(P.x, P.y)$. Cada función individual sigue la estructura general mostrada a continuación:

En esta ecuación, el parámetro $w_k$ se denomina el peso de la variación $V_k$. Aunque Scott Draves sugiere que los pesos sean no negativos y sumen uno, algunas implementaciones como Apophysis no imponen esta restricción.

Las variaciones $V_k$ son funciones predefinidas. Algunos ejemplos comunes incluyen:
- Lineal: $V_0(x,y) = (x,y)$
- Sinusoidal: $V_1(x,y) = (\sin x, \sin y)$
- Esférica: $V_2(x,y) = (x,y)/(x^2+y^2)$
El color $P.c$ del punto se mezcla con el color asociado a la función $F_j$ aplicada. Tras cada iteración, se actualiza el histograma en el punto correspondiente, haciendo que los colores finales reflejen las funciones utilizadas para alcanzar esa zona de la imagen.
2. Renderizado de la Imagen
Para mejorar la calidad y reducir el ruido, se utiliza el supersampling. Esto implica crear un histograma más grande que la imagen final (por ejemplo, un histograma de $300\times300$ para una imagen de $100\times100$ px), permitiendo que cada píxel promedie múltiples puntos de datos.
Para optimizar la luminosidad, se aplica una corrección gamma, lo que hace que los colores se vean más brillantes y detallados. Una alternativa simplificada sería hacer que el brillo dependiera linealmente de la frecuencia, pero esto provocaría la pérdida de detalles en ciertas áreas, algo indeseable en el arte fractal.
Estimación de Densidad
El algoritmo de las llamas fractales funciona de manera similar a una simulación de Monte Carlo; la calidad de la imagen es directamente proporcional al número de iteraciones. El ruido resultante del muestreo estocástico puede reducirse mediante el desenfoque, pero esto podría comprometer la resolución en áreas con muchas muestras.
Para solucionar esto, se utiliza la estimación de densidad adaptativa. Esta técnica varía el ancho del filtro de forma inversamente proporcional al número de muestras disponibles. Así, las áreas con pocas muestras (y mucho ruido) se suavizan, mientras que las áreas con muchas muestras permanecen nítidas.


