4.6.5        Luci Diffuse



Fino ad ora tutte le nostre luci hanno una cosa in comune. Producono ombre nette. Questo avviene perché l'effettiva sorgente luminosa è un punto infinitamente piccolo. Gli oggetti si trovano direttamente nella luce, nel qual caso sono pienamente illuminati, oppure no, nel qual caso sono in ombra. Nella vita reale, questo tipo di illuminazione e di omreggiatura esiste solo nello spazio, dove la luce diretta del sole squarcia la totale oscurità dello spazio. Ma qui sulla Terra, la luce si piega attorno agli oggetti, rimbalza e normalmente la sorgente luminosa ha una qualche dimensione e può essere parzialmente nascosta alla vista (le ombre non sono più così nette). Esiste quella che viene chiamata penombra, un'area in cui non c'è la totale luce, né la penombra. Per simulare queste ombre leggere, un raytracer deve fornire una dimensione alla sorgente luminosa. POV-Ray esegue questo compito con una funzione chiamata area_light. Le dimensioni dell' area_light si estendono su due assi. Queste vengono specificate dai primi due vettori nella sintassi della luce. Dobbiamo anche specificare quante luci ci devono essere. Un alto numero di luci ci fornirà ombre sfumate, ma impiegherà più tempo per il rendering. Normalmente un insieme di 3*3 o 5*5 luci sarà sufficiente. Abbiamo anche la possibilità di specificare un valore di adattamento. La parola chiave adaptive dice al programma che può adattarsi alla situazione e tracciare solo i raggi necessari a determinare il valore del pixel. Se non viene usata la parola adaptive verrà calcolato un raggio per ogni luce dell'area_light. Questo può veramente rallentare le cose. Maggiore sarà il valore di adattamento, più 'pulita' risulterà l'ombra, ma ciò risulterà in un aumentare del tempo di rendering. Normalmente un valore di 1 è sufficiente. Infine, dovremmo probabilmente usare la parola chiave jitter. Questa dice a POV-Ray di spostare leggermente la posizione di ogni luce in modo da ottenere ombre veramente sfumate invece che fornirci un'ombra consistente di bande ravvicinate.
Bene, proviamone una. Commentiamo le luci cilindriche e aggiungiamo :

light_source {
10, -3>
White
area_light <5, 0, 0>, <0, 0, 5>, 5, 5
adaptive 1
jitter
}

Questa è una luce centrata in <2,10,-3>. E'larga 5 unità lungo l'asse x e 5 lungo l'asse z e contiene 25 (5*5) luci. Abbiamo specificato adaptive 1 e jitter. Renderizziamo la scena a 200x150 -A.

Fig. 79-Luci diffuse

Immediatamente, notiamo due cose. Il rendering è discretamente più lungo di quanto non fosse con una luce spot o puntiforme e le ombre non sono più nette ! Hanno una bella zona di penombra sfumata attorno. Aspetta, può migliorare. Anche gli spot e le luci cilindriche possono essere area lights. Hai presente quelle ombre nette che avevamo nella scena con gli spot ? Non sarebbe molto ragionevole usare un insieme di 5*5 luci per ottenere uno spot, ma un insieme più piccolo potrebbe fare un ottimo lavoro, dandoci una penombra giusta per uno spot. Proviamo. Commentiamo l'area light e cambiamo le luci cilindriche in modo che risultino :

light_source { <2, 10, -3>

color White

spotlight

radius 15

falloff 18

tightness 10

area_light <1, 0, 0>, <0, 0, 1>, 2, 2

adaptive 1 jitter point_at <0, 0, 0> }

light_source { <10, 10, -1>

color Red

spotlight

radius 12

falloff 14

tightness 10

area_light <1, 0, 0>, <0, 0, 1>, 2, 2

adaptive 1 jitter point_at <2, 0, 0> }

light_source { <-12, 10, -1> color Blue

spotlight

radius 12

falloff 14

tightness 10

area_light <1, 0, 0>, <0, 0, 1>, 2, 2 adaptive 1 jitter point_at <-2, 0, 0> }

Abbiamo così tre spot 'allargati', quadrati di un'unità di lato, contenenti ciascuno una matrice di 2*2 luci, con tre colori diversi, che risplendono sulla nostra scena. Renderizziamo questa scena a 200x150 -A.

Fig. 80-Luci diffuse colorate

Sembra funzionare perfettamente. Tutte le nostre ombre hanno zone di penombra piccole e strette, proprio del genere che ci aspetteremmo di trovare su un oggetto illuminato da un vero spot.