Hva er en OpenGL®-skygge?
En Open Graphics Library® (OpenGL®) -skygge er en visuell tilnærming i en tredimensjonal (3D) OpenGL®-scene om hvordan en skygge ville bli støpt i det virkelige liv under lignende lysforhold. Shadows er en kompleks visuell funksjon å implementere i OpenGL®, i stor grad fordi det ikke er noen medfødt støtte for å støpe skygger i en scene. Det er i stedet en rekke teknikker som kan brukes til å lage skygger fra objektene og geometrien i en scene ved hjelp av forskjellige verktøy, for eksempel de forskjellige tilgjengelige buffere, skyggelegger og, i noen tilfeller, utvidelser som gir tilgang til spesielle funksjoner på bestemt grafikk kort. I de fleste tilfeller er kvaliteten, nøyaktigheten og hastigheten til OpenGL® skygge gjengivelse direkte relatert til prosessorkraften og minnet til den grafiske maskinvaren som er til stede på en datamaskin eller enhet. Noen av de mer populære metodene for å implementere en OpenGL®-skygge inkluderer skyggevolumer, skyggekartlegging og strålesporing.
Å lage en applikasjon som har OpenGL® skyggestøtte krever matematisk kunnskap og en dyp forståelse av hvordan OpenGL® fungerer. OpenGL® brukes i stor grad til å lage 3D-scener som er dynamiske og gjengis i sanntid, så algoritmene som brukes til å lage skygger må ikke bare optimaliseres for hastighet, men må også måles nøye for deres ressursforbruk og eventuelle forstyrrelser som kan være forårsaket i grafikkrørledningen som brukes til gjengivelse. Av disse grunner er den mest grunnleggende metoden for å lage en skygge, kalt strålesporing, ofte upraktisk for full 3D-scener, fordi det kan ta veldig lang tid.
Strålesporing følger i utgangspunktet en tenkt linje, eller stråle, fra visningsplanet eller posisjonen til kameraet gjennom en scene til et objekts overflate og beregner deretter fargen på overflaten basert på plasseringen av en eller flere lyskilder og andre faktorer. Under rasteriseringsprosessen, der 3D-scenen tegnes til en todimensjonal (2D) overflate slik at den kan vises, må prosessen med strålesporing utføres på hver piksel som tegnes, og spesielt med teksturer eller annet overflateegenskaper, kan det hende at du må vurdere de samme pikslene flere ganger. Dette betyr strålesporing i sanntid, selv om det nøyaktig ville gjengi skygger, vanligvis ikke er praktisk.
En annen metode som kan brukes til å lage en OpenGL®-skygge er kjent som skyggekartlegging. Denne metoden bruker dybde- eller sjablongbufferen for å gjengi en scene fra vinkelen til lyskilden som en serie avstander fra lyskilden til overflatene til forskjellige objekter i scenen. Scenen blir deretter gjengitt en annen gang fra riktig visningsvinkel, og sjekker om hver piksel faller innenfor et visst avstand innenfor bufferen, og indikerer om pikslen er tent eller skyggelagt. Å bruke skyggekartlegging kan være minneintensivt, og med scener som har mer enn en lyskilde, kan det innebære å lage flere kart fra flere vinkler.
Skyggevolum er en måte å lage en OpenGL®-skygge som er mer nøyaktig enn noen andre metoder, men den presenterer sine egne problemer. Et skyggevolum er i hovedsak et usynlig stykke geometri i en scene som utvides fra den opplyste overflaten til et objekt vekk fra lyskilden. Dette volumet kan sjekkes mot andre objekter for å se om de faller i skyggen av overflaten som volumet stammer fra. Denne prosedyren kan være veldig kompleks og til slutt skape visuelle gjenstander når den er optimalisert for hastighet.