Beste svaret
Shaders er spesialiserte programmer som brukes av grafikkhardware til å produsere bilder. De er vanligvis delt inn i mindre programmer som håndterer forskjellige aspekter av maskinvaregjengelsesprosessen.
Det finnes flere forskjellige varianter, men de vanligste er piksel og toppunkt skyggelister.
vertex shader er ansvarlig for å påføre endringer i inngangsgeometrien. Vanligvis betyr det å projisere 3-d geometri på 2-d projeksjonsplanet i utgangsbildet, men noen ganger kan du også legge til en slags prosessuell bevegelse eller deformasjon til geometrien også her.
Pikselskyggen tar utgangen fra toppunktskyggen og genererer pikslene som vises i det endelige bildet. Mesteparten av tiden er dette basert på en eller annen variasjon av gjengivelsesligning , og sammenligner pikselens retningsretning med lyskildens retninger og overflatens egenskaper. , men kan være alt fra en tilfeldig støyfunksjon til en kompleks simulering eller strålesporing.
Den delen av dette som er mest forskjellig fra vanlig programmering er at både topp- og pikselskyggere er ekstremt parallellisert. Hver toppunktskygge vil kjøre på hvert toppunkt i inngangsdataene samtidig; hver pikselskygger vil kjøre på hver piksel i det endelige bildet samtidig. Det betyr at det er vanskelig å gjøre noe med en piksel basert på tilstanden til en annen – alle piksler kjører samtidig uavhengig av hverandre. Effekter som må være oppmerksomme på konteksten må ofte kjøre flere piksler skyver etter hverandre, og lagre resultatene i midlertidige bilder.
Dette gir deg en anstendig, veldig grunnleggende oversikt over hvordan det fungerer:
Svar
En «pixel shader» (som er et dårlig navn for en «fragment shader») er et lite program som går parallelt på GPU for å bestemme fargen på fragmenter. I grunnleggende termer er fragmenter konseptuelt veldig lik piksler, derav navnet forvirring.
Når geometri sendes inn for tegning, blir hjørnene transformert av «vertex shader». Rørledningen vil konstruere primitiver som trekanter eller linjer, og etter at de er blitt projisert på skjermen og klippet, vil rasterisereren utarbeide alle piksler som blir berørt, og interpolere eventuelle verdier mellom hjørner som farger, teksturkoordinater eller normaler . Fragmentskyggen kjøres for hver av fragmentene for å finne ut den endelige fargen. Andre operasjoner som dybde / alfa / sjablontesting utføres, og fragmenter kan muligens beregnes i gjennomsnitt i tilfelle multisample antialiasing, før de endelig blir faktiske pikselfarger som skal skrives eller blandes inn i skjermbufferen.
Bildet er tatt fra her .