Varjutamine

Varjutamine (ingl shading) on protsess, mille käigus antakse kahemõõtmelisel pinnal olevale kujutisele kolmemõõtmelisuse illusioon. See saavutatakse jäljendades kahemõõtmelisel pinnal kolmemõõtmelisele ruumile omast valgustust ja varje.

Flat shading ja Phong shading
Lameda (flat) varjutamise ja Phong varjutamise võrdlus

Joonistamine

Joonistamises kasutatakse varjutamist pimeduse astmete kujutamiseks, kattes pimedamat pinda tihedamalt või tumedama värvitooniga ning valgemat pinda hõredamalt või heledama värvitooniga. Varjutamiseks on mitmeid meetodeid, näiteks pinna katmine varieeruva tihedusega ristuvate joontega. Suurema joonte tiheduse puhul paistab ala pimedam ning väiksema joonte tiheduse puhul valgem. Valgusmustrid nagu pimedamatena ja valgetemana varjutatud alad aitavad tasapinnalisel paberil luua sügavuse illusiooni.[1][2]

Arvutigraafika

Arvutigraafikas tähendab varjutamine kolmemõõtmelises ruumis asuva objekti värvi muutmist vastavalt parameetritele nagu pinna nurk valgusallikate suhtes, kaugus valgusallikatest, pinna nurk kaamera suhtes ja objekti materjal. Varjutamise eesmärk on luua fotorealistlikku efekti. Varjutamine toimub renderdamise jooksul ning seda teostab programm mida kutsutakse varjutajaks.[3][4]

Valgustus

Realistliku kujutuse loomiseks tuleb kolmemõõtmelises ruumis asuvate objektide nähtavatel pindadel rakendada naturaalseid valgustuse efekte. Selleks on vajalik valgustuse või varjutamise mudel, mille abil saab arvutada valguse intensiivsust antud punktis. Valgustuse mudel võimaldab arvutada pinnale langeva valguse intensiivsust mingis kindlas punktis. Tavaline valgustuse mudel koosneb kolmest komponendist: ümbritsevast valgusest, hajutatud valgusest ja peegelduvast valgusest. Igal pinnal on lisaks veel ka optilised omadused, mis määravad, kui palju pinnale langenud valgusest peegeldub ehk kui valgena paistab pind teiste pindade suhtes.[4]

Ümbritsev (ingl ambient) valgus on igale pinnale võrdsel hulgal langev taustavalgus. Ümbritsev valgus on vajalik, et pinnad, mis ei ole otsese valguse käes, oleksid tausta suhtes eristatavad.[4]

Hajutatud (ingl diffuse) valgus on valgus, mille intensiivsuse määrab nurk valgusallika ja pinna vahel. Kui valgusallikas paikneb pinna normaali suunas, on pind valgustatud valgusallika maksimaalse intensiivsusega. Kui pinnale ei lange valgusallikast otseselt valgust, siis on hajutatud valguse komponent null ning pinda valgustab ainult ümbritsev valgus.[4]

Peegelduv (ingl specular) valgus kujutab endast otse valgusallikalt pinna kaudu peegeldatavat väga intensiivset valgust. Pinnalt peegelduva valguse intensiivsus sõltub nii valgusallika kui ka vaataja suunast ja pinna läikivusest.[4]

Phong varjutamise näide. Lõplik kujutis saadakse pannes kokku kolm eraldi komponenti: ümbritsev, hajutatud ja peegelduv valgus.

Interpoleerimise võtted

Selleks et renderdamise ajal pinna heledust arvutada, on valgustuse mudelil vaja teada pinna normaali. Kuna kolmemõõtmeline mudel on tavaliselt antud hulknurkade võrguna, siis pinna normaal on olemas ainult teatud punktides, tavaliselt tippudes, tahkudes või mõlemas. Seega pole vaikimisi võimalik arvutada kõikide pikslite värvi kogu hulknurga ulatuses. Lahenduseks sellele probleemile eksisteerivad erinevad interpoleerimise võtted.[5]

Lame varjutamine

Lameda varjutamise korral arvutatakse hulknurga ühes punktis (tavaliselt hulknurga esimeses tipus, vahel tsentroidis) värv vastavalt hulknurga pinna normaalile selles punktis, eeldusel et kõik hulknurgad on lamedad. Seejärel määratakse hulknurga kõikidele teistele punktidele selle ühe punkti väljaarvutatud värv, andes seega kogu hulknurgale ühtse värvi.[3][5]

Lamedat varjutamist kasutatakse tavaliselt olukordades, kus keerulisemad varjutamise võtted oleksid arvutuslikult liiga kallid. Lameda varjutamise tulemusena on kõrvutisi hulknurke võimalik paremini eristada. Lame varjutamine annab valguse peegeldusi halvasti edasi: kui valgus peegeldub värvi arvutatavas punktis, on terve hulknurk oluliselt heledam, vastasel juhul peegeldust ei kujutata üldse. Sellel põhjusel jäetakse valguse peegelduskomponent tavaliselt lameda varjutamise puhul arvutamata.[5]

Gouraud varjutamine

Erinevalt lamedast varjutamisest, mille puhul oli kogu hulknurk ühte värvi, on Gouraud varjutamise puhul igal pikslil erinev värv. Selle tulemusena on üleminek kahe hulknurga vahel ühtlasem. Gouraud varjutamise puhul arvutatakse värv hulknurga igas tipus ning seejärel interpoleeritakse lineaarselt hulknurga kõigi ülejäänud pikslite jaoks.[6]

Phong varjutamine

Phong varjutamine on edasiarendus Gouraud varjutamisest. Phongi varjutamise korral kasutatakse pikslite värvide arvutamiseks sujuvalt muutuvat pinna normaali. Phong varjutamise meetod sobib peegelduste kujutamiseks paremini kui Gouraud meetod. Kuna Gouraud meetodi puhul arvutatakse värvid ainult hulknurga nurkades, siis jääb suure hulknurga keskelt peegelduv valgus kujutamata. Phong varjutamise meetod lahendab selle probleemi, kuna värve ja peegeldusi arvutatakse iga piksli jaoks eraldi. Phong varjutamine on arvutuslikult kulukam kui Gouraud varjutamine.[3]

Viited