En shader är ett litet program som körs direkt på datorns grafikkort (GPU) istället för på processorn (CPU). Medan processorn är bra på att göra många olika saker, är shadern en specialist på att räkna ut färg och position för miljontals pixlar samtidigt. Det är shadern som bestämmer hur ljus, skuggor och material ser ut i ett spel eller ett program.
Shaders skrivs i ett språk som heter GLSL (OpenGL Shading Language). Det påminner mycket om det klassiska språket C. Det är byggt för att vara extremt snabbt och hantera matematik (som vektorer och matriser) på ett effektivt sätt. En stor skillnad mot vanlig kod är att en shader körs "parallellt" – samma kod körs för varje enskild pixel på skärmen samtidigt.
De två viktigaste typerna av shaders samarbetar i en kedja:
Vertex Shader: Hanterar formen. Den räknar ut var i det 3D-rummet varje hörn (vertex) på ett objekt ska ligga.
Fragment Shader: Hanterar färgen. När formen är klar fyller denna shader i ytan med färg, texturer och ljuseffekter för varje pixel (fragment).
* Old-school (Fixed Function Pipeline): Förr var OpenGL som en restaurang med en fast meny. Du kunde bara ändra på färdiga inställningar (tänd lampan, byt färg).
New-school (Programmable Pipeline): Idag skriver vi allt själva. Det är svårare att lära sig eftersom du börjar med en svart skärm, men det ger dig total konstnärlig frihet att skapa precis vilka effekter du vill.
Extrem fart: Kan hantera miljoner beräkningar per sekund.
Visuell frihet: Skapa allt från realism till tecknad stil.
Avlastning: Flyttar tungt arbete från din CPU till din GPU.
Svårt att debugga: Du kan inte pausa koden mitt i en pixelberäkning.
Matematik-tungt: Kräver god förståelse för geometri och linjär algebra.
Hårdvarukänsligt: Olika grafikkort kan tolka kod lite olika.
För att skriva shaders i VS Code bör du installera tillägg (extensions) som "Shader languages support" eller "GLSL Canvas". Dessa ger dig:
Syntax highlighting: Koden färgkodas så att du ser vad som är variabler, siffror och funktioner.
Felmeddelanden: Den varnar direkt om du glömmer ett semikolon.
Live Preview: Vissa tillägg låter dig se resultatet av din kod i ett litet fönster direkt bredvid texten så fort du sparar.
#version 330 core
// Utgångsfärgen för varje pixel
out vec4 FragColor;
void main() {
// Definierar färg i RGBA (Röd, Grön, Blå, Alpha)
// 1.0, 0.0, 0.0, 1.0 betyder 100% rött och full synlighet
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
OpenGL (Open Graphics Library) är ett så kallat API – ett gränssnitt som gör att din programkod kan prata med grafikkortet. Det skapades av företaget Silicon Graphics (SGI) och släpptes första gången 1992. Innan OpenGL fanns var man tvungen att skriva unik kod för varje specifikt grafikkort, vilket var ett mardrömsarbete för programmerare. OpenGL skapade en standard som fungerar på nästan alla datorer.
OpenGL jobbar som ett löpande band i en fabrik, vilket kallas för en Graphics Pipeline. Du skickar in rådata (punkter i 3D-rymd) i ena änden. Data passerar sedan olika stationer (dina shaders) som transformerar, färglägger och klipper bort det som inte syns. I slutändan kommer det ut färdiga pixlar på skärmen. Allt sker i en bestämd ordning, steg för steg, i en rasande fart.
Skillnaden mellan en vanlig processor (CPU) och grafikkortet (GPU) som kör OpenGL är hur de tänker. En CPU är som en genialisk professor som gör en svår sak i taget. En GPU är som tusentals lågstadieelever som gör samma enkla sak samtidigt. Eftersom OpenGL kan be grafikkortet att räkna på 2 miljoner pixlar samtidigt istället för en och en, blir grafiken tusentals gånger snabbare än om processorn hade gjort jobbet.