Vad är en OpenGL®-skugga?
En Open Graphics Library® (OpenGL®) -skugga är en visuell tillnärmning i en tredimensionell (3D) OpenGL®-scen av hur en skugga skulle kastas i verkligheten under liknande ljusförhållanden. Skuggor är en komplex visuell funktion att implementera i OpenGL®, till stor del för att det inte finns något medfött stöd för att gjuta skuggor i en scen. Det finns istället en mängd olika tekniker som kan användas för att skapa skuggor från objekt och geometri i en scen med olika verktyg, såsom olika tillgängliga buffertar, skuggare och i vissa fall tillägg som ger tillgång till specialfunktioner på vissa bilder kort. I de flesta fall är kvaliteten, noggrannheten och hastigheten för OpenGL®-skuggframställning direkt relaterad till processorkraften och minnet för den grafiska hårdvaran som finns i en dator eller enhet. Några av de mer populära metoderna för att implementera en OpenGL®-skugga inkluderar skuggvolymer, skuggmappning och strålspårning.
Att skapa en applikation som har OpenGL®-skuggstöd kräver matematisk kunskap och en djup förståelse för hur OpenGL® fungerar. OpenGL® används till stor del för att skapa 3D-scener som är dynamiska och återges i realtid, så algoritmerna som används för att skapa skuggor måste inte bara optimeras för hastighet, utan måste också mätas noggrant för deras resursförbrukning och eventuella störningar som kan orsakas i den grafikpipeline som används för rendering. Av dessa skäl är den mest grundläggande metoden för att skapa en skugga, kallad strålspårning, ofta opraktisk för full 3D-scener, eftersom det kan ta mycket lång tid.
Strålspårning följer i princip en imaginär linje, eller stråle, från visningsplanet eller positionen för kameran genom en scen till ett objekts yta och beräknar sedan ytans färg baserat på positionen för en eller flera ljuskällor och andra faktorer. Under rasteriseringsprocessen, där 3D-scenen dras till en tvådimensionell (2D) yta så att den kan visas, måste strålspårningsprocessen utföras på varje pixel som dras och särskilt med texturer eller annat ytegenskaper, kan behöva utvärdera samma pixlar flera gånger. Detta innebär strålspårning i realtid, även om det exakt skulle göra skuggor, är vanligtvis inte praktisk.
En annan metod som kan användas för att skapa en OpenGL®-skugga kallas skuggmappning. Denna metod använder djupet eller stencilbufferten för att göra en scen från ljuskällans vinkel som en serie avstånd från ljuskällan till ytorna på olika objekt i scenen. Scenen återges sedan en andra gång från rätt visningsvinkel, och kontrollerar om varje pixel faller inom ett visst avstånd inom bufferten, vilket indikerar om pixeln är upplyst eller skuggad. Att använda skuggmappning kan vara minnesintensivt och kan med scener som har mer än en ljuskälla innebära att göra flera kartor från flera vinklar.
Skuggvolymer är ett sätt att skapa en OpenGL®-skugga som är mer exakt än vissa andra metoder, men den presenterar sina egna problem. En skuggvolym är i huvudsak en osynlig bit av geometri i en scen som expanderar från den upplysta ytan på ett föremål bort från ljuskällan. Denna volym kan kontrolleras mot andra objekt för att se om de faller i skuggan av ytan från vilken volymen härstammar. Denna procedur kan vara mycket komplex och skapa slutligen visuella artefakter när den är optimerad för hastighet.