Shader

Shader (fra engelsk til shade = to shade) indikerer et sett med algoritmer som fremfor alt brukes i 3D datagrafikk som gir det virtuelle materialet de er kombinert til egenskaper eller egenskaper som beskriver eller påvirker måten det reagerer på lys og gjør overgangen fra et fullt opplyst punkt til et mørkt . [1]

Shaderen er i stand til å simulere utseendet til det virtuelle materialet til videoen på en slik måte at den er så nær som mulig den virkelige. Teknisk sett, i stedet for å sende polygoner eller bilder til et skjermkort , kan en applikasjon sende spesifikke små programmer , som beskriver hvordan sammenhengende polygoner og bilder skal behandles til de vises på skjermen. Trinnene til grafikkpipelinen , og i noen tilfeller hele pipelinen, erstattes av disse programmene. [2]

Teoretiske aspekter

Shaders må gjengi den fysiske oppførselen til materialet som utgjør gjenstanden de er påført. Du kan deretter lage en skyggelegging for metaller, en for plast, en for glass og så videre, og gjenbruke dem flere ganger i en scene. Når en kompleks gjenstand har blitt modellert , som et vindu, for eksempel, vil en skygge for treet, en for håndtaket og en for glasset være knyttet til modellen til rammen. Gjenbruksegenskapen til dette verktøyet er uvurderlig i arbeid med 3D-datagrafikk , både når det gjelder tid og sluttresultat.

Shaderen bør imidlertid ikke forveksles med materialet (i et modelleringsprogram som Blender), da den første justerer de optiske egenskapene til skyggeleggingen, den andre er beholderen - som lar deg stille inn andre parametere i tillegg til skyggeleggingen. nettet, for eksempel bakgrunnsfargen eller gjennomsiktigheten.

For å bestemme utseendet på overflaten bruker en shader veletablerte teknikker som å påføre teksturer og håndtere skygger . Shaders kan også brukes til å bruke etterbehandlingseffekter . Siden de er fullverdige programmer, kan de også brukes til replikering av svært komplekse fysiske hendelser som kollisjoner og væskedynamikksimuleringer . I feltet optikk brukes de vanligvis til å simulere: diffusjon , refleksjon , brytning og spredning av lys .

Moderne grafikkbehandlingsenheter har flere rørledninger som brukes til å transformere en 3D-scene til et rasterbilde som kan representeres på skjermen. Disse rørledningene utfører en serie operasjoner basert på programmerbare shaders.

DirectX- og OpenGL -grafikkbibliotekene bruker tre typer skyggelegging, som drar fordel av skyggefunksjonene til grafikkbehandlingsenhetene som finnes i skjermkort . Med den tiende versjonen av DirectX-bibliotekene, integrert i Microsoft Windows Vista , har de tre typene blitt samlet i Unified Shader-modellen , eller Shader Model 4.0.

Vertex Shader

Vertex shaders brukes til å manipulere toppunkter , ta den første konfigurasjonen av toppunktet (virker på bare ett toppunkt om gangen) og endre det ved å endre posisjons-, normal- eller teksturkoordinatverdiene (men en toppunktshader kan ikke lage flere toppunkter av hvor mange det allerede er). Den forbereder også skyggeleggingsmiljøet for ytterligere vertexbehandling for tessellasjon og geometriskyggelegging og for rasterisering og fragmentskyggebehandling. En ulempe er toppunktnormalene, siden når geometrien endres, må de nye modellens normaler beregnes. Hvordan dette kan gjøres avhenger av hvordan geometrien er definert. [3] Alt som krever toppunktbevegelse, som vifter med flagg, vifter med klær, hår i vinden, vannpartikler fra fontener, vannsprut, etc ... kan bruke denne programmeringsmekanismen. [4]

Tessellation Shader

Premiss: En tessellation (på engelsk tessellation ), i datagrafikk, er en prosess som deler en overflate av et nett, gjør den jevnere og består av trekanter. [5]

Tessellation shaders kan valgfritt følge toppunkt shaders i rørledningen. Deres hovedfunksjon er å utvide en original geometrisk primitiv til et sett med primitiver, som uttrykker geometrien mer detaljert. Introdusert med OpenGL 4.0, interpolerer de geometri for å lage flere, som kan [3] :

Tessellation Shader eller Geometry Shader? [3]

Både geometri shaders og tessellation shaders er i stand til å lage ny geometri fra eksisterende geometri, og begge brukes for å gi detaljnivåstøtte, så det kan være forvirring om når man skal bruke den ene eller den andre typen. Mens alles evner er litt like, er det særegne forskjeller.

En tessellasjonsskyggelegging skaper mye geometri, men all den nye geometrien er av samme type som den startet - du kan få flere segmenter for en linje, flere trekanter for en trekantet lapp, eller flere isoliner eller firkanter for en firkantet lapp, men du få alltid samme geometri. Tessellasjonshaderen bør brukes når det er behov for å generere mange nye topologier og en av tessellasjonstopologiene tilfredsstiller behovet, eller når en nødvendig patch-inngang involverer mange (mer enn seks) topologier. På den annen side gir en geometriskyggelegg flere og andre muligheter. En geometriskyggelegging brukes når det er behov for å konvertere en topologi til en annen geometri, eller hvis det er behov for litt geometrisk prosessering etter tessellasjonsskyggeleggingen.

Til slutt skaper det faktum at geometriskyggere følger tessellasjonsskyggere i rørledningen en begrensning i bruken av sistnevnte. En tessellasjonsskyggelegging kan bare generere linjesegmenter eller trekanter; den kan ikke generere noen geometri med tilgrensning. Dersom det er behov for å lage ny geometri i en geometriskyggelegging og denne geometrien krever tilstøtelse, kan ikke geometriskyggeren følge tessellasjonsskyggeren i rørledningen, og den siste kan dermed ikke brukes.

Geometri Shader

Geometrishaderen representerte en ny mulighet innen shaders da den ble introdusert på slutten av 2006 med utgivelsen av Shader Model 4 for å dra nytte av de stadig økende mulighetene til avanserte grafikkort. Det utvider programmererens grafikkferdigheter ved å tilby verktøy for å utvide den grunnleggende geometrien til modellen, gjennom inkludering av flere eller forskjellige typer grafikkprimitiver, i tillegg til de opprinnelig definerte. [3]

Hvis du bruker en geometriskyggelegging, kan applikasjonen eller vertexshaderen generere alle de kjente typene topologier:

Alle disse topologiene kan brukes av applikasjonen, men geometriskyggere har et begrenset antall topologier de kan akseptere. Dette er punkter, linjer, linjer med tilstøtende, trekanter eller trekanter med tilstøtende. [3]

Når det gjelder toppunktskyggere, gjør håndteringen av bare ett toppunkt om gangen det vanskelig å beregne normaler basert på vektorprodukter av kantene. Når vi jobber med geometriskyggere, ønsker vi fortsatt å bruke normalene beregnet fra den opprinnelige geometrien, siden de inneholder bedre informasjon enn normalene beregnet fra vektorproduktene til kantene. Imidlertid gir geometriskyggerne tilgang til all informasjon om alle toppunktene i en trekant eller trekant med tilstøtende (i input), og dette kan tillate oss å beregne normalene fra vektorproduktet. Faktisk kan det være tilstrekkelig å legge til en geometriskyggelegging til en applikasjon som bruker en toppunkt eller tessellasjonsskyggelegging, men som ikke støtter normal analyse, bare for å kunne beregne normalene fra vektorprodukt, for belysning. [3]

Fragment Shader

Den siste fasen i shader-miljøet er fragmentbehandlingen, utført av fragment shader eller pixel shader . Dette tar informasjonen utviklet av toppunktbehandling (vertex shader, tessellation shader eller geometri shader) og utvider tradisjonelle fragmenteringsoperasjoner ved å la deg jobbe med hvert fragment individuelt for å generere fargen på pikselen din. Dette er en svært parallell operasjon som kan bruke tradisjonelle eller prosedyremessige teksturer; spesiell fargelegging, for eksempel pseudofargeoverføringsfunksjoner; og avanserte typer skyggelegging, som Phong eller anisotropisk skyggelegging. Fragmentskyggeleggingen har størst innvirkning på den visuelle effekten av bildet. [3]

Den grunnleggende funksjonen til en fragmentskyggelegging er å ta de ensartede variablene og utdataene fra rasterizeren og beregne pikselfargen for hvert fragment. Selvfølgelig kan mange andre innebygde egenskaper til toppunkter, samt farge og lysintensitet, interpoleres i fragmentbehandling. De viktigste av disse er koordinatene til teksturene og dybden til pikslene. Hvis du teksturerer, siden teksturkoordinatene er interpolert, kan du bruke koordinatene til å prøve en tekstur (eller flere teksturer), for å hjelpe med å bestemme fargen på hver piksel. [3]

Bruken av pixel shaders lar deg bruke effekter som bump mapping , skygger, eksplosjoner, diffraksjonseffekter , refraksjon og simulering av fresnel-effekten (implementert i Half -Life 2 -videospillet ) som gir en bedre simulering av lyseffektene og et mer realistisk utseende av overflater med spesielle optiske egenskaper (som brytningseffekter i væsker).

Belysning

Den enkleste måten å lage belysning på er å gjøre det gjennom per-vertex-beregning, som vil plassere ansvaret for mesteparten av arbeidet på skuldrene til toppunktskyggeren. Hvis belysning gjengis på denne måten, beregnes farge basert på egenskapene til lys og materiale - som bestemmer fargen på hvert toppunkt - basert på standard ambient-diffuse-specular ( ADS ) belysningsmodell. Denne beregningen per toppunkt kan brukes for både flat og jevn skyggelegging. Imidlertid, hvis en mer kompleks skyggeleggingsmodell som Phong eller anisotropisk skyggelegging brukes, vil fargeberegningen sannsynligvis bli utsatt til fragmentskyggeleggingen, der fargeberegning per piksel kan utføres.

La oss vurdere, for enkelhets skyld, shaders som finnes i Blender.

Diffuse Shader

Bildene viser den diffuse skyggen med matchet hver speilende skyggelegging (diskutert nedenfor) implementert i Blender-programmet.

Lambert

Dette er standard skyggelegging. Den har ikke spesielle egenskaper og gjør det mulig å oppnå en myk nedbrytning fra lyspunkter til skyggepunkter. [1]

Oren-Nayar

Denne shaderen lar deg bedre reprodusere de mikroskopiske uregelmessighetene som finnes på overflaten av nesten ethvert materiale. [1] Relatert til refleksjonsmodellen utviklet på begynnelsen av 1990-tallet av Michael Oren og Shree K. Nayar, er det en generalisering av Lamberts lov som nå er mye brukt i datagrafikk. [6]

Toon

Toon tilhører kategorien fysisk unøyaktige shaders. Formålet er å gi et resultat som ligner på todimensjonale fargede bakgrunnsillustrasjoner i tegneserier. De lyse områdene vil derfor være svært homogene og forskjellige fra de like homogene skyggeområdene. [1]

Minnaert

Denne shaderen består i utgangspunktet av en reimplementering av Lambert shader . [1] Marcel Minnaert (1893-1970), var en belgisk astronom som var interessert i atmosfærens effekter på lys og bilder, som i 1954 ga ut en bok kalt "The Nature of Light and Color in the Open Air". [6]

Fresnel

I beregningen av diffusjonen tar en Fresnel -skyggelegger ikke bare hensyn til vinkelen som skapes mellom planet til synspunktet og den opplyste overflaten til objektet, men legger også til beregningene innfallsvinkelen for lys på overflaten av objektet objekt. Spesielt, jo mer parallelle strålene når med hensyn til normalen til en overflate, jo mindre diffusjon vil være; tvert imot, jo mer vinkelrett strålene er, desto større er diffusjonen. [1]

Specular Shader

Det er nødvendig å ikke bli lurt av begrepet Specular , som ikke i det hele tatt refererer til fenomenet refleksjon som er karakteristisk for speil, men angår det velkjente fenomenet dannelsen av et punkt med maksimal lysstyrke (eller høyt lys, eller lys). punkt, dette er begrepet korrigert på italiensk, med henvisning til speilende høylys ) på enhver overflate som er i stand til å reflektere lys. Ofte er disse to fenomenene ikke lett å skille fra hverandre, men det er mulig å bruke følgende metode for å få klarere ideer: jo jevnere, mer regelmessig og fri for ufullkommenheter overflaten på materialet er, jo mer synlig vil refleksjonen av høydepunktene være. For eksempel er en biljardball så jevn at den også skaper en speilende refleksjonseffekt; på den annen side, jo grovere og mer uregelmessig overflaten er, jo mer diffus refleksjon vil råde. [1] Det er mulig å lage ulike kombinasjoner mellom Diffuse (innenfor parenteser) og Specular shaders. Bildet nedenfor viser noen av dem og illustrerer samtidig effekten av hver Specular Shader.

CookToor

Det fulle navnet på denne shaderen er Cook-Torrance og kan betraktes som en utviklet versjon av Phong shaderen . Den er spesielt egnet for gjengivelse av ganske glatte organiske eller uorganiske overflater, som plast og lær. [1] Robert L. Cook (LucasFilm) og Kenneth E. Torrance (Cornell University) beskrev i deres artikkel fra 1982 " A Reflectance Model for Computer Graphics " [7] "en ny refleksjonsmodell for å gjengi datamaskinsyntetiserte bilder" og brukte den for simulering av metaller og plast. [8]

Phong

Phong er en av de første skyggeleggingsmetodene utviklet i datagrafikkens historie. Det er en ekstremt enkel shader, som er godt egnet til gjengivelse av metalliske materialer. [1]

Blinn

Blinn legger til en IOR (Index Of Refraction)-kontroll, noe som gir større realisme. Når det gjelder Blinn, kan refleksjonspunktet til høydepunktene være mye mindre i diameter enn i Phong og CookToor. [1] Den brukes ofte sammen med den populære Oren-Nayar shader. [8] Modellen ble beskrevet av Jim Blinn i 1977. [9]

Toon

Denne skyggen er vanligvis koordinert med den diffuse Toon. Den er i stand til å produsere (på lignende måte som å spre) et ekstremt definert lyspunkt. [1]

WardIso

Sistnevnte shader er nyttig for å lage plast eller metalliske materialer. [1] Gregory J. Ward utviklet en relativt enkel modell som adlyder fysikkens mest grunnleggende lover. I sin publikasjon fra 1992, " Meauring and modellering anisotropic reaction ," introduserte Ward en Bidirectional Reflectance Distribution Function (BRDF), som siden har blitt mye brukt i datagrafikk fordi de få parametrene den vurderer er enkle å kontrollere. Modellen hans kan representere både isotrope overflater (uavhengig av lysretningen) og anisotrope overflater (avhengig av lysretningen). I Blender kalles den speilende shaderen Ward fortsatt "Ward Isotropic", men den er faktisk anisotropisk.

Merknader

  1. ^ a b c d e f g h i j k l Francesco Siddi, 3D Graphics with Blender .
  2. ^ JF Hughes, Andries Van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley, Computer Graphics Principles and Practice , 3. utgave ..
  3. ^ a b c d e f g h Mike Bailey, Steve Cunningham, Graphics Shaders: Theory and Practice , 2. utgave ..
  4. ^ James Leiterman, Lær Vertex og Pixel Shader-programmering med DirectX 9 .
  5. ^ DirectX 11 tessellasjon , på nvidia.it .
  6. ^ a b -side i Blender Reference Manual on Diffuse Shaders , på docs.blender.org .
  7. ^ Robert L. Cook, Kenneth E. Torrance, A Reflectance Model for Computer Graphics .
  8. ^ a b side av Blender Reference Manual on Specular Shaders , på docs.blender.org . Hentet 15. mai 2017 (arkivert fra originalen 2. oktober 2018) .
  9. ^ Jim Blinn, Modeller av lysrefleksjon for datamaskinsyntetiserte bilder .

Relaterte elementer