4.10.2.1        Creare un Cielo Usando un Gradiente di Colore



Oltre alla sfera celeste che utilizza un solo colore, effetto che si può ottenere usando lo sfondo, la sfera celeste più semplice è un gradiente di colore. Puoi avere notato che il colore del cielo varia con l'angolo formato con la superficie della terra. Se guardi in alto il cielo normalmente ha un blu molto più profondo di quello che ha all'orizzonte. Vogliamo modellare questo effetto usando la sfera celeste come nell'esempio che segue (vedi skysph1.pov).

#include "colors.inc"
camera {
location <0, 1, -4>
look_at <0, 2, 0>
angle 80
}
light_source { <10, 10, -10> White }
sphere { 2*y, 1
pigment { color rgb <1, 1, 1> }
finish { ambient 0.2 diffuse 0 reflection 0.6 }
}
sky_sphere {
pigment {
gradient y
color_map {
[0 color Red]
[1 color Blue]
}
scale 2
translate -1
}
}

Fig. 174-Usare i gradienti

La parte interessante è la frase sky_sphere{...}. Contiene un pigmento che descrive l'aspetto del cielo. Dato che viene usato un vettore direzione per calcolare i colori del pigmento dobbiamo usare un gradient y.
Le trasformazioni
scale e translate sono usate per mappare i punti ottenuti dal vettore direzione nell'intervallo corretto. Senza queste trasformazioni il gradiente sarebbe ripetuto due volte sulla sfera celeste. L'istruzione scale è usata per evitare la ripetizione del gradiente e l'istruzione translate -1 sposta la componente 0 della color_map sul fondo della sfera (il punto della sfera celeste che vedi guardando in giù). Dopo questa trasformazione il colore alla posizione zero nella mappatura sarà sul fondo della sfera celeste, cioè sotto di noi e il colore alla posizione 1 sarà in cima cioè sopra di noi.
I colori di tutte le altre posizioni sono interpolati tra queste due come si può vedere nell'immagine risultante.
Se vuoi far iniziare uno dei colori ad un particolare angolo dovrai prima convertire l'angolo ad un valore da inserire nella mappatura dei colori. Ciò si ottiene usando la formula :

valore =(1-cos(angolo))/2

dove l'angolo è misurato rispetto alla normale negativa della superficie della terra, cioè la normale alla superficie che punta verso il centro della terra. Un angolo di 0 gradi descrive il punto sotto di noi, mentre un angolo di 180 gradi rappresenta lo zenit.
In POV-Ray devi prima convertire il valore in gradi a radianti come si mostra nel seguente esempio.

sky_sphere {
pigment {
gradient y
color_map {
[(1-cos(radians( 30)))/2 color Red]
[(1-cos(radians(120)))/2 color Blue]
}
scale 2
translate -1
}
}

Fig. 175-Gradiente

Questa scena usa un gradiente di colore che inizia col rosso a 30 gradi e sfuma nel blu a 120 gradi. Sotto i 30 gradi è tutto rosso mentre sopra i 120 è tutto blu.