Bedste svar
Shaders er specialiserede programmer, der bruges af grafikhardware til at producere billeder. De er normalt opdelt i mindre programmer, der håndterer forskellige aspekter af hardwaregengivelsesprocessen.
Der er flere forskellige varianter, men de mest almindelige er pixel og vertex shaders.
vertex shader er ansvarlig for at anvende ændringer i inputgeometrien. Normalt betyder det at projicere 3-d geometri på 2-d projektionsplanet i outputbilledet, men nogle gange kan du også tilføje en form for procedurel bevægelse eller deformation til geometrien her.
Pixelskygge tager output fra vertex shader og genererer de pixels, der vises i det endelige billede. Det meste af tiden er dette baseret på en vis variation af gengivelsesligning , der sammenligner pixelens retningsretning med lyskildens retninger og overfladens egenskaber , men kan være alt fra en tilfældig støjfunktion til en kompleks simulering eller raytracing.
Den del af dette, der er mest forskellig fra almindelig programmering, er at både toppunkt- og pixelskygger er ekstremt paralleliseret. Hver toppunktskygge kører på hvert toppunkt i inputdataene på samme tid; hver pixelskygge kører på hver pixel i det endelige billede på samme tid. Det betyder, at det er svært at gøre noget mod en pixel baseret på en anden tilstand – alle pixels kører på samme tid uafhængigt af hinanden. Effekter, der skal være opmærksomme på konteksten, skal ofte køre flere pixelskygger efter hinanden og gemme resultaterne i midlertidige billeder.
Dette giver dig et anstændigt, meget grundlæggende overblik over, hvordan det fungerer:
Svar
En “pixelskygge” (hvilket er et dårligt navn for en “fragmentskygge”) er et lille program, der kører parallelt mange gange på GPUen for at bestemme fragmenternes farve. I grundlæggende vendinger er fragmenter begrebsmæssigt meget lig pixels, deraf navnet forvirring.
Når geometri sendes til tegning, omdannes hjørnerne af “vertex shader”. Rørledningen vil konstruere primitiver som trekanter eller linjer, og efter at de er blevet projiceret på skærmen og klippet, vil rasteriseren udarbejde alle de pixels, der bliver berørt, og interpolere eventuelle værdier mellem hjørner, såsom farver, teksturkoordinater eller normaler . Fragmentskygge køres for hver af fragmenterne for at finde ud af den endelige farve. Andre operationer såsom dybde / alfa / stencil test udføres, og derefter kan fragmenter muligvis beregnes i gennemsnit i tilfælde af multisample antialiasing, før de endelig bliver faktiske pixelfarver, der skal skrives eller blandes i skærmbufferen.
Billede taget fra her .