Belichting Materiaaleigenschappen Vectoren bij reflectie van licht

advertisement
Vectoren bij reflectie van licht
Belichting
n
Kleuren van oppervlakken: resultaat van een complexe interactie tussen licht
en materie.
v
l
r
Belichtingsmodellen:
• empirisch: berekeningen in overeenstemming met de waarneming
l
oriëntatie van de lichtbron
n
normaalvector
v
viewvector : wijst naar de camera
r
reflectie :
• fysica wetten: realistischer, maar rekenkundig hogere kost
in het vlak (l, n): uitvalshoek = invalshoek
Licht:
• zonder lichtbron : geen kleur
hoek φ
hoek θ
• zelden waarnemen van licht rechtstreeks van een lichtbron
n
• maar reflecties van lichtstralen op oppervlakken
θ
θ
r
l
v
φ
r
Dus, net zo belangrijk : de materiaaleigenschappen van de objecten
Materiaaleigenschappen
Mechanisme van de reflectie van licht door oppervlakken: zeer complex
afhankelijk van een groot aantal parameters, bijvoorbeeld:
• geometrie: plaats van het oppervlak tov. lichtbron
• positie van de waarnemer
• vorm van het oppervlak
• karakteristieken van het oppervlak: ruwheid, kleur, transparantie
Een lichtstraal die invalt op een oppervlak:
• wordt voor een deel geabsorbeerd door het oppervlak
• wordt voor een deel gereflecteerd
• kan ook deels door het oppervlak heen gaan.
Een gedeelte van het gereflecteerde licht bereikt de camera en laat toe dat het
voorwerp zichtbaar wordt.
Diffuse reflection
Een reflector met op microscopisch niveau een erg ruw oppervlak
Een invallende lichtstraal wordt in alle richtingen even sterk verstrooid.
De hoeveelheid energie die gereflecteerd wordt, is enkel functie van de
invalshoek en de intensiteit van de lichtbron en bijgevolg onafhankelijk van de
oriëntatie van de camera.
D = kd Id cos θ
GLfloat difmat [ ] = { 1 . 0 , 0 . 0 , 0 . 0 , 1.0 } ;
g l M a t e r i a l f v ( GL FRONT, GL DIFFUSE , d i f m a t ) ;
Specular reflection
Spiegelachtig: bij een glanzend oppervlak zien we de reflectie van een
lichtbron als een zeer heldere vlek op een relatief kleine zone, terwijl de rest
van het object waargenomen wordt als een diffuse reflector.
Emissie
een oppervlak kan zelf licht uitstralen, maar wordt geen lichtbron voor andere
objecten
zo’n oppervlak heeft dus geen effect op de rendering van andere objecten
S = ks Is cosa φ
GLfloat emi ssi e [ ] = { 0 . 5 , 0 . 0 , 1 . 0 , 1.0 } ;
g l M a t e r i a l f v ( GL FRONT, GL EMISSION , e m i s s i e ) ;
fall-off factor a:
• bij een grotere hoek tussen r en v neemt de intensiteit van het
gereflecteerde licht snel af
• maat voor de glans van een oppervlak (shininess)
De eigenschappen van de voorkant en de achterkant van een oppervlak kunnen
onafhankelijk van elkaar ingesteld worden:
G L f l o a t specmat [ ] = { 0 . 0 , 1 . 0 , 0 . 0 , 1 . 0 } ;
front face: naar de camera gericht oppervlak
g l M a t e r i a l f v ( GL BACK, GL SPECULAR, specmat ) ;
back face: de achterkant van zo’n vlak
(normaal, maar niet altijd, onzichtbaar)
g l M a t e r i a l f ( GL BACK, GL SHININESS , 1 2 0 . 0 ) ;
Belichting
OpenGL is state driven:
g l E n a b l e (GL LIGHTING ) ;
Ambient reflection
de reflectie door een oppervlak van omgevings- of achtergrondbelichting
vertoont in alle richtingen dezelfde intensiteit, onafhankelijk van de
positionering tov. de lichtbronnen en camerapositie
glShadeModel (GL FLAT ) ;
glShadeModel (GL SMOOTH ) ;
g l E n a b l e (GL COLOR MATERIAL ) ;
G L f l o a t ambimat [ ] = { 0 . 0 , 0 . 0 , 1 . 0 , 1 . 0 } ;
g l M a t e r i a l f v ( GL FRONT AND BACK, GL AMBIENT, ambimat ) ;
/* Gouraud shading */
/* geen spec materiaaleig */
Acht lichtbronnen: GL_LIGHT0, GL_LIGHT1, ..., GL_LIGHT7
g l E n a b l e (GL LIGHT0 ) ;
A = ka Ia
/* flat shading */
g l D i s a b l e (GL LIGHT0 ) ;
Eigenschappen : positie, type, kleur, verzwakking, spoteffecten:
g l L i g h t ∗ ( l i c h t b r o n , l i c h t e i g e n s c h a p , waarde ) ;
GL_POSITION
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR
GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION,
GL_QUADRATIC_ATTENUATION
GL_SPOT_CUTOFF, GL_SPOT_EXPONENT, GL_SPOT_DIRECTION
Positie
wordt bepaald door 4 waarden:
• x-, y-, z-coördinaat;
• al of niet puntbron:
• 4e argument: 0.0 : bron op oneindig: de coördinaten geven een
richting aan, alle lichtstralen lopen evenwijdig aan deze richting;
• 4e argument: 1.0 : puntbron bepaald door de coördinaten.
De array met coördinaten die de bronpositie van een lichtbron bepalen, wordt
onderworpen aan de modelview matrix die geldt op het ogenblik van de
uitvoering van de functie glLight().
Kleur van de lichtbron
Per hoofdkleur kan de intensiteit aangegeven worden voor elk van de drie
vormen van belichting:
GLfloat d i f l i c h t [ ] = { 1 . 0 , 0 . 0 , 0 . 0 , 1.0 } ;
GLfloat s p e c l i c h t [ ] = { 0 . 0 , 1 . 0 , 0 . 0 , 1.0 } ;
GLfloat ambilicht [ ] = { 0 . 0 , 0 . 0 , 1 . 0 , 1.0 } ;
g l L i g h t f v ( GL LIGHT0 , GL DIFFUSE , d i f l i c h t ) ;
g l L i g h t f v ( GL LIGHT0 , GL SPECULAR, s p e c l i c h t ) ;
g l L i g h t f v ( GL LIGHT0 , GL AMBIENT, a m b i l i c h t ) ;
• voor de bepaling van de positie van het oog:
g l L i g h t f v ( GL LIGHT0 , GL POSITION , p o s i t i e 0 ) ;
gluLookAt ( oog [ 0 ] , oog [ 1 ] , oog [ 2 ] , 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 , 0 . 0 ) ;
• na de bepaling van de positie van het oog:
gluLookAt ( oog [ 0 ] , oog [ 1 ] , oog [ 2 ] , 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 , 0 . 0 ) ;
g l L i g h t f v ( GL LIGHT0 , GL POSITION , p o s i t i e 0 ) ;
Types van licht
Ambient licht: licht dat zo erg verstrooid is door de omgeving dat het
onmogelijk is om nog de richting ervan te bepalen
voorbeeld: achtergrondverlichting in een kamer
ambient licht dat op een oppervlak valt wordt in alle richtingen evenveel
verstrooid.
Diffuse component van licht: komt van één bepaalde richting
het is helderder wanneer het ongeveer loodrecht op een oppervlak valt dan
wanneer het er meer zijdelings opvalt
invallend diffuus licht op een oppervlak wordt ook in alle richtingen evenveel
verstrooid.
Specular licht komt vanuit een specifieke richting en wordt door een oppervlak
in een voorkeurrichting gereflecteerd.
Kleuren worden gespecificeerd in RGBA-formaat.
De blending factor A kan gebruikt worden om twee kleuren een zekere
transparantie te geven zodat ze op het scherm schijnbaar in elkaar kunnen
overvloeien.
Lokale lichtbronnen zijn puntbronnen die in alle richtingen met eenzelfde
intensiteit licht uitstralen.
Spot: richtingsgevoelige lichtbron
Vanuit de lichtbron vertrekken lichtstralen binnen een kegel met een gegeven
openingshoek in een gegeven richting.
De derde parameter geeft aan hoe geconcentreerd het licht is (falloff-functie):
de intensiteit is het hoogste in het midden van de kegel en deze verzwakt naar
de randen toe met een factor gelijk aan cosa θ met a de SPOT_EXPONENT
(default gelijk aan 0.0) en θ de hoek tussen de vertex die de richting aangeeft
en de vertex van de actuele positie
G L f l o a t r i c h t i n g [ ] = { 3 . 0 , 5 . 0 , −2.0 } ;
g l L i g h t f ( GL LIGHT0 , GL SPOT CUTOFF, 3 0 . 0 ) ;
g l L i g h t f v ( GL LIGHT0 , GL SPOT DIRECTION , r i c h t i n g ) ;
g l L i g h t f ( GL LIGHT0 , GL SPOT EXPONENT, 1 2 . 0 ) ;
De cutoff parameter ligt tussen 0 en 90 graden en daarnaast is er de default
waarde 180 graden.
De default richting is in de richting van de negatieve z-as (0.0, 0.0, -1.0).
Berekening
Verzwakking
De intensiteit van licht neemt af, naarmate dat de afstand tot de bron
verhoogt.
Deze verzwakking geldt alleen voor puntbronnen, omdat gericht licht van
oneindig ver verwijderde bronnen afkomstig is.
verzwakking =
1
kc + kl d + kq d2
met d de afstand tussen lichtbron en beschouwde plaat
vertex kleur =
emissiemateriaal
+
ambientlichtmodel × ambientmateriaal
Pn−1 1
× spoteffecti ×
i=0
kc +kl d+kq d2
+
i
ambientlicht × ambientmateriaal
+
max(l.n, 0) × diffuuslicht × diffuusmateriaal
+
max(v.r, 0)shininess × specularlicht × specularmateriaal
Default waarden zijn 1 voor kc (constante) en 0 voor kl (lineaire) en kq
(kwadratische).
g l L i g h t f ( GL LIGHT0 , GL CONSTANT ATTENUATION, 0 . 0 ) ;
g l L i g h t f ( GL LIGHT0 , GL LINEAR ATTENUATION, 0 . 5 ) ;
g l L i g h t f ( GL LIGHT0 , GL QUADRATIC ATTENUATION, 1 . 0 ) ;
Globaal belichtingsmodel
Definitie van een aantal parameters die onafhankelijk van de lichtbronnen
gelden voor gans het belichtingsmodel:
1. een ambient achtergrondbelichting onafhankelijk van een specifieke
bron;
2. berekeningswijze van specular reflectiehoeken;
3. specular kleuren afzonderlijk berekenen van ambient en diffuse kleuren;
4. worden de belichtingsberekeningen uitgevoerd voor zowel voor- als
achterkant van objecten.
G L f l o a t gl amb i [ ] = { 0 . 3 , 0 . 1 , 0 . 4 , 1 . 0 } ;
g l L i g h t M o d e l f v ( GL LIGHT MODEL AMBIENT, gl amb i ) ;
g l L i g h t M o d e l i ( GL LIGHT MODEL LOCAL VIEWER, GL TRUE ) ;
g l L i g h t M o d e l i ( GL LIGHT MODEL COLOR CONTROL, GL SINGLE COLOR ) ;
g l L i g h t M o d e l i ( GL LIGHT MODEL TWO SIDE, GL TRUE ) ;
spoteffect =



 1.0
i
bij cutoff gelijk aan 180.0
0.0



i
vertex ligt buiten de kegel
max(l.d, 0)
a
met d richting
Shading
shading: het algoritmisch proces dat het belichtingsmodel toepast op het
ganse oppervlak i.p.v. één enkel punt
een willekeurig complex oppervlak wordt door een grafisch systeem
gemanipuleerd in de vorm van een mesh
N3
patches, de elementen van deze mesh, zijn
N5
meetkundige vlakken met telkens één normaalvector Nx
N7
verfijnen van de mesh geeft kleinere patches zodat het complexe oppervlak dichter
benaderd wordt, maar met een grotere rekenintensiteit
flat shading: het belichtingsmodel wordt per patch slechts één maal toegepast,
omdat de normaalvector over de ganse patch constant blijft;
de resulterende kleurintensiteit wordt op de ganse patch toegepast
Gouraud shading
een meer realistische voorstelling door middel van interpolatietechnieken
N1 Nu
N4
N2
N5
Ny
5
Nv
76
Nx
Bepaal voor alle vertices van een patch van
de mesh de gemiddelde normaalvector: Nu
wordt berekend op basis van N1 , N2 , N4
en N5 .
Op dezelfde manier worden de normaalvectoren Nv , Nx en Nz bepaald.
Hieruit worden de intensiteiten Iu , Iv , Ix
en Iy berekend.
Intensiteit I5 in punt 5 : een lineaire interpolatie van de intensiteiten Iu en Iv .
Intensiteit I6 : een lineaire interpolatie van de intensiteiten Ix en Iy .
Tot slot wordt de intensiteit I7 in punt 7 berekend door een lineaire
interpolatie van de intensiteiten I5 en I6 .
Download