speciálkollégium


5. előadás: Árnyalás


Most már tudjuk, hogy a képernyő melyik pixelére melyik lap vetülete esik. A kérdés most az, hogy a fényforrások figyelembevételével milyen szinű az adott pont.

A fő problémát itt az jelenti, hogy egy lap egy pontjának radianciája (fényessége) függ az összes többi lap ezen pontba irányuló radianciájától (amik fényessége viszont ettől a ponttól függ). Ezen probléma kezelése szerint háromféle módszer különböztethető meg:

- globális illuminációs algoritmusok
- sugárkövetés (ray-tracing)
- lokális illuminációs algoritmusok

A globális illuminációs algoritmusok az eredeti árnyalási integrálegyenletet probálják megoldani, ez valós időben azonban nem kivitelezhető. A sugárkövetés csak véges számú ideális törésre és visszaverődésre számolja ki az egyenletet, míg a lokális modellek nagymértékben egyszerűsítik az árnyalási egyenletet. Ezek egy lap fényességének meghatározásához nem veszik figyelembe a többi felület fényességét.
Továbbá a többi tárgy geometriai elhelyezkedését sem vesszük figyelembe és a fényforrásokat minden pontból láthatóként kezeljül. Ennek következményeként nem lesznek árnyékok.


Fényforrások, fényesség

Az egyszerűsítés kedvéért ideális fénytöréssel és visszaverődéssel fogunk számolni a modellünkben. Ezt a Snellius-Descartes törvény írja le: a belépő fénysugár, a felület normálvektora és a kilépő fénysugár egy síkban vannak és a ki- és belépési szög egyenlő.




Továbbá egy adott felület egy pontjának radianciája annál nagyobb minnél kisebb a fénysugár beesési szöge.




A fényforrásokat a könyebb kezelésért vektorokkal reprezentáljuk, a következő megkötésekkel:
(1) a vektor hossza egységnyi
(2) iránya a fényforrás felé mutat, nem pedig a sugárzás irányába

Ez azért szükséges, mivel a radianciát a felület normálvektora és a fényforrás által bezárt szög koszinuszával jellemezzük. (1 = maximális radiancia, 0 = teljes sötétség, negatív = ekkor nem látszik az adott oldal).




A koszinusz kiszámításához a skaláris szorzatot használjuk:



Tovább egyszerűsítjük a modellt: mindvégig használjuk a Lambert-törvényt. Ez azt mondja ki, hogy az optikailag durva (diffúz) anygoknál a visszavert radiancia független a nézeti iránytól (pl. teljesen fehérre meszelt fal). Azaz mindegy, hogy merőlegesen vagy pedig élesebb szögben nézünk a felületre, úgyanolyan fényesnek látjuk.




Konstans árnyalás (Lambert-shade, flat-shade)

Itt a háromszögekre egyszer kiszámoljuk a radianciát és ezzel az értékkel árnyaljuk az egész háromszöget.




Gouraud

Ezt a módszert Henri Gouraud javasolta a '71 körül: számoljuk ki a háromszögek csúcspontjaiban a fényességet és ezt lineárisan interpoláljuk az egész háromszögön (a módszer ua. mint ahogy a Z-buffernél interpoláltuk a mélység-értékeket).




Hogyan számoljuk ki a csúcspontokban a radianciát? Először is kiszámoljuk ezen pontok normálvektorait. Egy csúcspont normálvektora a rá illeszkedő háromszögek normálvektorainak a számnatni közepe.




Fontos, hogy az azonos irányú normálvektorokat csak egyszeres súllyal számoljuk!




Phong

(Bui Thong Phong, 1975)

Az elképzelés ugyanaz, mint a Gouraudnál, csak most nem a fényerőt interpoláljuk, hanem magukat a csúcspontbeli normálvektorokat. Ekkor minden belső pontra megkapjuk az adott pontbeli normálvektort és ennek segítségével pontonként számoljuk ki a fényerőt.




Ezzel csak az a probléma, hogy ha lineárisan interpoláljuk a normálvektorokat, akkor a kapott vektorok nem lesznek egység hosszúak.




Minden belső pontban korrigálni kell ezt az interpolált normálvektort. Ez minden egyes pontra egy-egy osztást jelent, s így látszik, hogy ez valós időben nem kivitelezhető.



Jeni László Attila (jedi@inf.elte.hu)