Što je OpenGL® sjena?

Sjena Open Graphics Library® (OpenGL®) vizualna je aproksimacija u trodimenzionalnoj (3D) OpenGL® sceni o tome kako bi sjena bila bačena u stvarnom životu pod sličnim svjetlosnim uvjetima. Sjene su složena vizualna značajka za implementaciju u OpenGL®, uglavnom zato što ne postoji urođena podrška za bacanje sjena u sceni. Umjesto toga, postoje razne tehnike koje se mogu koristiti za stvaranje sjena od objekata i geometrije unutar scene korištenjem različitih alata, kao što su različiti dostupni međuspremnici, sjenila i, u nekim slučajevima, proširenja koja daju pristup posebnim značajkama na određenoj grafici kartice. U većini slučajeva, kvaliteta, točnost i brzina OpenGL® iscrtavanja sjena izravno su povezani s procesorskom snagom i memorijom grafičkog hardvera prisutnog u računalu ili uređaju. Neke od popularnijih metoda implementacije OpenGL® sjene uključuju volumene sjene, mapiranje sjena i praćenje zraka.

Stvaranje aplikacije koja ima OpenGL® shadow podršku zahtijeva matematičko znanje i duboko razumijevanje kako OpenGL® radi. OpenGL® se uvelike koristi za stvaranje 3D scena koje su dinamične i renderirane u stvarnom vremenu, tako da algoritmi koji se koriste za stvaranje sjena moraju biti ne samo optimizirani za brzinu, već se moraju pažljivo mjeriti u pogledu potrošnje resursa i svih poremećaja koji može biti uzrokovano u grafičkom cjevovodu koji se koristi za renderiranje. Iz tih razloga, najosnovnija metoda stvaranja sjene, nazvana praćenje zraka, često je nepraktična za pune 3D scene, jer može potrajati jako dugo.

Praćenje zraka u osnovi slijedi zamišljenu liniju, ili zraku, od ravnine gledanja ili položaja kamere kroz scenu do površine objekta, a zatim izračunava boju površine na temelju položaja jednog ili više izvora svjetlosti i drugih čimbenika. Tijekom procesa rasterizacije, gdje se 3D scena crta na dvodimenzionalnu (2D) površinu kako bi se mogla prikazati, proces praćenja zraka mora se izvesti na svakom pikselu koji se crta, a posebno s teksturama ili drugim svojstva površine, možda će trebati procijeniti iste piksele nekoliko puta. To znači da praćenje zraka u stvarnom vremenu, iako bi točno prikazalo sjene, obično nije praktično.

Druga metoda koja se može koristiti za stvaranje sjene OpenGL® poznata je kao mapiranje sjene. Ova metoda koristi dubinu ili međuspremnik šablona za renderiranje scene iz kuta izvora svjetlosti kao niza udaljenosti od izvora svjetlosti do površina različitih objekata unutar scene. Scena se zatim renderira drugi put iz ispravnog kuta gledanja, provjerava da li svaki piksel spada unutar određenog raspona udaljenosti unutar međuspremnika, što pokazuje je li piksel osvijetljen ili zasjenjen. Korištenje mapiranja sjena može zahtijevati intenzivno pamćenje i, sa scenama koje imaju više od jednog izvora svjetlosti, može uključivati ​​izradu više karata iz više kutova.

Volumeni sjena način su stvaranja sjene OpenGL® koja je točnija od nekih drugih metoda, ali predstavlja svoje probleme. Volumen sjene u biti je nevidljivi dio geometrije u sceni koji se širi od osvijetljene površine objekta dalje od izvora svjetlosti. Taj se volumen može provjeriti s drugim objektima kako bi se vidjelo padaju li u sjenu površine s koje je volumen potjecao. Ovaj postupak može biti vrlo složen i u konačnici stvoriti vizualne artefakte kada je optimiziran za brzinu.