3.11.3  La Niebla

Podemos usar la característica  fog  (niebla) para añadir en una escena niebla de dos tipos diferentes: niebla constante y niebla de superficie. La niebla constante tiene la misma intensidad en todos los puntos de la escena mientras que la densidad de la niebla de superficie decrece a medida que nos desplazamos hacia arriba.

El uso de ambos tipos de niebla se describe detalladamente en los siguientes apartados.

3.11.3.1  Niebla constante

El tipo de niebla más sencillo es la niebla constante, la cual tiene la misma densidad en todos sus puntos. Ésta se especifica con la palabra clave distance la cual realmente describe la densidad de la niebla  y por el  color de la niebla

El valor de distance (distancia) determina la distancia en la cual el 36.8% del fondo es aún visible (para una explicación más detallada de cómo se calcula la niebla leer el capítulo referente a "Fog").

Se puede usar cualquier color para crear un color de niebla, desde un blanco puro hasta una rojiza niebla de color sangriento. Podemos usar una niebla de color negro para simular el efecto de alcance de visión limitada.

El siguiente ejemplo muestra cómo añadir niebla a una escena sencilla(fog1.pov).

  #include "colors.inc"
  camera {
    location  <0, 20, -100>
  }
  background { color SkyBlue }
  plane {
    y, -10
    pigment {
      checker color Yellow color Green
      scale 20
    }
  }
  sphere {
    <0, 25, 0>, 40
    pigment { Red }
    finish { phong 1.0 phong_size 20 }
  }
  sphere {
    <-100, 150, 200>,  20
    pigment { Green }
    finish { phong 1.0 phong_size 20 }
  }
  sphere {
    <100, 25, 100>, 30
    pigment { Blue }
    finish { phong 1.0 phong_size 20 }
  }
  light_source { <100, 120, 40> color White }
  fog {
    distance 150
    color rgb<0.3, 0.5, 0.2>
  }
A foggy scene
 Una escena con niebla

Según la distancia a la que se encuentren las esferas, se desvanecen en la niebla verdosa que hemos usado, al igual que el plano ajedrezado.

3.11.3.2  Estableciendo un Mínimo de Translucidez

Si queremos asegurarnos de que el fondo no se desvanezca completamente en la niebla, podemos establecer el canal de transmisión del color de la niebla en la medida que deseemos que el fondo sea visible.

Usemos un valor de transmisión de  0.2

  fog {
    distance 150
    color rgbt<0.3, 0.5, 0.2, 0.2>
 }

La translucidez de la niebla nunca caerá por debajo del 20% tal como podemos apreciar en la imagen resultante(fog2.pov).

Fog with translucency threshold added
Niebla con translucidez añadida

3.11.3.3  Creando Niebla Filtrante

La niebla verdosa que hemos estado usando hasta ahora no filtraba el paso de la luz a través de ella. Todo lo que hacía era disminuir la intensidad de la luz. Podemos cambiar esto usando un valor distinto de cero en el canal de filtro en la definición del color de la niebla (fog3.pov).
  fog {
    distance 150
    color rgbf<0.3, 0.5, 0.2, 1.0>
  }

El valor del filtro determina la cantidad de luz que es filtrada por la niebla. En nuestro ejemplo, el 100% de la luz que pasa a través de la niebla será filtrada por ella. Si usáramos un valor de 0.7, sólo el 70% de la luz hubiera sido filtrada. El 30% restante habría pasado sin ser filtrada.

A filtering fog
Una niebla filtrante.

Podemos notar que la intensidad de los objetos en la niebla no sólo ha disminuido debido al color de la niebla sino que también los colores son afectados por ella. La esfera roja y especialmente la azul adquieren una tonalidad verdosa.

3.11.3.4  Añadiendo Algo de Turbulencia a la Niebla

Para hacer que nuestra niebla sea un poco menos aburrida y hacerla más interesante, podemos añadirle algo de turbulencia, haciendo parecer que tiene una densidad no constante (fog4.pov).

  fog {
    distance 150
    color rgbf<0.3, 0.5, 0.2, 1.0>
    turbulence 0.2
    turb_depth 0.3
  }
Fog made more interesting with turbulence
Niebla  con turbulencia.

El identificador turbulence se usa para especificar la cantidad de turbulencia que usemos, mientras que el valor turb_depth  es usado para mover el punto en el cual es calculado el valor de la turbulencia a lo largo de la línea de visión. Valores próximos a 0 mueven el punto hacia el observador, mientras que valores cercanos a 1 lo mueven hacia el punto de intersección  (el valor por defecto es 0.5). Este parámetro suele ser usado para evitar los fallos que aparecen en la niebla debido al uso de la turbulencia (esto ocurre normalmente en los puntos de intersección muy alejados, especialmente si no hay intersección, como pasa en el fondo de la escena). Si esto ocurre habrá que disminuir el valor de turb_depth hasta que desaparezca el ruido del fondo.

Hay que tener en cuenta que la densidad actual de la niebla no cambia. Sólo el valor de la atenuación de la niebla, basada en la distancia se modifica por el valor de un punto a lo largo de la línea de visión.

3.11.3.5  Usando niebla de superficie

El tipo de niebla más flexible e interesante es la niebla de superficie, la cual se especifica con el identificador fog_type. Su apariencia se describe con los identificadores fog_offset y fog_alt. El identificador fog_offset especifica la altura, es decir el valor del eje Y por debajo del cual la niebla tiene una intensidad constante de 1. El identificador fog_alt determina la rapidez con que la densidad de la niebla se aproxima a 0 según nos movemos a lo largo del eje Y. A una altura de fog_offset+fog_alt  la niebla tendrá una densidad del 25%.

El siguiente ejemplo (fog5.pov) usa una niebla de superficie la cual tiene una densidad constante por debajo de y = 25 (el centro de la esfera roja) y disminuye rápidamente para altitudes mayores.

  fog {
    distance 150
    color rgbf<0.3, 0.5, 0.2, 1.0>
    fog_type 2
    fog_offset 25
    fog_alt 1
  }
An example of ground fog
Un ejemplo de niebla de superficie

3.11.3.6  Usando múltiples nieblas superpuestas

Es posible usar varias capas de niebla usando más de una declaración  fog en el archivo de la escena. Esto es bastante usual si queremos conseguir bonitos efectos de turbulencia usando nieblas de superficie. Podríamos añadir varias capas de nieblas de diferentes colores para crear, por ejemplo, una escena de aspecto siniestro.

Prueba el siguiente ejemplo (fog6.pov).

  fog {
    distance 150
    color rgb<0.3, 0.5, 0.2>
    fog_type 2
    fog_offset 25
    fog_alt 1
    turbulence 0.1
    turb_depth 0.2
  }
  fog {
    distance 150
    color rgb<0.5, 0.1, 0.1>
    fog_type 2
    fog_offset 15
    fog_alt 4
    turbulence 0.2
    turb_depth 0.2
  }
  fog {
    distance 150
    color rgb<0.1, 0.1, 0.6>
    fog_type 2
    fog_offset 10
    fog_alt 2
  }
Using multiple layers of fog
Usando capas de niebla superpuestas

Se puede combinar niebla de densidad constante, niebla de superficie, nieblas filtrantes, nieblas no filtrantes, nieblas con un umbral translúcido, etc.

3.11.3.7  La Niebla y los Objetos Vacíos

Siempre que usemos la niebla y la cámara se encuentre dentro de un objeto no vacío, no se obtendrá ningún efecto de niebla. Para una  explicación más detallada de por qué esto ocurre ver "Objetos sólidos y objetos huecos".

Para evitar el problema, tenemos que hacer que todos estos objetos sean vacíos y estar seguros de que la cámara está situada fuera de ellos (usando el identificador inverse ) o añadiendo la palabra hollow a ellos (lo cual es mucho más fácil).