Tieňovanie konštantné, Gouraudovo a Phongovo

Aplet zobrazuje tri paralelne bežiace scény, kde každá zdieľa model, polohu a orientáciu kamery ako aj prijímané parametre z web stránky. Názorne sú tým ilustrované rozdiely v reálnom čase a za rovnakých podmienok.
Prvým z ľava ilustrované konštantné tieňovanie, druhé je tieňovanie Gouradovo a tretím je Phongovo tieňovanie.
Nastavením parametrov resp. ich pomerom je možné modelovať rôzne svetelné podmienky a zároveň materiál, shodne s apletom ilustrujúcim lokálny osvětlovací model.
V rámci nastavenia prostredia sa dajú upraviť parametre:
* Ambientné svetlo:  farba a intenzita.
* Bodové svetlo:  farba, intenzita a pozícia.
* Vlastnosti materiálu sú určené parametrami:
    Ka: určuje akú vlastnú farbu má daný zobrazený predmet, tým sa určuje aké zložky svetla odráža a aké pohlcuje.
    Kd: určuje difúznu farbu pri odraze náhodným smerom (neriadi sa pravidlom že uhol dopadu sa rovná uhlu odrazu).
    Ks: určuje spekulárnu (zrkadlovú) farbu pri odraze (riadi sa pravidlom, že uhol dopadu sa rovná uhlu odrazu).
    Lesklosť: lesklosť materiálu, vo výpočte spekulárneho odlesku sa umocňuje na túto hodnotu.
Pomerom týchto parametrov je možné modelovať rôzne svetelné podmienky prostredia, modelovať vlastnosti materiálov a polohovaním kamery meniť pozorovacie uhly a vplyv jednotlivých parametrov a zložiek svetla na výsledný efekt.

Vyberte z pred-definovaných 3D-modelov:

Ambientné svetlo

Farba:

(255)
(255)
(255)

Bodové svetlo

Farba:

(255)
(255)
(255)

Pozícia

Koordináty bodového svetla:

Vlastnosti materiálov

Ka:

(255)
(255)
(255)

Kd:

(255)
(255)
(255)

Ks:

(255)
(255)
(255)

Lesklosť:



(255)


Konštantné tieňovanie známe aj ako flat shading, je veľmi rýchla, jednoduchá metoda. Predpokladá, že každý segment povrchu má len jednu normálu.
Ak neexistuje žiadna normála implicitne obsiahnutá v údajoch priestorového modelu, možno ju použiť pre konvexné rovinné povrchy určiť ako výsledok, ktorý je správne orientovaný tak, aby smeroval do vonkajšieho polpriestoru.
Z normály sa vypočíta jedna farba a pri rastrizácií povrchu sa priradí všetkým jeho pixlom. Konštantné tieňovanie sa používa tam, kde je potrebné dosiahnuť vysokú rýchlosť vykreslenia.
Nech je tvar trojuholníka definovaný jeho 3 vrcholmi V0, V1 a V2 a normálami n⃗0, n⃗1, n⃗2. Nech je zdroj svetla smerový s vektorom svetla l⃗. Svetlo má okolitú a smerovú časť s farbami [R, G, B].
Vypočítať je možné ktorúkoľvek normálu, keďže normálový vektor reprezentuje smer ktorým trojuholník leží. Výpočtu normály plochy sa použije vektorový súčin vektoru u⃗ s vektorom v⃗, čoho výsledkom je vektor n⃗0 kolmý na obidva pôvodné vektory.
Farba samotného polygónu sa určí napríklad použitím Phongového výpočtu zložiek svetla v danom bode podľa Phongovej rovnice. Farbu vo fragment shaderi následne priradí všetkým pixlom plochy po rasterizácii.

Flat
Konštantné tieňovanie

Gouraudovo tieňovanie Metódu navrhol Henri Gouraud a je vhodná na tieňovanie telies, ktorých povrch je aproximovaný množinou rovinných plôch. Pre fungovanie algoritmu je dôležitá znalosť farieb všetkých vrcholov spracovávaného povrchu. Farbu vrcholov určíme vyhodnotením modelu osvetlenia.
Vzhľadom na metódu výpočtu, ktorá interpoluje farby, nemá zmysel zohľadňovať zrkadlovú zložku svetla. Preto sa počítajú len ambientná a difúzna zložka svetla. Potom sa bilineárnou interpoláciou vypočítajú farebné odtiene percepčných bodov danej oblasti. Preto sa Gouraudovo tieňovanie nazýva aj farebná interpolácia.
Najprv sa pre každý vertex vypočíta jeho normálový vektor. Normála povrchu sa používa na určenie uhla medzi zdrojom svetla a povrchom, ktorý sa používa na výpočet farby vrcholu podľa Phongovej rovnice. Najprv sa vypočítajú normálové vektory vo vrcholoch V0, V1 a V2 čím dostaneme n⃗0, n⃗1, n⃗2.
Následne sa určí intenzita a farba svetla na základe uhlu medzi dopadajúcim svetlom l⃗ a príslušnou normálou. Interpolujú sa farby vrcholov na povrchu polygónu pomocou barycentrických súradníc. Barycentrické súradnice určujú, ako veľmi prispieva každá farba vrcholu k interpolovanej farbe v bode P vnútri trojuholníka, pričom súčet váh je 1.
C je výsledná interpolovaná farba v bode P. Počas rasterizácie sa farba každého pixlu v polygóne určí interpolovanou farbou v príslušných barycentrických súradniciach. Keďže interpolácia sa vykonáva pomocou lineárnej kombinácie farieb vrcholov a váhy tejto kombinácie sú dané barycentrickými súradnicami, môžeme interpolovanú farbu pre každý pixel efektívne vypočítať. Gouraudovo tieňovanie vypočíta farby vrcholov polygónu na základe uhla medzi zdrojom svetla a normálou povrchu a potom interpoluje farby na povrchu polygónu pomocou barycentrických súradníc.

Gourad
Gouraudovo tieňovanie

Phongovo tieňovanie Phongovo tieňovanie simuluje zakrivené povrchy interpolovaním normálových vektorov namiesto intenzít (ako v Gouraudovom modeli tieňovania). Normálové vektory sa pozdĺž zakriveného povrchu menia, takže Phongovo tieňovanie poskytuje lepšiu aproximáciu intenzity pre zakrivené povrchy modelované rovinnými polygónmi.
Po rastarizácii sa pre každý pixel ležiaci v trojuholníku sa interpolujú jeho 3 normály vrcholov na jeden celkový normálový vektor n⃗~ na základe váh barycentrických koordinátov.
Vo Phongovom tieňovaní vedie interpolácia normál k ich postupnému nakloneniu k normále najbližšiemu vrcholu. Pre bod P vo vnútri trojuholníka, sa vypočítajú jeho barycentrické súradnice. Na základe barycentrických súradníc interpolujeme normálové vektory vo vrcholoch trojuholníka na výsledný n⃗~.
Týmto spôsobom sa vypočítajú aj pre ostatné pixle, kde tento proces umožňuje váhovanie naprieč trojuholníkom a teda, čím bližšie je bod resp. pixel jednému z vrcholov, tým viac je po váhovom priemere naklonená pôvodnej normále z daného vrcholu a to umožňuje potom plynulé tieňovanie.
Phong
Phongovo tieňovanie

Phongova rovnica:     I = Ia · Ka + Id · Kd · (n⃗ × n⃗) + Is · Ks · (v⃗ × r⃗)p
,kde:
Ka a Ia sú farba a intenzita okolitého svetla,
Kd a Id sú koeficienty difúzneho odrazu a intenzita svetla,
n⃗ je normála povrchu,
l⃗ je smer svetla,
Ks a Is sú koeficienty zrkadlového odrazu a intenzita svetla,
r⃗ je smer odrazeného svetla,
v⃗ je smer pohľadu
p je exponent leskosti.
I je potom výsledná farba pixlu, ktorá sa skladá z troch typov zložiek (zrkadlovej, difúznej a ambientnej) z odrazu svetla od materiálu.