stringtranslate.com

Llama fractal

Una llama fractal creada por el proyecto informático Electric Sheep .
Llama fractal creada en Apophysis .

Las llamas fractales son miembros de la clase de sistema de funciones iteradas [1] de fractales creados por Scott Draves en 1992. [2] El código fuente abierto de Draves se transfirió posteriormente al software de gráficos Adobe After Effects [3] y se tradujo al fractal Apophysis . editor de llamas. [2]

Las llamas fractales se diferencian de los sistemas de funciones iteradas ordinarias en tres formas:

El mapeo de tonos y la coloración están diseñados para mostrar la mayor cantidad de detalles posible del fractal, lo que generalmente resulta en una imagen estéticamente más agradable.

Algoritmo

El algoritmo consta de dos pasos: crear un histograma y luego renderizarlo.

Creando el histograma

Una llama fractal.

Primero, se itera un conjunto de funciones, comenzando desde un punto elegido aleatoriamente P = (Px,Py,Pc) , donde la tercera coordenada indica el color actual del punto.

Conjunto de funciones de llama:

En cada iteración, elija una de las funciones anteriores donde la probabilidad de que se elija F j sea p j . Luego se calcula la siguiente iteración de P aplicando F j en (Px,Py) .

Cada función individual tiene la siguiente forma:

donde el parámetro w k se llama peso de la variación V k . Draves sugiere [4] que todos los :s no son negativos y suman uno, pero implementaciones como Apophysis no imponen esa restricción.

Las funciones Vk son un conjunto de funciones predefinidas. Algunos ejemplos [4] son

El color Pc del punto se mezcla con el color asociado con la última función aplicada F j :

Pc := (Pc + (F j ) color ) / 2

Después de cada iteración, se actualiza el histograma en el punto correspondiente a (Px,Py) . Esto se hace de la siguiente manera:

histograma [ x ][ y ][ FRECUENCIA ] := histograma [ x ][ y ][ FRECUENCIA ] + 1 histograma [ x ][ y ][ COLOR ] := ( histograma [ x ][ y ][ COLOR ] + P . c ) / 2      

Por lo tanto, los colores de la imagen reflejarán qué funciones se utilizaron para llegar a esa parte de la imagen.

Representar una imagen

Para aumentar la calidad de la imagen, se puede utilizar supermuestreo para disminuir el ruido. Esto implica crear un histograma más grande que la imagen para que cada píxel tenga múltiples puntos de datos de los cuales extraer. Por ejemplo, cree un histograma con 300×300 celdas para dibujar una imagen de 100×100 px; cada píxel usaría un grupo de 3×3 de cubos de histograma para calcular su valor.

Para cada píxel (x,y) de la imagen final, realice los siguientes cálculos:

frecuencia_avg [ x ][ y ] := promedio_de_histograma_celdas_frecuencia ( x , y ); color_avg [ x ][ y ] := promedio_de_histograma_celdas_color ( x , y );    alfa [ x ][ y ] := log ( frecuencia_avg [ x ][ y ]) / log ( frecuencia_max ); //frequency_max es el número máximo de iteraciones que llegan a una celda en el histograma.     final_pixel_color [ x ][ y ] := color_avg [ x ][ y ] * alfa [ x ][ y ] ^ ( 1 / gamma ); //gamma es un valor mayor que 1.     

El algoritmo anterior utiliza corrección gamma para hacer que los colores parezcan más brillantes. Esto se implementa, por ejemplo, en el software Apophysis.

Para aumentar aún más la calidad, se puede utilizar la corrección gamma en cada canal de color individual, pero este es un cálculo muy pesado, ya que la función de registro es lenta.

Un algoritmo simplificado sería dejar que el brillo dependa linealmente de la frecuencia:

final_pixel_color [ x ][ y ] := color_avg [ x ][ y ] * frecuencia_avg [ x ][ y ] / frecuencia_max ;    

pero esto haría que algunas partes del fractal perdieran detalles, lo cual no es deseable. [4]

Estimación de densidad

El algoritmo de la llama es como una simulación de Monte Carlo , con la calidad de la llama directamente proporcional al número de iteraciones de la simulación. El ruido que resulta de este muestreo estocástico se puede reducir desenfocando la imagen, para obtener un resultado más suave en menos tiempo. Sin embargo, no se quiere perder resolución en las partes de la imagen que reciben muchas muestras y por tanto tienen poco ruido.

Este problema se puede resolver con una estimación de densidad adaptativa para aumentar la calidad de la imagen manteniendo los tiempos de renderizado al mínimo. FLAM3 utiliza una simplificación de los métodos presentados en *Adaptive Filtering for Progressive Monte Carlo Image Rendering*, un artículo presentado en WSCG 2000 por Frank Suykens e Yves D. Willems. La idea es variar el ancho del filtro de manera inversamente proporcional al número de muestras disponibles.

Como resultado, las áreas con pocas muestras y mucho ruido se vuelven borrosas y suavizadas, pero las áreas con muchas muestras y poco ruido no se ven afectadas. [5]

No todas las implementaciones de Flame utilizan estimación de densidad.

Ver también

Referencias

  1. ^ Mitchell Whitelaw (2004). Metacreación: arte y vida artificial . Prensa del MIT . págs. 155.
  2. ^ ab "Información sobre el software Apophysis". Archivado desde el original el 13 de septiembre de 2008 . Consultado el 11 de marzo de 2008 .
  3. ^ Chris Gehman y Steve Reinke (2005). El punto más agudo: la animación al final del cine . Libros YYZ. págs.269.
  4. ^ abc "El algoritmo de la llama fractal" (PDF) . (22,5MB)
  5. ^ Consulte https://github.com/scottdraves/flam3/wiki/Fractal_flame/Density-Estimation.