3.11.4  El Arco Iris

La característica rainbow se puede usar para crear un arco iris y quizás otros efectos más extraños. El arco iris es un efecto como la niebla el cual se restringe  al volumen de un cono.

3.11.4.1  Empezando Con Un Arco Iris Sencillo

El arco iris se especifica con muchos parámetros: el ángulo bajo el cual es visible, la anchura del color de la banda, la dirección de la luz entrante, la distancia de la niebla que lo envuelve basada en la densidad de las partículas y por último, pero no menos importante, el mapa de color que será usado.

El tamaño y la forma del arco iris son determinados por los identificadores angle y width. El identificador direction se usa para establecer la dirección de la luz entrante, colocando el arco iris en esa posición. El arco iris es visible cuando el ángulo entre el vector de dirección y la dirección de la luz incidente es mayor que angle-width/2 y más pequeño que angle+width/2.

La luz entrante es la fuente de luz virtual que es responsable del arco iris. Ahí no se necesita una fuente de luz real para crear el efecto del  arco iris.

El arco iris es como un efecto de niebla, i.e. el color del arco iris se mezcla con el color de fondo basándose en la distancia al punto de intersección. Si elegimos valores pequeños de distance el arco iris será visible sobre los objetos, no solamente en el fondo. Puedes evitarlo usando un valor muy grande de distance.

El mapa de colores es una parte crucial del arco iris, ya que contiene todos los colores que normalmente se pueden ver en un arco iris. El color de la banda más interna se toma de la entrada 0 del mapa de color mientras que el de la banda exterior se toma del color de entrada 1. Podrías notar que debido al limitado rango de colores que algunos monitores pueden mostrar es imposible crear un arco iris real. Hay justamente algunos colores que no podremos visualizar.

El canal filtro en el mapa de colores del arco iris es usado de alguna manera igual como en la niebla. Determina cuánto de la luz que pasa a través del arco iris es filtrada por el color.

El siguiente ejemplo muestra una escena simple con un plano en el suelo, tres esferas y un arco iris un poco exagerado (rainbow1.pov).

  #include "colors.inc"
  camera {
    location <0, 20, -100>
    look_at <0, 25, 0>
    angle 80
  }
  background { color SkyBlue }
  plane { y, -10 pigment { color Green } }
  light_source { <100, 120, 40> color White }
  // declara los colores del arco iris
  #declare r_violet1 = color rgbf<1.0, 0.5, 1.0, 1.0>;
  #declare r_violet2 = color rgbf<1.0, 0.5, 1.0, 0.8>;
  #declare r_indigo  = color rgbf<0.5, 0.5, 1.0, 0.8>;
  #declare r_blue    = color rgbf<0.2, 0.2, 1.0, 0.8>;
  #declare r_cyan    = color rgbf<0.2, 1.0, 1.0, 0.8>;
  #declare r_green   = color rgbf<0.2, 1.0, 0.2, 0.8>;
  #declare r_yellow  = color rgbf<1.0, 1.0, 0.2, 0.8>;
  #declare r_orange  = color rgbf<1.0, 0.5, 0.2, 0.8>;
  #declare r_red1    = color rgbf<1.0, 0.2, 0.2, 0.8>;
  #declare r_red2    = color rgbf<1.0, 0.2, 0.2, 1.0>;
  // crea el arco iris
  rainbow {
    angle 42.5
    width 5
    distance 1.0e7
    direction <-0.2, -0.2, 1>
    jitter 0.01
    color_map {
      [0.000  color r_violet1]
      [0.100  color r_violet2]
      [0.214  color r_indigo]
      [0.328  color r_blue]
      [0.442  color r_cyan]
      [0.556  color r_green]
      [0.670  color r_yellow]
      [0.784  color r_orange]
      [0.900  color r_red1]
    }
  }
Se añaden algunas irregularidades al color de las bandas usando la palabra clave jitter.

A colorful rainbow
Un colorido arco iris.

El arco iris del ejemplo es demasiado brillante. Nunca veremos un arco iris como éste en la realidad. Podríamos disminuir los colores del arco iris disminuyendo el valor de RGB en el mapa de colores.

3.11.4.2  Incrementando la Translucidez del Arco Iris

El resultado obtenido hasta ahora tiene una apariencia demasiado brillante. Reducir el color del arco iris ayudaría, pero es mucho mejor incrementar la translucidez de éste ya que dará una sensación más realista si el fondo es visible a través de él.

Podemos usar el canal de transmisión de los colores en el mapa de color para especificar una translucidez mínima, justo como hicimos con la niebla. Para conseguir resultados realistas tenemos que usar un valor grande de trasmisión como se puede ver en el siguiente ejemplo (rainbow2.pov).

  rainbow {
    angle 42.5
    width 5
    distance 1.0e7
    direction <-0.2, -0.2, 1>
    jitter 0.01
    color_map {
      [0.000  color r_violet1 transmit 0.98]
      [0.100  color r_violet2 transmit 0.96]
      [0.214  color r_indigo  transmit 0.94]
      [0.328  color r_blue    transmit 0.92]
      [0.442  color r_cyan    transmit 0.90]
      [0.556  color r_green   transmit 0.92]
      [0.670  color r_yellow  transmit 0.94]
      [0.784  color r_orange  transmit 0.96]
      [0.900  color r_red1    transmit 0.98]
    }
  }

Al aumentar el valor de la trasmisión en las bandas exteriores del arco iris logramos que se mezcle suavemente dentro del fondo.

A much more realistic rainbow
Un arco iris mucho más realista.

La imagen resultante tiene una apariencia mucho más realista que nuestro primer arco iris

3.11.4.3  Usando Arco Iris en Forma de Arco

Actualmente nuestro arco iris tiene una forma circular, aunque la mayoría de él está oculto bajo el plano del suelo. Podríamos crear fácilmente un arco de arco iris usando la palabra clave arc_angle con un ángulo inferior a 360 grados.

Si usamos arc_angle 120 por ejemplo conseguiremos un arco de arco iris en el cual desaparece bruscamente el final del mismo. Esto no tiene buen aspecto. Para evitarlo, la palabra clave falloff_angle puede usarse para especificar un área donde el arco se mezcla suavemente con el fondo.

Como se explica en la sección de referencia del arco iris (ver "Rainbow") el arco se extiende desde  -arc_angle/2 a arc_angle/2 mientras el mezclado tiene lugar desde -arc_angle/2 a -falloff_angle/2 y falloff_angle/2 a arc_angle/2. Ésta es la razón por la cual el valor de  falloff_angle tiene que ser menor o igual que el valor de arc_angle.

En el siguiente ejemplo, se ha usado un arco de 120 grados con un valor de 45 grados de desvanecimiento en ambos lados del arco (rainbow3.pov).
 

  rainbow {
    angle 42.5
    width 5
    arc_angle 120
    falloff_angle 30
    distance 1.0e7
    direction <-0.2, -0.2, 1>
    jitter 0.01
    color_map {
      [0.000  color r_violet1 transmit 0.98]
      [0.100  color r_violet2 transmit 0.96]
      [0.214  color r_indigo  transmit 0.94]
      [0.328  color r_blue    transmit 0.92]
      [0.442  color r_cyan    transmit 0.90]
      [0.556  color r_green   transmit 0.92]
      [0.670  color r_yellow  transmit 0.94]
      [0.784  color r_orange  transmit 0.96]
      [0.900  color r_red1    transmit 0.98]
    }
  }
Los ángulos de los arcos están medidos en sentido contrario a la dirección vertical del arco iris la cual puede especificarse usando la palabra clave up. Por defecto, la dirección vertical del arco iris es el eje Y.

A rainbow arc
Un arco de arco iris.

Finalmente estamos observando un arco de arco iris realista.