Open Graphics Library® (OpenGL®) -varjo on visuaalinen likiarvo kolmiulotteisessa (3D) OpenGL®-kohtauksessa siitä, miten varjo heitetään todellisessa elämässä vastaavissa valaistusolosuhteissa. Varjot ovat monimutkainen visuaalinen ominaisuus, joka on toteutettava OpenGL® -ohjelmassa, suurelta osin siksi, että varjojen heittämiseen näkymässä ei ole luontaista tukea. Sen sijaan on olemassa erilaisia tekniikoita, joilla voidaan luoda varjoja kohteen esineistä ja geometriasta kohtauksen sisällä käyttämällä erilaisia työkaluja, kuten erilaisia käytettävissä olevia puskureita, varjostimia ja joissakin tapauksissa laajennuksia, jotka antavat pääsyn tiettyjen grafiikoiden erikoisominaisuuksiin kortit. Useimmissa tapauksissa OpenGL® -varjojen renderoinnin laatu, tarkkuus ja nopeus liittyvät suoraan tietokoneen tai laitteen grafiikkalaitteiston prosessointitehoon ja muistiin. Jotkut suosituimmista OpenGL® -varjon toteuttamistavoista ovat varjojen volyymit, varjokartoitus ja säteenseuranta.
Sovelluksen luominen, jolla on OpenGL® -varjotuki, edellyttää matemaattista tietämystä ja syvää ymmärrystä OpenGL®: n toiminnasta. OpenGL® -tekniikkaa käytetään suurelta osin 3D -kohtausten luomiseen, jotka ovat dynaamisia ja reaaliaikaisia, joten varjojen luomiseen käytettävät algoritmit on optimoitava nopeuden lisäksi myös mittaamalla niiden resurssien kulutus ja mahdolliset häiriöt. saattaa johtua renderoinnissa käytetystä grafiikkaputkesta. Näistä syistä yksinkertaisin tapa luoda varjo, nimeltään säteenseuranta, on usein epäkäytännöllinen koko 3D -kohtauksissa, koska se voi kestää hyvin kauan.
Säteenseuranta seuraa pohjimmiltaan kuvitteellista linjaa tai sädettä kameran katselutasosta tai sijainnista kohtauksen läpi kohteen pintaan ja laskee sitten pinnan värin yhden tai useamman valonlähteen sijainnin ja muiden tekijöiden perusteella. Rasterointiprosessin aikana, jolloin 3D-kohtaus piirretään kaksiulotteiseen (2D) pintaan, jotta se voidaan näyttää, säteenseurantaprosessi on suoritettava jokaiselle piirrettävälle pikselille ja erityisesti tekstuureille tai muille pinnan ominaisuuksia, saatat joutua arvioimaan samat pikselit useita kertoja. Tämä tarkoittaa reaaliaikaista säteenseurantaa, vaikka se tekisi varjoja tarkasti, ei yleensä ole käytännöllistä.
Toinen menetelmä, jolla voidaan luoda OpenGL® -varjo, tunnetaan varjokartoituksena. Tämä menetelmä käyttää syvyyttä tai kaavainpuskuria muodostamaan kohtauksen valonlähteen kulmasta sarjana etäisyyksiä valonlähteestä eri kohteiden pintoihin. Kohta renderoidaan sitten toisen kerran oikeasta katselukulmasta ja tarkistetaan, kuuluuko kukin pikseli tietylle etäisyysalueelle puskurissa, mikä osoittaa, onko pikseli valaistu vai varjostettu. Varjokartoituksen käyttäminen voi olla muistia vaativaa ja useissa valolähteissä olevien kohtausten yhteydessä voi tehdä useita karttoja useista kulmista.
Varjotilavuudet ovat tapa luoda OpenGL® -varjo, joka on tarkempi kuin jotkut muut menetelmät, mutta joka tuo esiin omat ongelmansa. Varjotilavuus on olennaisesti näkymättömänä geometrian osana kohtauksessa, joka laajenee esineen valaistusta pinnasta kaukana valonlähteestä. Tämän äänenvoimakkuuden voi tarkistaa muihin esineisiin nähden, putoavatko ne sen pinnan varjoon, josta tilavuus on peräisin. Tämä menettely voi olla hyvin monimutkainen ja lopulta luoda visuaalisia esineitä optimoituna nopeuteen.