Reference:Rainbow
Rainbows are implemented using fog-like, circular arcs. Their syntax is:
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
Rainbow default values:
arc_angle : 180.0 falloff_angle : 180.0 jitter : 0.0 up : y
The required direction
vector determines the direction of the
(virtual) light that is responsible for the rainbow. Ideally this is an
infinitely far away light source like the sun that emits parallel light rays.
The position and size of the rainbow are specified by the required angle
and width
keywords. To understand how they work you should
first know how the rainbow is calculated.
For each ray the angle between the rainbow's direction vector and the
ray's direction vector is calculated. If this angle lies in the interval
from Angle-Width/2
to
Angle+Width/2
the rainbow is hit by the ray. The color is then
determined by using the angle as an index into the rainbow's color_map.
After the color has been determined it will be mixed with the background
color in the same way like it is done for fogs.
Thus the angle and width parameters determine the angles under which the
rainbow will be seen. The optional jitter
keyword can be used
to add random noise to the index. This adds some irregularity to the rainbow
that makes it look more realistic.
The required distance
keyword is the same like the one used
with fogs. Since the rainbow is a fog-like effect it is possible that the
rainbow is noticeable on objects. If this effect is not wanted it can be
avoided by using a large distance value. By default a sufficiently large
value is used to make sure that this effect does not occur.
The color_map
statement is used to assign a color map that
will be mapped onto the rainbow. To be able to create realistic rainbows it
is important to know that the index into the color map increases with the
angle between the ray's and rainbow's direction vector. The index is
zero at the innermost ring and one at the outermost ring. The filter and
transmittance values of the colors in the color map have the same meaning as
the ones used with fogs (see the section Fog).
The default rainbow is a 360 degree arc that looks like a circle. This is no
problem as long as you have a ground plane that hides the lower, non-visible
part of the rainbow. If this is not the case or if you do not want the
full arc to be visible you can use the optional keywords up
,
arc_angle
and falloff_angle
to specify a smaller
arc.
The arc_angle
keyword determines the size of the arc in degrees
(from 0 to 360 degrees). A value smaller than 360 degrees results in an arc
that abruptly vanishes. Since this does not look nice you can use the
falloff_angle
keyword to specify a region in which the rainbow
will smoothly blend into the background making it vanish softly. The falloff
angle has to be smaller or equal to the arc angle.
The up
keyword determines were the zero angle position is. By
changing this vector you can rotate the rainbow about its direction. You
should note that the arc goes from -Arc_Angle/2 to
+Arc_Angle/2. The soft regions go from -Arc_Angle/2 to
-Falloff_Angle/2 and from +Falloff_Angle/2 to
+Arc_Angle/2.
The following example generates a 120 degrees rainbow arc that has a falloff region of 30 degrees at both ends:
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 }
It is possible to use any number of rainbows and to combine them with other atmospheric effects.