Sunteți pe pagina 1din 22

REDAREA LUMINII IN IMAGINI

Imaginile sintetizate cu ajutorul calculatorului trebuie sa fie cat mai apropiate de acelea care ar fi
percepute de ochiul uman dac scenele reprezentate in imagini ar exista in realitate. De aceea,
eliminarea prilor nevizibile este doar primul pas in sinteza imaginilor realiste. Urmtorul pas
consta in redarea luminii i a umbrelor, luand in considerare sursele de lumin, caracteristicile
suprafeelor obiectelor, pozitia si orientarea lor.
Modelele de iluminare folosite frecvent n sinteza imaginilor permit calculul intensitii luminii
reflectate spre ochiul unui observator de diferite puncte ale suprafeei unui obiect. Sunt dou clase
de modele de iluminare:
modele locale - intensitatea luminii se determin innd cont numai de lumina incident care
provine de la una sau mai multe surse de lumin, de orientarea i caracteristicele fizice ale
suprafeei;
modele globale - se ine cont n plus de lumina reflectat i transmis de celelalte obiecte ale
scenei sintetizate.

Proprietile luminii. Modele de culoare.

Lumina este energie electromagnetic. Ea reprezint zona din spectrul electromagnetic cuprins
ntre lungimile de und de 38 i 78 nanometri. Limita inferioar a zonei corespunde culorii violet
iar cea superioar culorii rou. Intre cele dou limite ochiul poate distinge circa 350000 de culori.
Atunci cnd energia luminoas cade pe suprafaa unui obiect, ea poate fi absorbit, reflectat sau
transmis. Deci, lumina perceput de ochi provine fie direct de la o surs, fie indirect, datorit
reflexiei i a transmisiei sale de ctre obiectele din mediul nconjurtor.
Lumina care conine toate lungimile de und din spectrul vizibil n proporii aproximativ egale se
numete acromatic. Lumina acromatic provenit de la o surs este perceput ca alb. Lumina
acromatic provenit de la un obiect este perceput ca alb, neagr sau ca o nuan de gri n
funcie de proprietile fizice ale suprafeei obiectului. Obiectele care reflect acromatic mai mult
de 80% din lumina incident alb apar ca albe. Cele care reflect acromatic mai puin de 3% din
lumina incident apar ca negre.

1
Lumina care conine mai multe lungimi de und n proporii inegale se numete cromatic. Astfel,
dac predomin lungimile de und de la limita superioar a spectrului vizibil, lumina perceput
este roie sau rocat. Culoarea unui obiect depinde att de distribuia lungimilor de und n lumina
care cade pe obiect ct i de caracteristicile fizice ale obiectului. Dac obiectul reflect sau
transmite numai o band ngust de lungimi de und, celelalte fiind absorbite, obiectul apare
colorat. Lungimile de und din lumina reflectat sau transmis determin culoarea obiectului. De
fapt, energia electromagnetic nu are culoare. Culoarea este rezultatul unui proces psiho-fiziologic.
In particular, este posibil ca o aceeai culoare s nu fie perceput la fel de doi indivizi.
Definiia psiho-fiziologic a unei culori cuprinde:
Nuana, care caracterizeaz culoarea (rou, galben, verde, etc); ea este determinat de
lungimea de und dominant a distribuiei spectrale a culorii.
Saturaia sau puritatea, care este o msur a amestecului de alb ntr-o culoare pur; aceast
noiune permite s se fac distincie ntre rou i roz, ntre albastru i bleu, etc. O culoare
pur are saturaia 100%. Lumina acromatic are saturaia 0%.
Luminozitatea sau strlucirea, care reprezint intensitatea luminii. Luminozitatea este o
caracteristic a unui obiect emitor de lumin n timp ce strlucirea caracterizeaz un obiect
neemitor, care reflect lumina.
In figura 1.a este redat distribuia energiei luminii albe iar n figura 1.b distribuia energiei cu o
lungime de und dominant, care este perceput de ochi ca o culoare. Cu ct diferena Ed-Ew este
mai mare cu att culoarea este mai pur. Dac Ew=0, culoarea are puritatea 100% iar lumina cu un
astfel de spectru este numit monocromatic. Prin definiie, lumina monocromatic are un spectru
cu o lrgime de band de un nanometru.

2
Culorile percepute de ochi sunt n general amestecuri de culori pure. Cea mai cunoscut dintre
teoriile privind formarea culorilor n sistemul ochi-creier este aceea conform creia n retina
ochiului uman exist trei tipuri de conuri, fiecare tip fiind sensibil la una dintre culorile rou, verde
i albastru. In figura 2 sunt redate rezultatele obinute pe cale experimental.

De exemplu, la lumina corespunztoare lungimii de und de 550 nanometrii, receptorii de albastru


au o senzitivitate de 0%, cei de verde de circa 55% iar cei de rou de circa 45%. Curbele arat c
receptorii de albastru sunt mult mai puin sensibili dect cei de rou i de verde. Suma celor trei
curbe de rspuns, redat n figura 3, este numit curba de luminozitate. Ea ilustreaz rspunsul
ochiului la lumin de luminozitate constant atunci cnd variaz lungimea de und dominant;
senzitivitatea maxim corespunde luminii cu lungimea de und n jur de 550 nm, perceput ca

3
galben-verde. Culorile rou, verde i albastru se numesc culori primare. Prin amestecul lor n
proporii egale se obine alb. Dou culori care prin amestec produc lumin alb se numesc
complementare. Amestecnd dou culori primare se obine culoarea complementar celei de a treia.
De exemplu, albastru+verde=cian, rou+verde=galben, rou+albastru= magenta. Culorile rou,
verde i albastru se numesc i primitive aditive deoarece ele permit formarea de nuane prin
adunarea lor n diferite proporii. Acest mod de definire a culorilor corespunde echipamentelor
emitoare de lumin (dispozitive de vizualizare cu ecran). Culorile complementare primitivelor
aditive sunt cian, magenta i galben. Astfel, alb-rou=cian, alb-verde=magenta, alb-albastru=galben.
Ele permit specificarea de nuane prin extragerea lor n diferite proporii din alb. De aceea, se
numesc primitive extractive. Sczndu-le n proporii egale din alb se obin diferite nuane de gri.
Primitivele extractive se folosesc pentru a defini culorile reflectate de un document imprimat.
Pigmenii existeni n cernelurile tipografice absorb culorile complementare acelora ale pigmenilor.
De exemplu, pigmentul de culoare magenta absoarbe din lumina incident componentele
corespunztoare luminii verde, iar cel de culoare galben, componentele corespunztoare luminii
albastre. De aceea, o suprafa care conine pigmeni magenta i galben va reflecta (sau transmite)
lumin roie. Dac lumina roie este incident pe o suprafa de culoare cian, suprafaa va fi vzut
neagr, deoarece toate componentele luminii incidente au fost extrase.
Exist mai multe modele folosite pentru reprezentarea culorilor n sistemele de sintez i de
analiz a imaginilor. Unele dintre ele sunt orientate ctre echipamente, adic se bazeaz pe culorile
primare folosite de echipamente pentru redarea culorilor; n aceast categorie sunt: RGB, CMY i
YIQ. Alte modele se bazeaz pe proprietile psiho-fiziologice ale culorilor. De aceea se spune c
sunt orientate ctre utilizator; astfel sunt modelele HSV i HLS.
Un model de culoare specific un sistem de coordonate 3D i un subspaiu al culorilor n sistemul de
coordonate respectiv. Fiecare culoare se reprezint printr-un punct n subspaiul culorilor.

Modelul RGB (Red, Green, Blue)

A fost propus de NTSC (National Television Standards Commitee) ca model de reprezentare a


culorilor pentru echipamentele de afiare cu tub catodic.
Subspaiul culorilor este cubul unitate, definit n sistemul de coordonate carteziene 3D (figura 4).
Fiecare ax corespunde unei culori primare: rou, verde i albastru. O culoare se specific prin trei
valori reale cuprinse ntre 0 i 1, reprezentnd contribuiile celor trei culori primare la formarea
4
culorii. Nuanele de gri sunt reprezentate prin punctele diagonalei principale. Ele corespund
amestecului n proporii egale al celor trei culori primare.

Modelul CMY (Cyan, Magenta, Yellow)

Este utilizat pentru specificarea culorilor la dispozitivele de imprimare. Folosete acelai sistem de
coordonate i acelai subspaiu al culorilor ca i modelul RGB cu deosebirea c originea corespunde
culorii alb, vrful (1,1,1) culorii negru iar culorile primare sunt cian, magenta i galben (figura 5.).

In acest model, o culoare se specific prin trei valori cuprinse ntre 0 i 1, reprezentnd
proporiile n care trebuie s fie amestecai cei trei pigmeni ce extrag componentele luminii albe.
Culoarea negru se obine amestecnd n proporii maxime culorile primare. In general ns, datorit
imperfeciunilor cernelurilor, prin amestecul n proporii maxime al celor trei pigmeni nu se obine
negru. De aceea, n loc de CMY se utilizeaz sistemul CMYK:
K= min(C,M,Y), C = C - K , M = M - K , Y = Y - K

5
Conversia unei culori din modelul RGB n modelul CMY i invers este foarte simpl. Ea poate fi
exprimat astfel:
[C M Y] = [1 1 1] - [R G B]
respectiv
[R G B] = [1 1 1] - [C M Y]

Modelul YIQ

Acest model este o recodificare a modelului RGB, stabilit n 1953 de ctre NTSC, prin care s-a
urmrit compatibilizarea transmisiei imaginilor color cu a celor alb-negru.
Subspaiul culorilor n acest model este un poliedru convex raportat la sistemul cartezian 3D, care
se aplic n cubul RGB prin inversa transformrii:

|Y | |0.299 0.587 0.114 | |R|


| I | = |0.596 -0.274 -0.322| |G|
|Q | |0.211 -0.523 0.312| |B|

Prin specificarea culorilor n modelul YIQ se evit o problem TV important: dou culori
diferite n modelul RGB se pot afia la fel pe un ecran alb-negru. Problema este evitat asigurndu-
se c dou culori ntre care ochiul face distincie vor avea valori distincte ale luminozitii,
reprezentat prin componenta Y i deci pe un ecran alb-negru vor fi afiate cu intensiti diferite.
Modelul se bazeaz pe faptul c sistemul vizual este mai sensibil la schimbri ale luminozitii
dect la schimbri ale nuanei sau ale saturaiei care sunt reprezentate n acest model prin
componentele I i Q. De aceea, semnalului Y i s-a alocat cea mai mare parte a lrgimii de band
disponibile. Proporiile culorilor primare n sistemul NTSC au fost determinate astfel nct s se
obin curba standard de luminozitate. Deoarece informaia de luminozitate este coninut n
componenta Y, televizoarele alb-negru folosesc numai acest semnal.

Modelul HSV (Hue, Saturation, Value)

Specificarea culorilor n modelele RGB i CMY poate fi dificil pentru utilizatorii unui sistem
grafic. Artitii specific culorile prin tente, nuane i tonuri. Pornind de la un pigment pur, un artist

6
adaug alb pentru a obine o tent, negru pentru a obine o nuan, alb i negru pentru a obine o
tonalitate a culorii. Aceasta corespunde reprezentrii triunghiulare din figura 6.

Aeznd triunghiurile corespunztoare culorilor pure n jurul unei axe centrale alb-negru, se obine
reprezentarea tri-dimensional de forma unui hexacon, redat n figura 7.

Modelul HSV folosete noiunile de nuan (hue), saturaie (saturation) i luminozitate (value). Baza
hexaconului corespunde culorilor de intensitate maxim (V=1). Nuana este definit prin unghiul de
rotaie n jurul axei verticale, unghiul zero corespunznd culorii rou. Culorile complementare sunt
situate la 180 de grade una fa de alta pe baza hexaconului. Saturaia este definit prin distana de la
axa hexaconului la marginile hexaconului, pentru toate valorile lui V. Ea variaz de la zero, pe ax,
la 1, pe feele laterale ale hexaconului. O combinaie de numai dou culori primare d o culoare cu
saturaie maxim, dar un amestec n care toate cele trei culori primare sunt diferite de zero nu poate
produce o culoare cu saturaia maxim. Combinaia (S=0,V=1) corespunde culorii alb iar prin (S=0,
0<=V<=1) se reprezint nivelele de gri. Pentru S=0 valoarea lui H este nesemnificativ. Culorile
pure sunt reprezentate prin V=1 i S=1.

7
H, S i V corespund elementelor din sistemul de culori al unui arist. Astfel, selectarea pigmentului
pur cu care se ncepe nseamn alegerea lui H. Adugarea de alb nseamn micorarea lui S.
Adugarea de negru nseamn micorarea lui V. Se obin diferite tonuri micornd att pe V ct i
pe S.

Baza hexaconului corespunde suprafeei vzute atunci cnd se privete cubul RGB dinspre vrful
(1,1,1) de-a lungul diagonalei principale (figura 8).

Corespondenta dintre sase varfuri ale cubului din modelul RGB si varfurile hexagonului din modelul
HSV este prezentata in Tabelul 1 (in care H este masurat in grade).

RGB HSV
(100) Red (0, 1, 1)
(110) Yellow (60, 1, 1)
(010) Green (120, 1, 1)
(011) Cyan (180, 1, 1)
(001) Blue (240, 1, 1)
(101) Magenta (300, 1, 1)
Tabelul 1

Fiecare plan de V constant din spaiul HSV corespunde vederii unui subcub din cubul RGB.
Diagonala principal a cubului RGB devine axa principal n spaiul HSV. Aceast interpretare
conduce la urmtorii doi algoritmi de conversie ntre modelele RGB i HSV:

8
float r,g,b,h,s,v;
int RGB_HSV()
{/* Se dau r,g,b, valori cuprinse ntre 0 i 1
Se calculeaz s,v, cuprinse ntre 0 i 1, h cuprins ntre 0 i 360 grade.
Funcia ntoarce valoarea 0 dac h este nedefinit, 1 dac a fost calculat
*/
float max, min, dr, dg, db;
max= maxim(r,g,b);
min= minim(r,g,b);
/* calculul luminozitii */
v=max;
/* calculul saturaiei */
if(max !=0) s=(max-min)/max;
else s=0;
/* calculul nuanei */
if(s!=0)
{ dr=(max-r)/(max-min);/* apropierea culorii de rou */
dg=(max-g)/(max-min);
db=(max-b)/(max-min);
if(r==max) /* Culoarea este ntre galben i magenta */
h=db-dg;
else
if(g==max)/* Culoarea este ntre cian i galben */
h=2+dr-db;
else /* b==max */
h=4+dg-dr;/* Culoarea este ntre magenta i cian */
h=h*60; /* conversie n grade */
if(h < 0 ) h= h + 360;
return 1;
}
else
return 0; /* h nedefinit */
}

9
int HSV_RGB()
{ /* se dau h,s,v;
h este cuprins ntre 0 i 360 grade sau este nedefinit (<0)
s i v sunt valori cuprinse ntre 0 i 1
*/
int i; float f,p,q,t;
if(s==0) /* lumin acromatic */
{ if(h<0) /* h este nedefinit */
{r=g=b=v; return 1;}
else return 0; /* caz de eroare*/
}
if(h==360) h=0;
h=h/60;
i=h; /* partea ntreag a lui h */
f=h-i;
p=v*(1-s); q=v*(1-(s*f));
t=v*(1-(s*(1-f)));
switch(i)
{ case 0: r=v; g=t; b=p; break;
case 1: r=q; g=v; b=p; break;
case 2: r=p; g=v; b=t; break;
case 3: r=p; g=q; b=v; break;
case 4: r=t; g=p; b=v; break;
case 5: r=v; g=p; b=q; break;
}
return 1;
}

Modelul HLS (Hue, Lightness, Saturation)

Modelul este utilizat de firma Tektronix. Subspaiul culorilor are forma unui dublu hexacon
(figura 9.). Componentele H i S sunt definite la fel ca n modelul HSV. In acest model culorile
primare cu saturaie maxim i complementarele lor sunt reprezentate prin S=1, L=0.5. Conversia
RGB - HLS i invers este efectuat pe baza unor algoritmi asemntori acelora de conversie RGB-
HSV i HSV-RGB.

10
Interpolarea n spaiul culorilor

Exist mai multe metode folosite n iluminarea scenelor 3D care se bazeaz pe interpolarea
culorilor. De exemplu, calculul intensitii n modelul Gouraud, calculul iluminrii ntr-un punct al
unei suprafee transparente i altele. Rezultatul interpolrii ntre dou culori depinde de modelul
de culoare n care sunt specificate. Astfel, rezultatul interpolrii n oricare dintre modelele RGB,
CMY i YIQ va fi acelai, deoarece conversiile ntre aceste modele sunt transformri afine. In
schimb, rezultatul interpolrii n HSV sau n HLS va fi diferit de acela al interpolrii n RGB.
Fie dou culori specificate n modelul RGB, C1=(1,0,0) i C2=(0,1,0). Le interpolm cu ponderi
egale n modelele RGB i HSV:

(a) In modelul RGB:


C=t*C2 + (1-t)*C1 unde t=0.5, se obine
C=(0.5, 0.5, 0), care convertit n HSV ne d (60, 1, 0.5)
(b) In modelul HSV:
C1 se reprezint n HSV prin (0, 1, 1) iar
C2 prin (120, 1, 1)
C= 0.5*(0,1,1) + 0.5*(120,1,1) = (60, 1, 1)

11
Deci, culorile obinute n cele dou cazuri sunt diferite.
Alegerea modelului n care se efectueaz interpolarea depinde de rezultatul dorit. De
exemplu, dac se dorete interpolarea a dou culori cu o anumit nuan (sau saturaie),
meninndu-se aceeai nuan (saturaie) pentru toate culorile interpolate, se va alege modelul HSV
sau HLS.

Modele empirice pentru calculul reflexiei

Caracteristicile luminii reflectate de suprafaa unui obiect depind de lungimile de und coninute
n lumina incident, de direcia i geometria sursei luminoase, de orientarea suprafeei i de
proprietile materialului din care este construit suprafaa. Lumina reflectat de o suprafa real
(care nu este difuzor perfect sau reflector perfect) este considerat ca avnd o component difuz i
una specular.
Expresia care modeleaz intensitatea luminii reflectate ntr-un punct al unei suprafee este
definit pentru o suprafa necolorat i o lumin incident monocromatic, deci caracterizat
printr-o anumit lungime de und, . In cazul general, lumina reflectat nu este monocromatic,
de aceea pentru calculul su expresia ar trebui s fie evaluat continuu pe ntregul domeniu al
spectrului de modelat. In practic, expresia se evalueaz pentru cele trei componente ale modelului
de culoare folosit. Aceast simplificare, dei nu corespunde realitii, este uor de implementat i
conduce la rezultate acceptabile.
Lumina ambianta

Obiectele dintr-o scen real primesc nu numai lumina emis de sursele de lumin ci i lumina
reflectat sau transmis de celelalte obiecte ale scenei. In modelele de iluminare local, lumina
reflectat sau transmis de celelalte obiecte ale scenei este numit lumin ambiant i se reprezint
ca o surs de lumin distribuit uniform n spaiu. Astfel intensitatea rezultata Iam este data de:

Iam = Ia * ka (1.)

unde
Ia este intensitatea luminii ambiante (este constanta pentru toate obiectele scenei)
ka ( 0<= ka<= 1) este coeficientul de difuzie a luminii ambiante, dependent de material.

12
Reflexia difuz

Lumina reflectat difuz de o suprafa este dispersat regulat n toate direciile. Deci, intensitatea
sa este considerat a fi aceeai, din oricare poziie ar privi observatorul. Legea lui Lambert
definete reflexia luminii provenite de la o surs punctiform, de ctre un difuzor perfect. Conform
acestei legi, intensitatea luminii reflectate de un difuzor perfect, ntr-un punct P, este proporional
cu cosinusul unghiului dintre direcia luminii incidente i normala la suprafa n punctul P (figura
10.):

Id=Ip * kd * cos(i) , 0<= i <= /2, (2.)

unde
Ip este intensitatea luminii incidente
kd este coeficientul de difuzie a luminii incidente, 0<=kd<=1.

Dac i este mai mare ca /2, suprafaa nu primete lumin de la surs (sursa de lumin se afl n
spatele suprafeei).
Coeficientul de difuzie depinde de materialul din care este construit suprafaa obiectului i de
lungimea de und a luminii incidente. In modelele elementare de iluminare el este considerat
constant pentru o suprafa dat.
Atunci cnd sursa de lumin punctiform este suficient de ndeprtat de obiectele scenei
vizualizate, vectorul L este acelai n orice punct. Sursa de lumin este numit n acest caz
direcional.
Tinand cont si de lumina ambianta intensitatea rezultata va deveni :
I = Ia*ka + Ip * kd * cos(i) , 0<= i <= /2, (2.)

13
Daca consideram vectoii N si L normalizati (2) se poate rescrie ca:
_ _
I = Ia*ka + Ip * kd * ( N L ) (2.)
_ _
N L reprezinta produsul scalar dintre vectorii N si L.

Aplicnd modelul (2.) pentru vizualizarea a dou suprafee paralele construite din acelai material,
se va obine o aceeai intensitate (unghiul dintre L i normal este acelai pentru cele dou
suprafee). Dac proieciile suprafeelor se suprapun n imagine, atunci ele nu se vor distinge.
Aceasta deoarece n model nu se ine cont de faptul c intensitatea luminii descrete proporional
cu inversul ptratului distanei de la sursa de lumin la obiect. Deci, obiectele mai ndeprtate de
surs sunt mai slab luminate. O posibil corecie a modelului ar putea fi:

_ _
I = Ia* ka + fat * Ip* kd* ( N L ) (3.)

1
unde fat = este o funcie de atenuare; d este distana de la surs la punctul de pe suprafa
d2
considerat. Corecia nu satisface cazurile n care sursa este foarte ndeprtat; de asemenea, dac
sursa este la distan foarte mic de scen, intensitile obinute pentru dou suprafee cu acelai
unghi i, ntre L i N, vor fi mult diferite.

O aproximare mai bun este urmtoarea:


1
fat = min( , 1) (4.)
c1 + c 2 * d + c 3 * d 2

unde c1, c2 i c3 sunt trei constante care se asociaz sursei de lumin. Constanta c1 se alege astfel
nct numitorul s nu devin prea mic atunci cnd sursa este foarte apropiat. Valoarea funciei este
limitat la 1 pentru a se asigura atenuarea.

In general, lumina incident nu este monocromatic iar suprafaa pe care cade poate fi colorat.
De aceea, pentru calculul luminii reflectate, ecuaia (3.) se scrie separat pentru cele trei
componente ale modelului de culoare folosit. De exemplu, dac se folosete modelul RGB, atunci
ecuaia corespunztoare componentei "Red a culorii luminii reflectate este:

14
_ _
IR = IaR * kaR + fat*IpR*kd*( N L )
unde
kaR i kd sunt coeficienii de difuzie ai culorii rou, specifici materialului suprafeei. In mod
similar sunt obtinute intensitatile luminii pentru componentele verde si albastru IG, respectiv IB.
O alt expresie folosit n acelai scop este:
_ _
IR = IaR*ka*OdR + fat*IpR*kd*OdR*( N L )

unde OdR este o constant specific materialului din care este construit suprafaa.

Pentru a nu restrnge modelul de iluminare la un anumit model de culoare, a fost propusa o notaie
n care se asociaz indicele tuturor termenilor care sunt dependeni de lungimea de und:
_ _
I = Ia *ka*Od + fat*Ip *kd*Od *( N L ) (5.)

Reflexia specular

Un reflector perfect, de exemplu o oglind, reflect lumina numai ntr-o singur direcie, R, care este
simetric cu L fa de normala la suprafa (figura 11.). Deci, numai un observator situat exact pe
direcia respectiv va percepe raza reflectat.

Pentru materialele imperfect reflectante cantitatea de lumin care ajunge la observator depinde de
distribuia spaial a luminii reflectate specular. La suprafeele netede distribuia este dreapt i
focalizat; la suprafeele cu rugoziti ea este dispersat.
In general, lumina reflectat specular are caracteristicile luminii incidente. De exemplu, suprafaa
unui mr rou iluminat cu o lumin alb intens produce o lumin intens de culoare alb ntr-o

15
zon foarte restrns, datorit reflexiei speculare. Restul suprafeei mrului apare ca roie i mult
mai slab luminat, dtorit reflexiei difuze.

Phong a dezvoltat un model de iluminare empiric pentru calculul reflexiei speculare a reflectorilor
imperfeci. El aproximeaz scderea rapid a intensitii luminii reflectate atunci cnd crete
(figura 11.), prin cos()n, unde n este exponentul de reflexie specular al materialului. Astfel, n
modelul Phong, intensitatea luminii speculare este definit astfel:

Is = Ip* w(i, ) * cos()n (6.)


unde
w(i, ) este funcia de reflectan
i- unghiul de inciden
-lungimea de und a luminii incidente.

Valoarea lui n se alege n funcie de tipul materialului.

Figura 12. red variaia lui cos()n pentru diferite valori ale lui n. Valorile mari ale lui n corespund
distribuiilor spaiale concentrate, caracteristice metalelor i altor suprafee strlucitoare, n timp ce
valorile mici dau rezultate dispersate, caracteristice suprafeelor nemetalice, de exemplu hrtia.

Dup cum rezult din (6.), intensitatea luminii reflectate specular depinde de unghiul de inciden.
Astfel, dac lumina incident cade perpendicular pe o suprafa, lumina reflectat specular poate
reprezenta doar un procent din lumina incident. Restul energiei luminoase este fie absorbit, fie
difuzat, proporiile fiind dependente de caracteristicile materialului i de lungimea de und. Pentru

16
materiale nemetalice reflectana poate fi de numai 4%, n timp ce la materialele metalice
depete 80%. Dac unghiul de inciden este de 90 de grade, ntreaga lumin incident este
reflectat (reflectana este de 100%). Deoarece funcia de reflectan este complex, n practic ea
este nlocuit cu o constant determinat experimental, numit coeficientul de reflexie specular al
materialului.
Culoarea componentei speculare din modelul lui Phong nu depinde de proprietile materialului.
Reflexia specular este afectat de proprietile suprafeei nsi i de caracteristicile luminii
incidente; n general, culoarea luminii speculare poate fi diferit de aceea a luminii difuze. Pentru a
pune n eviden dependena culorii luminii speculare de lungimea de und a luminii incidente, n
modelul de iluminare se nlocuiete funcia w(i, ) cu produsul ks*Os unde ks este coeficientul de
reflexie specular iar Os este culoarea specular a obiectului.

Combinnd rezultatele, rezult urmtorul model de iluminare pentru suprafee reale:


_ _
I = Ia*ka*Od + fat*Ip [kd*Od*( N L ) + ks*Os*cos()n]
_ _
cos() = (R V) pentru vectorii R si V normalizati
rezult:

_ _ _ _
I = Ia*ka*Od + fat*Ip [kd*Od*( N L ) + ks*Os* (R V) n] (7.)

_ _
Atunci cnd sursa de lumin este la infinit, produsul scalar ( N L ) este constant pentru un poligon
_ _ _ _
dat, n timp ce (R V) variaz de la un punct la altul. Pentru suprafee curbe, variaz att ( N L ) ct
_ _
i (R V) .

Dac scena 3D este luminat de m surse de lumin, intensitatea luminii reflectate de un punct se
obine nsumnd contribuiile celor m surse:

_ _ _ _
I = Ia*ka*Od +
1<=i <= m
fati*Ipi*[kd*Od*( N L i ) + ks*Os* (R i V) n] (8.)

17
Calculul direciei luminii speculare

Se considera vectorii L, N si R normalizati. Vectorul R este simetricul vectorului L fa de N.


Deci, proiecia lui L pe N este egal cu N cos(i) (figura 13.).

atunci:
_ _ _
R = N * cos(i) + S
_ _ _
S = N * cos(i) - L
Deci:
_ _ _
R = 2 N * cos(i) - L
_ _ _ _ _
R = 2N (L N) - L (9.)

O alt formulare a modelului Phong se bazeaz pe vectorul median, notat cu H n figura 14. El face
unghiuri egale cu L i cu V. Dac suprafaa ar fi orientat astfel nct normala sa s aib direcia
lui H, atunci observatorul ar percepe lumina specular maxim (deoarece ar fi pe direcia razei
reflectate specular).

18
_ _
_ _
n
_
L+ V
Termenul care exprim reflexia specular este n acest caz ( N H ) , unde H = _ _
. Atunci
| L+ V |
_ _
cnd sursa de lumin i observatorul sunt la infinit, utilizarea termenului ( N H ) este avantajoas
_
deoarece H este constant.

Iluminarea in OpenGL

Redarea luminilor in OpenGl implica mai multe setari :


setari generale ale mediului GL si ale interpretarii luminii pe diferite fete ;
surse de lumini;
propietatile surselor de lumini;
materiale;
normale la suprafata

In OpenGL, se considera ca intr-o scena oarecare pot apare mai multe tipuri de lumini:
lumina ambianta - este lumina care este prezenta in atmosfera pur si simplu. Nu se
poate spune despre ea ca provine de la o anumita sursa, sau ca este stralucitoare, sau
reflectata de o oglinda. Ea provine de la alte surse de lumini in urma reflexiilor
repetate, astfel ca nu se mai poate stabili exact unde a fost sursa si cum a ajuns
lumina in locul respectiv. Numai lumina ambianta nu ne ajuta sa vedem formele
obiectelor colorate la fel, deoarece energia luminoasa este identica pentru fiecare fata
(nu depinde de orientare) si prin urmare culoarea vazuta este exact aceeasi.
lumina difuza - este lumina provenita de la o sursa anume. Ea este formata din mai
multe raze care se imprastie in toate directile. Sursa de lumina poate fi la infinit (de
exemplu lumina solara intr-o zi senina) sau poate fi apropiata de obiect (de exemplu
un bec). Diferenta dintre cele doua tipuri de surse se observa si in directia razelor. La
soare razele vin paralele, la bec razele chiar se vad cum emana dintr-un punct fix.
Lumina difuza se apropie cel mai mult de majoritatea luminilor din lumea reala,
reprezinta clasa luminilor cu sursa si directie. Pozitia observatorului nu influenteaza
culoarea obiectului in acest caz, cu alte cuvinte culoarea este transmisa la fel in toate
directiile ;
lumina speculara - este componenta care da stralucirea obiectelor. Se aseamana cu
lumina difuza, insa singura diferenta fiind ca este focalizata. Pentru o raza laser, sau
un reflector de foarte buna calitate, razele care pleaca din reflector trebuie sa fie
paralele. Obiectele resping aceasta lumina tot intr-un mod specular si prin urmare
aceasta lumina nu poate fi vazuta din orice pozitie. Ochiul trebuie sa se afle chiar pe
directia ei. Aceasta componenta depinde de pozitia observatorului.
lumina emisa - este lumina pe care un obiect o emite prin el insusi. In OpenGL aceasta
nu mai devine si sursa pentru alte obiecte din jurul lui. Este folosita pentru a crea obiecte
incandescente.

19
Lumina are si culoare. Exista in lumea reala si lumini verzi si lumini albastre, dar si
lumini obisnuite albe. De cele mai multe ori, obiectul amesteca culorile primite de la lumina
cu culorile sale naturale, putand rezulta chiar o culoare diferita de culoarea initiala a
obiectului.
In OpenGL culoarea poate fi specificata prin cele 3 componente RGB. Acestea sunt
niste valori reale intre 0 si 1. De exemplu o lumina cu (R,G,B)=(1,1,1) reprezinta o lumina
alba, cea mai puternica. O lumina (0,0,1) reprezinta o lumina albastruie. In openGL atat
lumina cat si corpul au setate aceste valori pentru fiecare tip de lumina (ambanta, difuza si
speculara). Lumina reflectata de un anumit obiect se obtine inmultind valoarea culorii cu
valoarea luminii ambele trebuind sa se refere la acelasi tip de lumina.

Setarea luminii in OpenGL

1. Initializarea mediului
glEnable(GL_LIGHTING) ;
fara aceasta functie, openGL considera ca nu a auzit niciodata de conceptul de lumina.

2. Setarea surselor de lumina


Pot fi setate maxim 8 surse de lumina :
glEnable(GL_LIGHTi) ; /* sursa de lumina i */ 0 <= i < 8

Toate propietatile luminii ce vor fi ulterior setate se vor referi la una din aceste 8 lumini.

Exista in scena o sursa de lumina introdusa automat, chiar daca nu este setata vreo sursa de
lumina si anume : Lumina Ambientala Globala lumina ambianta de baza :

GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };


glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

3. Setarea modelului de iluminare

glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); /*seteaza


pozitia observatorului in (0,0,0). Avem nevoie de ea atunci cand calculam reflexile
speculare. Deobicei observatorul se considera a fi la infinit astfel incat unghiul format de
raza incidenta pe un punct si de linia observator-punct depinde doar de raza incidenta. */

glLightModeli(LIGHT_MODEL_TWO_SIDE, GL_TRUE) ; /*calculele de iluminare


se realizeaza si pentru fetele considerate ca fiind cu spatele la lumina. De obicei aceste
fete sunt orientate spre interiorul corpurilor deci nu avem nevoie de lumina pe ele. Insa,
de exemplu, daca se doreste si iluminarea partii interioare a unei jumatati de sfera,
trebuie setat si acest parametru. */

ShadeModel : Acesta nu face parte neaparat din modelul de iluminare. Se seteaza prin
apelul functiei glShadeModel cu unul din urmatorii parametri :
o GL_SMOOTH culorile unei fete se calculeaza prin interpolarea culorilor din
colturi ;
o GL_FLAT o fata va avea aceeasi culoare in toate punctele sale.

20
4. Setarea parametrilor obiectelor

Setarea componentelor ambianta, difuza si speculara :

glLightfv(sursa_lumina, componenta_lumina, param) ;

sursa_lumina poate fi GL_LIGHTi, 0 <= i < 8


componenta_lumina poate fi GL_AMBIENT, GL_DIFFUSE,
GL_SPECULAR ;
param reprezinta culoarea luminii, setata prin cei patru parametri RGBA (A
alfa opacitatea).

De exemplu setarea componentelor ambianta, difuza si speculara pentru sursa de


lumina GL_LIGHT1 :

GLfloat light_ambient [] = { 0.9, 0.4, 0.0, 1.0 }; /*seteaza componenta ambianta */


GLfloat light_difusion[] = { 0.9, 0.4, 0.0, 1.0 }; /* seteaza componenta de difuzie */
GLfloat light_specular[] = { 0.9, 0.4, 0.0, 1.0 }; / * seteaza componenta speculara */

glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);


glLightfv(GL_LIGHT1, GL_AMBIENT , light_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE , light_difusion);

Setarea pozitiei: GL_POSITION

Setarea pozitiei este folosita pentru luminile care trebuie sa aiba o sursa specificata:
SPECULAR si DIFFUSE.

GLfloat light_position[] = { x,y,z,w};


glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Daca w este 1 atunci se considera ca sursa este undeva la infinit pe directia x,y,z
(Directional Light). Altfel ea se afla exact la pozitia x,y,z (Positional Light).

GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION,
GL_QUADRATIC_ATTENUATION

Acesti parametrii afecteaza factorii de atenuare a luminii. In lumea reala teoretic


lumina se poate atenua. OpenGL permite atenuarea intensitatii luminii in functie de distanta,
patratatul distantei sau cubul distantei. Acesti parametrii se folosesc doar la luminile
pozitionale.

GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF

Acesti parametrii se folosesc la luminile positionale, atat pentru componenta difuza


cat si pentru componenta speculara. Dand acesti 3 parametrii, lumina emanata dintr-un punct
(nu de la infinit) nu mai pleaca in toate directile ci numai dupa o anumita orientare. Se

21
doreste simularea luminilor de genul reflectoarelor de la concerte.
GL_SPOT_DIRECTION reprezinta directia (x,y,z) in care este orientat spotul,
GL_SPOT_EXPONENT reprezinta concentratia luminii in interiorul spotului (poate fi
constanta sau mai puternica spre centru si mai mica spre margini).
GL_SPOT_CUTOFF care reprezinta ungiul, sau deschiderea spotului. Initial acesta
este de 180 care inseamna (180*2=360) ca spotul este de fapt tot o lumina emanata in toate
directiile.

5. Setarea parametrilor materialului

Majoritatea caracteristicilor luminii trebuie sa se regaseasca in propietatile de material pentru


ca un obiect sa reflecte o culoare. Aceasta va fi determinata pe baza propietatilor luminii dar si a
propietatilor materialului.
Pentru luminile neambientale trebuiesc intotdeauna setate normalele.
Caracteristicile materialelor sunt urmatoarele:
GL_AMBIENT reprezinta componenta ambanta a luminii ce va fi reflectata de obiect.
Acest parametru se va amesteca cu GL_AMBIENT al sursei de lumina. De remarcat ca
este de forma (r,g,b,alfa) insa alfa nu conteaza intrucat in momentul cand se va face
blending, se ia in considerare o singura valoare alfa aceea a lui GL_DIFFUSE
GL_DIFFUSE reprezinta componenta difuza a culorii materialului. E de forma
(r,g,b,alfa)
GL_AMBIENT_AND_DIFFUSE acest parametru este folosit deoarece in lumea reala
sunt extrem de rare (practic nu exista) obiectele care sa aiba valori diferite al culorii
relflexiei ambientale si difuze
GL_SPECULAR aceasta este valoarea culorii speculare, oglindite de obiect. Acest
parametru poate fi diferit, el reprezinta valoarea reflectata. De exemplu, la un diamanat,
culoarea reflectata nu e acelasi lucru cu culoarea obiectului. O piatra pretioasa poate
reflecta si raze colorate cu alte culori.
GL_SHININESS este o valoare care ne spune cat de mult este focalizata raza speculara
reflectata. Maximul este 128 si corespunde unei lumini concentrate practic practic la
maximum intr-o singura raza.
GL_EMISSION este o setare prin care putem da incandescenta unui obiect. Dand acest
parametru, obiectul va aparea generand lumina prin el insusi fara sa o primeasca din alta
parte

6. Setarea normalelor

Se realizeaza prin apelul functiei glNormal. Varfurile definite dupa apel vor avea asociata
ultima normala setata cu glNormal.

22

S-ar putea să vă placă și