6.9.3  Niebla (Fog)

Si no es necesario que las columnas de luz interactúen con el medio atmosférico, fog puede ser una mejor alternativa para simular la niebla o la bruma. Esta característica añade artificialmente color a cada píxel basándose en la distancia que ha recorrido el rayo. Su sintaxis es:

FOG:
    fog { [FOG_IDENTIFIER] [FOG_ITEMS...] }
FOG_ITEMS:
    fog_type Fog_Type | distance Distance | COLOR | 
    turbulence <Turbulence> | turb_depth Turb_Depth |
    omega Omega | lambda Lambda | octaves Octaves |
    fog_offset Fog_Offset | fog_alt Fog_Alt | 
    up <Fog_Up> | TRANSFORMATION

Y sus valores por defecto:

lambda     : 2.0
fog_type   : 1
fog_offset : 0.0
fog_alt    : 0.0
octaves    : 6
omega      : 0.5 
turbulence : <0,0,0>
turb_depth : 0.5
up         : <0,1,0>

Actualmente hay dos tipos de niebla, el valor por defecto que es fog_type 1 la cual es una niebla constante y fog_type 2 que es una niebla a nivel del suelo. La primera tiene una densidad constante en todos los sitios mientras que la segunda tiene una densidad constante para todas las alturas por debajo de un valor dado a lo largo de un eje vertical, y se va aclarando a lo largo de este eje.

El color de un píxel a lo largo de la profundidad de la niebla d se calcula por la siguiente fórmula

PIXEL_COLOR = exp(-d/D) * OBJECT_COLOR + (1-exp(-d/D)) * FOG_COLOR

donde D es el valor especificado de la palabra reservada distance de la niebla. A una profundidad de 0 el color final es el color del objeto. Si la profundidad de la intersección con la niebla es igual que la distancia de ésta el color final consiste en un 64% del color del objeto y un 36% del color de la niebla.

Nota: para esta ecuación, no se define una distancia de 0. En la práctica, POV-Ray tratará este valor como si la niebla estuviera "desactivada". Para usar una niebla extremadamente clara, se debería usar un valor muy cercano a cero como 1e-6 o 1e-10.

Para la niebla a nivel de suelo, la altura por debajo de la cual la niebla tiene una densidad constante se especifica con la palabra clave fog_offset. La palabra clave fog_alt se usa para especificar la proporción por la cual la niebla se va aclarando con la altura. Sus valores por defecto son 0.0 para las dos así que hay que asegurarse de especificar estos valores si se va a utilizar este tipo de niebla. A una altura de Fog_Offset+Fog_Alt la niebla tiene una densidad del 25%. La densidad de la niebla a una altura menor o igual que Fog_Offset es 1.0 y para una altura mayor que Fog_Offset se calcula por la fórmula:

1/(1 + (y - Fog_Offset) / Fog_Alt) ^2

La densidad total a lo largo de un rayo se calcula integrando desde la altura del primer punto del rayo que hace intersección con la niebla hasta la altura del último punto del rayo.

El vector opcional up especifica la dirección que apunta hacia arriba, generalmente el mismo que el vector up de la cámara. Todos los cálculos hechos a lo largo de la evaluación de la niebla a nivel del suelo se hacen relativamente a este vector, ya que los valores actuales de altura se calculan a lo largo de este vector. El vector up también se puede modificar usando cualquiera de las transformaciones descritas en "Transformaciones". Sin embargo no es buena idea escalar el vector - los resultados son difíciles de predecir - aunque la rotación sí puede llegar a ser útil. Se debería observar que las traslaciones no afectan a la dirección vertical (y por tanto no afectan a la niebla).

El color requerido tiene tres fines. El primero es definir el color que se usará para mezclar la niebla y el fondo. El segundo es especificar un umbral de translucidez. Usando una transmisión de luz mayor que 0 se puede asegurar que al menos se verá un poco de luz a lo largo de la niebla: con una transmisión de luz 0.3 se verá al menos el 30% del fondo. La tercera finalidad es crear una niebla de filtrado. Con un valor de filtrado mayor que 0 la cantidad de luz de fondo dada por el valor de filtrado será multiplicada por el color de la niebla. Un valor de filtrado de 0.7 hará que la niebla filtre el 70% de la luz de fondo y deje sin filtrar el 30%.

Las nieblas se puede superponer. Esto es, se pueden aplicar tantas capas de niebla como se quiera. Generalmente esto es más efectivo si cada capa es una niebla a nivel del suelo y de diferente color, altura y con diferentes valores de turbulencia. Para usar múltiples capas de nieblas, tan sólo hay que añadirlas todas ellas a la escena.

Opcionalmente se puede agitar la niebla añadiéndole turbulencia. La palabra clave turbulence ha de ir seguida de un valor flotante o de un vector para especificar la cantidad de turbulencia a usar. También se pueden especificar los parámetros de la turbulencia omega, lambda y octaves. Ver la sección "Modificadores de patrones" para saber más detalles sobre estos parámetros de la turbulencia.

Adicionalmente la turbulencia se puede escalar a lo largo de la dirección del rayo de vista usando la cantidad turb_depth. Sus valores típicos están entre 0.0 hasta 1.0 o más. El valor por defecto es 0.5 pero se puede usar cualquier valor de coma flotante.

Nota: la característica niebla no funcionará si la cámara está dentro de un objeto no hueco (ver la sección "Objetos sólidos y objetos huecos" para una explicación más detallada).