6.9.5  Arco iris (Rainbow)

Los arco iris se implementan usando arcos circulares que se comportan como la niebla. Su sintaxis es:

RAINBOW:
    rainbow { [RAINBOW_IDENTIFIER] [RAINBOW_ITEMS...] }
RAINBOW_ITEM:
    direction <Dir> | angle Angle | width Width |
    distance Distance | COLOR_MAP | jitter Jitter | up <Up> |
    arc_angle Arc_Angle | falloff_angle Falloff_Angle

Y sus valores por defecto:

arc_angle     : 180.0
falloff_angle : 180.0
jitter        : 0.0
up            : y

El vector requerido direction determina la dirección de la fuente de luz (virtual) que es responsable del arco iris. Idealmente es una fuente de luz muy lejana e infinita que emite rayos paralelos, como el sol. La posición y el tamaño del arco iris se especifican con las palabras clave requeridas angle y width. Para comprender cómo funcionan primero se debería saber cómo se calcula el arco iris.

Para cada rayo se calcula el ángulo entre la dirección del arco iris y la dirección del rayo. Si este ángulo está en el intervalo Angle-Width/2 a Angle+Width/2, el rayo golpea el arco iris. Entonces el color se determina usando el ángulo como un índice dentro del mapa de colores del arco iris. Después de esto se fundirá con el fondo del mismo modo que se hace con las nieblas.

De este modo los parámetros ángulo y anchura determinan los ángulos bajo los cuales se verá el arco iris. La palabra reservada opcional jitter se puede usar para añadir un ruido aleatorio al índice. Esto añade algunas irregularidades al arco iris que lo hacen parecer más realista.

La palabra reservada requerida distance tiene el mismo significado que la usada con las nieblas. Como el efecto arco iris se comporta como el efecto niebla, es posible que el arco iris sea visible en los objetos. Si esto no se desea se puede evitar usando un gran valor para la distancia. Por defecto se usa un valor suficientemente grande para asegurarse que esto no ocurre.

La sentencia color_map se usa para asignar un mapa de colores que será mapeado en el arco iris. Para crear arco iris realistas es importante saber que el índice dentro del mapa de colores se incrementa con el ángulo entre el rayo y el vector dirección del arco iris. El índice es 0 en el anillo más interno del arcoiris y 1 en el más externo. Los valores de filtrado y transmisión de luz de los colores en el mapa de colores tienen el mismo significado que los usados con las nieblas (ver sección "Niebla (Fog)").

El arco iris por defecto es un arco de 360 grados que parece un círculo. Esto no es un problema si se tiene un plano que haga de suelo y esconda la parte baja, no visible del arco iris. Si éste no es el caso o si no se quiere que sea visible todo el arco se pueden usar las palabras clave opcionales up, arc_angle y falloff_angle para especificar un arco más pequeño.

La palabra clave arc_angle determina el tamaño del arco en grados (desde 0 a 360 grados). Un valor menor que 360 grados resulta en un arco que desaparece de un modo muy brusco. Como esto no queda muy bien, se puede usar la palabra reservada falloff_angle para especificar una región en la cual el arcoiris se mezclará suavemente con el fondo haciéndolo desaparecer dulcemente. El ángulo de caída (falloff_angle) tiene que ser menor o igual que el ángulo del arco (arc_angle).

La palabra clave up determina dónde está la posición para el ángulo 0. Cambiando este vector se puede rotar el arco iris sobre su dirección. Se debería notar que el arco va desde -Arc_Angle/2 hasta +Arc_Angle/2. Las regiones suavizadas van desde -Arc_Angle/2 hasta -Falloff_Angle/2 y desde +Falloff_Angle/2 hasta +Arc_Angle/2.

El siguiente ejemplo genera un arco iris de 120 grados que tiene una región de caída de 30 grados en sus dos extremos:

  rainbow {
    direction <0, 0, 1>
    angle 42.5
    width 5
    distance 1000
    jitter 0.01
    color_map { Rainbow_Color_Map }
    up <0, 1, 0>
    arc_angle 120
    falloff_angle 30
  }

Se pueden usar cualquier número de arco iris y combinarlos con cualquier otro efecto atmosférico.