Beste antwoord
Shaders zijn gespecialiseerde programmas die door grafische hardware worden gebruikt om afbeeldingen te produceren. Ze zijn meestal onderverdeeld in kleinere programmas die verschillende aspecten van het hardwareproces verwerken.
Er zijn verschillende soorten, maar de meest voorkomende zijn pixel en vertex shaders.
De vertex shader is verantwoordelijk voor het toepassen van eventuele wijzigingen in de invoergeometrie. Gewoonlijk betekent dat het projecteren van 3D-geometrie op het 2D-projectievlak van het uitvoerbeeld, maar soms kunt u hier ook een soort procedurele beweging of vervorming aan de geometrie toevoegen.
De pixel-arcering neemt de uitvoer van de hoekpuntshader en genereert de pixels die in de uiteindelijke afbeelding zullen verschijnen. Meestal is dit gebaseerd op een variatie van de weergavevergelijking , waarbij de richting van de pixel wordt vergeleken met de richtingen van de lichtbronnen en de eigenschappen van het oppervlak , maar kan van alles zijn, van een willekeurige ruisfunctie tot een complexe simulatie of raytracing.
Het deel hiervan dat het meest verschilt van gewone programmering is dat zowel vertex- als pixel-shaders extreem geparallelliseerd. Elke hoekpuntshader wordt tegelijkertijd op elk hoekpunt in de invoergegevens uitgevoerd; elke pixel-shader wordt tegelijkertijd op elke pixel in de uiteindelijke afbeelding uitgevoerd. Dat betekent dat het moeilijk is om iets met de ene pixel te doen op basis van de status van een andere: alle pixels worden onafhankelijk van elkaar tegelijkertijd uitgevoerd. Effecten die zich bewust moeten zijn van de context, moeten vaak meerdere pixel-shaders achter elkaar uitvoeren, waarbij de resultaten in tijdelijke afbeeldingen worden opgeslagen.
Dit geeft je een behoorlijk, heel eenvoudig overzicht van hoe het werkt:
Antwoord
Een “pixel-shader” (wat een slechte naam is voor een “fragment-shader”) is een klein programma dat vele malen parallel loopt op de GPU om de kleur van fragmenten te bepalen. In basistermen lijken fragmenten conceptueel erg op pixels, vandaar de naam verwarring.
Wanneer geometrie wordt ingediend voor tekenen, worden de hoekpunten getransformeerd door de “hoekpuntshader”. De pijplijn zal primitieven zoals driehoeken of lijnen construeren, en nadat ze op het scherm zijn geprojecteerd en geknipt, berekent de rasteraar alle pixels die worden aangeraakt en interpoleert alle waarden tussen hoekpunten zoals kleuren, textuurcoördinaten of normalen . De fragmentarcering wordt voor elk van de fragmenten uitgevoerd om de uiteindelijke kleur te bepalen. Andere bewerkingen zoals diepte / alfa / stencil-testen worden uitgevoerd en vervolgens kunnen fragmenten mogelijk samen worden gemiddeld in het geval van multisample-antialiasing, voordat ze uiteindelijk echte pixelkleuren worden die in de schermbuffer kunnen worden geschreven of gemengd.
Afbeelding afkomstig van hier .