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 muuda

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 muuda

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 muuda

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 muuda

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 muuda

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 muuda

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 muuda

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 muuda

  1. "Drawing Techniques". Drawing With Confidence. Originaali arhiivikoopia seisuga 24.11.2012. Vaadatud 19.09.2012.
  2. "Shading Tutorial - How to Shade in Drawing". Dueysdrawings.com. Originaali arhiivikoopia seisuga 24.04.2017. Vaadatud 11.02.2012.
  3. 3,0 3,1 3,2 B. T. Phong (1975). Illumination for computer generated pictures. Communications of ACM 18. Lk 311–317.
  4. 4,0 4,1 4,2 4,3 4,4 Donald D. Hearn, M. Pauline Baker (1996). Computer Graphics: C Version (2nd Edition). Pearson Education. Lk 495–505.
  5. 5,0 5,1 5,2 Jasper Flick. "Flat and Wireframe Shading". Catlikecoding.com. Vaadatud 30.11.2018.
  6. H. Gouraud (1971). Continuous Shading of Curved Surfaces. IEEE Transactions on Computers C–20 (6). Lk 623–629.