7.7.5        Arcobaleno



E' possibile generare arcobaleni usando archi circolari, simili alla nebbia. La sintassi completa è :

rainbow {
direction <DIREZIONE>
angle ANGOLO
width LUNGHEZZA
distance DISTANZA
color_map { MAPPA_DEI_COLORI }
[ jitter JITTER ]
[ up <UP> ]
[ arc_angle ANGOLO_DELL'_ARCO ]
[ falloff_angle ANGOLO_DI_DECADIMENTO]
}

Il vettore direction determina la direzione della luce (virtuale) che causa l'arcobaleno. Idealmente questa è una sorgente luminosa infinitamente lontana che emette raggi di luce paralleli (come il sole). La posizione e la dimensione dell'arcobaleno sono specificate dalle parole chiave angle e width. Per capire come funzionano si dovrebbe prima sapere come viene calcolato l'arcobaleno.
Per ogni raggio si calcola l'angolo tra il vettore direzione dell'arcobaleno e il vettore direzione del raggio di luce. Se questo angolo si trova nell'intervallo che va da
ANGLE-WIDTH/2 a ANGLE+WIDTH/2 l'arcobaleno è colpito dal raggio. Il colore viene quindi determinato utilizzando l'angolo come indice nella mappa di colori dell'arcobaleno. Dopo che il colore è stato determinato verrà unito al colore dello sfondo come avviene per la nebbia. In questo modo i parametri angle e width determinano l'angolo sotto il quale l'arcobaleno è visibile. La parola chiave jitter può essere usata per aggiungere perturbazioni casuali alla mappa dei colori. Ciò aggiunge qualche irregolarità all'arcobaleno e lo rende più realistico.
La parola chiave
distance è la stessa che viene usata per la nebbia. Dato che l'arcobaleno è un effetto simile alla nebbia è possibile che esso sia visibile sugli oggetti. Se questo effetto è indesiderato può essere evitato utilizzando un alto valore per la distanza. Per default si usa un valore abbastanza alto da far sì che questo effetto non si presenti.
La parola chiave
color_map è usata per definire una mappatura del colore che verrà distribuita sull'arcobaleno. Per creare arcobaleni realistici è importante sapere che l'indice della mappa aumenta con l'angolo trai vettori direzione del raggio e dell'arcobaleno. L'indice è 0 sull'anello più interno e 1 sull'anello più esterno. I valori di filtro e di trasmittanza nei colori della mappa hanno lo stesso significato di quelli usati coi vari tipi di nebbia (vedi paragrafo "Nebbia").
L'arcobaleno predefinito è un cerchio di 360°. Questo non è un problema fino a quando si ha un piano che nasconde la parte inferiore dell'arcobaleno. Se non vuoi che si veda tutto l'arco puoi usare le parole chiave opzionali
up, arc_angle e falloff_angle per specificare un arco più piccolo.
La parola chiave
arc_angle specifica la misura dell'arco in gradi, da zero a 360. Un valore minore di 360° dà un arco con le estremità molto nette. Dal momento che questo non ha un bell'aspetto puoi usare la parola chiave falloff_angle per specificare una regione nella quale l'arcobaleno sfumerà lentamente nel colore dello sfondo. L'angolo di falloff deve essere minore o uguale all'angolo dell'arco.
La parola chiave
up determina dove è posizionato l'angolo zero. Cambiando questo vettore puoi ruotare l'arcobaleno nella direzione che esso indica. Puoi notare che l'arco parte da -arc_angle/2 e termina a +arc_angle/2. La regione sfumata va da -arc_angle/2 a falloff_angle/2 e da +falloff_angle/2 a +arc_angle/2.
Il seguente esempio crea un arcobaleno di 120° che ha un regione in cui viene sfumato ampia 30° ad entrambe le estremità.

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 240
falloff_angle 60
}

E' possibile usare più di un arcobaleno e combinare ognuno degli arcobaleni con altri effetti atmosferici.