Hvad er en OpenGL®-skygge?
En Open Graphics Library® (OpenGL®) -skygge er en visuel tilnærmelse i en tredimensionel (3D) OpenGL®-scene af hvordan en skygge ville blive støbt i det virkelige liv under lignende lysforhold. Skygger er en kompleks visuel funktion, der skal implementeres i OpenGL®, stort set fordi der ikke er nogen medfødt støtte til at støbe skygger i en scene. Der er i stedet en række teknikker, der kan bruges til at skabe skygger fra objekter og geometri inden for en scene ved hjælp af forskellige værktøjer, såsom de forskellige tilgængelige buffere, shaders og i nogle tilfælde udvidelser, der giver adgang til specielle funktioner på visse grafik kort. I de fleste tilfælde er kvaliteten, nøjagtigheden og hastigheden af OpenGL®-skygge gengivelse direkte relateret til processorkraften og hukommelsen af den grafiske hardware, der findes på en computer eller enhed. Nogle af de mere populære metoder til implementering af en OpenGL®-skygge inkluderer skyggevolumener, skyggekortlægning og strålesporing.
Oprettelse af et program, der har OpenGL®-skyggestøtte, kræver matematisk viden og en dyb forståelse af, hvordan OpenGL® fungerer. OpenGL® bruges i vid udstrækning til at skabe 3D-scener, der er dynamiske og gengives i realtid, så algoritmerne, der bruges til at skabe skygger, skal ikke kun optimeres for hastighed, men skal også måles omhyggeligt med hensyn til deres forbrug af ressourcer og eventuelle forstyrrelser, der kan være forårsaget i den grafikpipeline, der bruges til gengivelse. Af disse grunde er den mest basale metode til at skabe en skygge, kaldet strålesporing, ofte upraktisk for fuld 3D-scener, fordi det kan tage meget lang tid.
Strålesporing følger grundlæggende en imaginær linje eller stråle fra kameraets betragtningsplan eller position gennem en scene til et objekts overflade og beregner derefter overfladens farve baseret på placeringen af en eller flere lyskilder og andre faktorer. Under rasteriseringsprocessen, hvor 3D-scenen tegnes til en todimensionel (2D) overflade, så den kan vises, skal processen med strålesporing udføres på hver pixel, der tegnes, og især med teksturer eller andet overfladeegenskaber, kan det være nødvendigt at vurdere de samme pixels flere gange. Dette betyder strålesporing i realtid, selvom det nøjagtigt ville gengive skygger, er normalt ikke praktisk.
En anden metode, der kan bruges til at oprette en OpenGL®-skygge, er kendt som skyggekortlægning. Denne metode bruger dybden eller stencilbufferen til at gengive en scene fra lyskildens vinkel som en række afstande fra lyskilden til overfladerne af forskellige objekter i scenen. Scenen gengives derefter en anden gang fra den rigtige synsvinkel og kontrollerer, om hver pixel falder inden for et bestemt afstand inden for bufferen, hvilket indikerer, om pixlen er tændt eller skygge. Brug af skyggekortlægning kan være hukommelseskrævende, og med scener, der har mere end en lyskilde, kan det indebære, at der laves flere kort fra flere vinkler.
Skyggevolumener er en måde at oprette en OpenGL®-skygge på, der er mere nøjagtig end nogle andre metoder, men den præsenterer sine egne problemer. Et skyggevolumen er i det væsentlige et usynligt stykke geometri i en scene, der udvides fra den oplyste overflade af et objekt væk fra lyskilden. Denne lydstyrke kan kontrolleres mod andre objekter for at se, om de falder i skyggen af overfladen, hvorfra lydstyrken stammer. Denne procedure kan være meget kompleks og i sidste ende skabe visuelle artefakter, når den er optimeret til hastighed.