O umbră Open Graphics Library® (OpenGL®) este o aproximare vizuală într-o scenă OpenGL® tridimensională (3D) a modului în care o umbră ar fi proiectată în viața reală în condiții de iluminare similare. Umbrele sunt o caracteristică vizuală complexă de implementat în OpenGL®, în mare parte pentru că nu există un suport înnăscut pentru proiectarea de umbre într-o scenă. Există, în schimb, o varietate de tehnici care pot fi folosite pentru a crea umbre din obiecte și geometrie dintr-o scenă folosind diverse instrumente, cum ar fi diferitele buffere disponibile, shadere și, în unele cazuri, extensii care oferă acces la caracteristici speciale pe anumite grafice. carduri. În cele mai multe cazuri, calitatea, acuratețea și viteza de redare a umbrelor OpenGL® sunt direct legate de puterea de procesare și memoria hardware-ului grafic prezent într-un computer sau dispozitiv. Unele dintre cele mai populare metode de implementare a unei umbre OpenGL® includ volumele de umbre, maparea umbrelor și urmărirea razelor.
Crearea unei aplicații care are suport pentru umbre OpenGL® necesită cunoștințe matematice și o înțelegere profundă a modului în care funcționează OpenGL®. OpenGL® este folosit în mare măsură pentru a crea scene 3D care sunt dinamice și redate în timp real, astfel încât algoritmii care sunt utilizați pentru a crea umbre trebuie nu numai optimizați pentru viteză, ci și măsurați cu atenție pentru consumul lor de resurse și orice întreruperi care ar putea fi cauzată în conducta grafică utilizată pentru randare. Din aceste motive, cea mai de bază metodă de a crea o umbră, numită ray tracing, este adesea nepractică pentru scene 3D complete, deoarece poate dura foarte mult timp.
Ray tracing urmează practic o linie imaginară, sau rază, de la planul de vizualizare sau poziția camerei printr-o scenă până la suprafața unui obiect și apoi calculează culoarea suprafeței pe baza poziției uneia sau mai multor surse de lumină și a altor factori. În timpul procesului de rasterizare, în care scena 3D este desenată pe o suprafață bidimensională (2D) pentru a putea fi afișată, procesul de urmărire a razelor trebuie efectuat pe fiecare pixel care este desenat și, în special cu texturi sau alte proprietățile suprafeței, ar putea fi necesar să evalueze aceiași pixeli de mai multe ori. Aceasta înseamnă urmărirea razelor în timp real, deși ar reda cu precizie umbrele, de obicei nu este practică.
O altă metodă care poate fi folosită pentru a crea o umbră OpenGL® este cunoscută sub denumirea de mapare a umbrelor. Această metodă folosește adâncimea sau tamponul stencil pentru a reda o scenă din unghiul sursei de lumină ca o serie de distanțe de la sursa de lumină la suprafețele diferitelor obiecte din scenă. Scena este apoi redată a doua oară din unghiul de vizualizare corect, verificând dacă fiecare pixel se încadrează într-un anumit interval de distanță în buffer, indicând dacă pixelul este luminat sau umbrit. Utilizarea mapării umbrelor poate consuma multă memorie și, în cazul scenelor care au mai multe surse de lumină, poate implica realizarea mai multor hărți din mai multe unghiuri.
Volumele de umbră sunt o modalitate de a crea o umbră OpenGL® care este mai precisă decât alte metode, dar prezintă propriile probleme. Un volum de umbră este în esență o piesă invizibilă de geometrie într-o scenă care se extinde de pe suprafața luminată a unui obiect departe de sursa de lumină. Acest volum poate fi verificat față de alte obiecte pentru a vedea dacă acestea cad în umbra suprafeței de la care provine volumul. Această procedură poate fi foarte complexă și, în cele din urmă, poate crea artefacte vizuale atunci când este optimizată pentru viteză.