Vad är per-pixel belysning?

”Per-pixel lighting” är en term som används i datorgrafik för att indikera att en tredimensionell (3D) scen kommer att bestämma färgen på objekt på en pixel-för-pixel-basis istället för på en vertex-by-vertex-basis. Användningen av per-pixel-belysning istället för per-vertex-belysning skapar vanligtvis en färdig bild eller ram som har ett mer realistiskt och ofta skarpare, mer definierat utseende, särskilt när bumpmapping används. I allmänhet implementeras belysning per pixel genom användning av pixelskuggare som kan använda ett antal sätt för att beräkna hur ljuset i en scen träffar ett visst område av scenen och vilken färg den resulterande ytan ska ha. I 3D-applikationer där renderingshastigheten är viktig, till exempel en dynamisk animering, kanske skuggning per pixel inte är praktiskt eftersom det kan kräva flera pass genom en scen eller helt enkelt kan ta för lång tid och göra en acceptabel bildhastighet omöjlig att uppnå.

En av de vanligaste formerna för att applicera ljus på en 3D-scen är att använda en metod som kallas per-vertex-belysning. Denna teknik tar ett objekts hörn – punkterna där linjerna i ett objekt möts – och bestämmer hur ytan på ett objekt ska se ut på den enda platsen. När alla hörn i en scen har belysningsinformation kopplad kommer renderaren att använda interpolation eller andra typer av algoritmer för att uppskatta utseendet på ytan på objektet mellan hörnen. Detta resulterar i allmänhet i områden som är beroende av en hög täthet av hörn i ett objekt för att uppnå skarpa ljuseffekter, såsom en phong-höjdpunkt, medan en form som en kub med endast sex hörn kommer att ha bred, graderad belysning över ytorna, oavsett struktur eller belysningsposition.

Däremot kan ett program implementera per-pixel belysning. Detta innebär att passera genom var och en av pixlarna i en rastrerad scen och bestämma den individuella färgen och ljussättningen för varje pixel, oavsett dess närhet till en vertex. Resultaten är vanligtvis skarp, exakt belysning, särskilt med spegeleffekter. Avvägningen för bättre bildkvalitet är en längre renderingstid, eftersom varje pixel måste bearbetas av en pixelshader, även om detta inte alltid är ett problem med 3D-modellering och grafik och renderingsprogram som inte behöver upprätthålla en viss bildhastighet.

De dramatiska effekterna av per-pixel-belysning när den appliceras på rätt sätt kan faktiskt förbättra utseendet på ett objekt som har en intrikat bump-mapping och de små detaljerna kan gå förlorade med per-vertex-belysning. Procedurstrukturer kan också dra nytta av en belysning per pixel. Dessutom kräver specialeffekter som skuggvolymer användning av per-pixelbelysning, liksom komplexa ljusreflektioner, partikelsystem eller till och med halos i vissa fall.