Skyggelegging

Skyggeleggingen (på engelsk shading ), i datagrafikk , er måten lyset samhandler med polygonnettet , basert på absorpsjon eller refleksjon av lys, innfallsvinkelen og betraktningsvinkelen [1 ] , og andre funksjoner.

Teoretiske aspekter

I virkeligheten ser vi hvorfor øynene våre oppdager lys som preller av objekter. Utseendet til en overflate bestemmes altså av den nøyaktige måten den samhandler med lys på, som derfor bestemmes av materialets struktur og sammensetning.

I den virkelige verden har ugjennomsiktige overflater, som stein og gummi, en grov tekstur i mikroskopisk skala. Lyset spretter av dem i alle retninger, og som et resultat ser det ut til at det reflekterte lyset du ser ikke har noe å gjøre med retningen du ser på overflaten fra. Dette kalles diffus refleksjon . Motsatt er blanke overflater relativt glatte, selv i mikroskopisk skala. Dette betyr at du vil se perfekt refleksjon når du ser mot overflaten, og etter hvert som synsvinkelen skifter, endrer det som reflekteres retning. Dette kalles spekulær eller speilrefleksjon . _

I en verden av datagrafikk blir det imidlertid ofte tatt snarveier for å oppnå utseendet til ekte materialer. For eksempel, med tanke på speilrefleksjon: selv om det er mulig å gjengi speilrefleksjoner, er det en langsommere operasjon enn å gjengi diffuse refleksjoner, fordi det er enklere algoritmer som tilnærmer effekten av diffuse refleksjoner. Så å gjengi diffuse refleksjoner kan være ekstremt raskt, men å gjengi speilrefleksjoner krever intensiv strålesporingsbehandling . [2] For å omgå dette problemet, vurderer vi noen ganger bare de mest åpenbare tingene en overflate kan reflektere, for eksempel skarpe lys.

De fleste skyggeleggingsmodeller , på en eller annen måte, er designet for å fange refleksjonsprosessen av lys. [3]

Skyggeleggingsmodeller

Flat Shading

Også kalt konstant skyggelegging , dette er "nummer null" skyggelegging. Hvert toppunkt i hver trekant i polygonnettet er valgt som nøkkelpunkt for den trekanten. Belysningsligningen kjøres for å beregne belysningsverdien for det toppunktet, og hele trekanten er investert med en kopi av den verdien. [4]

Flat skyggelegging kan være passende for pyramider, men når et nett av trekanter tilnærmer seg en buet overflate, for eksempel delfinen, er det nødvendig med en mer sofistikert skyggeleggingsmodell. Selv om vi kan øke antall toppunkter i nettet, forblir tilnærmingen alltid tydelig, og det er også åpenbart kontraproduktivt når det gjelder beregningsytelse. [4]

Lambertian Shading

Den enkleste skyggemodellen er basert på en observasjon gjort av Johann Heinrich Lambert på 1700-tallet: mengden energi fra en lyskilde som faller på arealet av en overflate avhenger av lysets innfallsvinkel i forhold til overflaten. En overflate som ser direkte på en lyskilde får maksimal belysning; en overflate som tangerer retningen til lyset (eller ser bort fra kilden) mottar ingen belysning; og i midten er belysningen proporsjonal med cosinus til vinkelen mellom overflatenormalen og lyskilden. Dette fører til Lamberts skyggemodell: [3]

L = k d DE maks ( 0 , n ⋅ L ) {\ displaystyle L = k_ {d} \, I \, \ max (0, n \ cdot l)}

hvor er fargen på pikselen; er diffusjonskoeffisienten , eller fargen på overflaten; e er intensiteten til lyskilden. Siden og er enhetsvektorer, kan vi bruke som en praktisk kortform (både på papir og i kode) for .

Denne ligningen gjelder separat for de tre fargekanalene, slik at den røde komponenten av pikselverdien er produktet av den diffuse komponenten av rødt, intensiteten til den røde lyskilden og produktet av vektorene; det samme for grønt og blått. [3]

Vektoren beregnes ved å trekke skjæringspunktet mellom radius og overflaten fra posisjonen til lyskilden. Vi må ikke glemme det , og de må alle være enhetsvektorer; unnlatelse av å normalisere disse vektorene er en svært vanlig feil i skyggeberegninger.

Blinn-Phong Shading

Lambertian skyggelegging er uavhengig av synet: fargen på en overflate avhenger ikke av retningen du ser fra. Mange virkelige overflater viser noen grader av glans, produserer lyspunkter eller speilrefleksjoner, som ser ut til å bevege seg rundt overflaten etter hvert som synspunktet endres. Lambertian skyggelegging produserer ikke lys og resulterer i et veldig matt og blekt utseende. Mange skyggeleggingsmodeller legger til en speilkomponent til Lambertian skyggelegging; Lambert-delen er altså den diffuse komponenten. [3]

En veldig enkel og mye brukt modell for speilende lyspunkter ble foreslått av Bui Tuong Phong i 1975, og senere oppdatert - i den formen som er mest brukt i dag - av Jim Blinn i 1976. [3] I stedet for å interpolere de beregnede belysningsverdiene. hvert toppunkt (som i Gouraud-skyggelegging), Blinn-Phong-skyggelegging interpolerer toppunktnormalen, retningen til lyskilden og retningen til utsiktspunktet langs en trekant, og beregner belysningsformelen for hver piksel. [5] Ideen er å produsere en refleksjon som er på sitt lyseste når og er symmetrisk plassert langs overflatenormalen, og dette når speilrefleksjon vil oppstå; refleksjonen avtar derfor litt når vektorene beveger seg bort fra en speilende konfigurasjon.

Vi kan fortelle hvor nær vi er en speilkonfigurasjon ved å sammenligne vektoren (som halverer vinkelen mellom og ) med overflatenormalen . Hvis vektoren er nær overflatenormalen, bør den speilende komponenten være lyssterk; hvis det er langt unna, bør det være svakt. Dette resultatet oppnås ved å beregne skalarproduktet mellom og (husk at de er enhetsvektorer, så det er lik maks 1, når vektorene er like), og deretter bringe resultatet til en potens for å få det til å avta raskt. Styrken, eller Phong-eksponenten , kontrollerer overflatens tilsynelatende glans. Selve vektoren er lett å beregne: siden og har samme lengde, er summen deres en vektor som halverer vinkelen mellom dem, som bare trenger å normaliseres for å produsere .

Blinn-Phongs skyggeleggingsmodell samler inn all denne informasjonen: [3]

h = v + L ‖ v + L ‖ ; L = k d DE maks ( 0 , n ⋅ L ) + k s DE maks ( 0 , n ⋅ h ) s {\ displaystyle h = {\ frac {v + l} {\ | v + l \ |}} \ quad; \ quad L = k_ {d} \, I \, \ max (0, n \ cdot l) + k_ {s} \, I \, \ max (0, n \ cdot h) ^ {p}}

hvor er den speilende koeffisienten , den speilende fargen på overflaten.

Standard skyggeligning

Den reflekterte fargen beregnet på punktet på en overflate opplyst av lys er gitt av [5] :

K. = Og M. + D. T. TIL + ∑ de = 1 n C. de [ D. T. ( Nei. ⋅ L de ) + S. G. ( Nei. ⋅ H. de ) s ( Nei. ⋅ L de > 0 ) ] {\ displaystyle K = EM + DTA + \ sum _ {i = 1} ^ {n} C_ {i} [DT (N \ cdot L_ {i}) + SG (N \ cdot H_ {i}) ^ {p } (N \ cdot L_ {i}> 0)]}

hvor punktproduktene og er satt til null, og mengdene som er involvert er definert som følger:

Gouraud Shading

Gouraud-skyggelegging, oppkalt etter Henri Gouraud , er en metode som brukes i datagrafikk for å simulere de forskjellige effektene av lys og farger på et objekt. I praksis brukes den for å oppnå en gradert fargeendring på overflater med lav polygon uten å måtte ty til beregningsmessig tyngde ved piksel-for-piksel-beregning. Gouraud publiserte først denne forskningen i 1971.

Prinsippet som Gouraud-teknikken er basert på er følgende:

  1. Normalen til hvert toppunkt i hver polygon bestemmes
  2. En belysningsmodell brukes på hvert toppunkt for å beregne intensiteten til toppunktet
  3. Intensiteten til toppunktene interpoleres ved hjelp av bilineær interpolasjon på overflaten av polygonene

Før bruken av grafikkmaskinvare som var i stand til å utføre piksel-for-piksel belysningsberegninger, ble diffuse og speilende farger beregnet bare ved hvert toppunkt av et trekantet nett. Denne metoden beregner fargene [5] :

K. s r de m til r de eller = Og + D. TIL + D. ∑ de = 1 n C. de maks { Nei. ⋅ L de , 0 } {\ displaystyle K_ {primær} = E + DA + D \ sum _ {i = 1} ^ {n} C_ {i} \ max \ {N \ cdot L_ {i}, 0 \}} K. s Og c eller n d til r de eller = S. ∑ de = 1 n C. de maks { Nei. ⋅ H. de , 0 } s ( Nei. ⋅ L de > 0 ) {\ displaystyle K_ {sekundær} = S \ sum _ {i = 1} ^ {n} C_ {i} \ max \ {N \ cdot H_ {i}, 0 \} ^ {p} (N \ cdot L_ { i}> 0)} hvor er det:

ved hvert toppunkt og interpolerer dem langs overflaten av trekanten. Fargen på en piksel beregnes deretter ved hjelp av ligningen

K. = K. s r de m til r de eller ∘ T. 1 ∘ T. 2 ∘ ⋅ ⋅ ⋅ ∘ T. k + K. s Og c eller n d til r de eller {\ displaystyle K = K_ {primær} \ circ T_ {1} \ circ T_ {2} \ circ \ cdot \ cdot \ cdot \ circ T_ {k} + K_ {sekundær}}

der hver representerer en farge samplet fra et av teksturkartene, og operasjonen er en av flere tilgjengelige kombinasjonsoperasjoner som inkluderer modulering og addisjon.

Styrkene og svakhetene til Gouraud-skyggelegging ligger begge i bruken av interpolasjon.

Interpolering av fargene til forskjellige piksler (som bare kjenner noen få med presisjon) gjør beregningen lettere sammenlignet med mer sofistikerte modeller (som Phong-skyggelegging, for ikke å forveksle med den homonyme refleksjonsmodellen ). Lokaliserte lyseffekter (som refleksjonspunkter, som refleksjon av en lyskilde på et eple) vil imidlertid ikke gjengis riktig: hvis effekten er plassert i midten av polygonet, uten å nå toppunktene, vil den ikke vises som et resultat Gourauds gjengivelse; hvis den samme effekten er plassert på et toppunkt, vil den vises riktig, men den vil bli replikert unaturlig på tilstøtende polygoner. Problemet er lett gjenkjennelig hvis du gjengir en scene der lyskilden beveger seg, beveger refleksjonen som er tilstede på det aktuelle objektet, med Gouraud-skyggelegging vil du se refleksjonen utvides og strammes kontinuerlig, og når intensitetstoppene i toppunktene. , og forsvinner i midten av polygonene.

Til tross for problemene som er beskrevet, er skyggeleggingen utviklet av Gouraud mye bedre enn flat skyggelegging som krever mye mindre beregning, men gir et mangefasettert resultat.

Ambient Shading

Bakgrunn: I den virkelige verden blir overflater som ikke er opplyst av lyskilder opplyst av indirekte refleksjoner fra andre overflater.

Overflater som ikke får noen belysning vil bli gjengitt som helt svarte, noe som ofte ikke er ønskelig. En grov, men nyttig heuristisk metode for å unngå svarte skygger er å legge til en konstant komponent til skyggemodellen, hvis bidrag til fargen på pikselen bare avhenger av forekomsten på objektet, uten noen avhengighet av overflatens geometri. [3] Dette er kjent som ambient shading - der overflater er opplyst av "omgivende" lys som kommer likt fra hele verden. For enkelhets skyld ved justering av parametrene uttrykkes skyggelegging vanligvis som et produkt av en overflatefarge med omgivelseslysfarge, slik at omgivelsesskyggelegging kan justeres for både individuelle overflater og alle overflater sammen. Sammen med Blinn-Phong-modellen fullfører omgivelsesskyggelegging en enkel og nyttig skyggeleggingsmodell:

L = k til DE til + k d DE maks ( 0 , n ⋅ L ) + k s DE maks ( 0 , n ⋅ h ) n {\ displaystyle L = k_ {a} \, I_ {a} + k_ {d} \, I \ max (0, n \ cdot l) + k_ {s} \, I \, \ max (0, n \ cdot h) ^ {n}}

hvor er miljøkoeffisienten til overflatene, eller "omgivelsesfarge", og er lysintensiteten i omgivelsene.

Merknader

  1. ^ Roland Hess, The Essential Guide to Learning Blender .
  2. ^ Ben Simonds, Blender Master Class .
  3. ^ a b c d e f g Marschner, Shirley, Fundamentals of Computer Graphics .
  4. ^ a b John F. Hughes, Andries Van Dam, Morgan Mcguire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley, Computer Graphics: Principles and Practice , 3. utgave ..
  5. ^ a b c Eric Lengyel, Mathematics for 3D Game Programming and Computer Graphics , 3. utgave ..

Bibliografi

Relaterte elementer

Eksterne lenker