|
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.
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> }
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.
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 { 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.
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.
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 }
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.
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 }
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 }
Se puede combinar niebla de densidad constante, niebla de superficie, nieblas filtrantes, nieblas no filtrantes, nieblas con un umbral translúcido, etc.
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).
|