Co je OpenGL® Shadow?
Stín Open Graphics Library® (OpenGL®) je vizuální aproximací v trojrozměrné (3D) scéně OpenGL® toho, jak by se stín v reálném životě za podobných světelných podmínek vrhal. Stíny jsou složitou vizuální funkcí implementovanou v OpenGL®, hlavně proto, že neexistuje žádná vrozená podpora pro obsazení stínů ve scéně. Místo toho existuje celá řada technik, které lze použít k vytvoření stínů z objektů a geometrie ve scéně pomocí různých nástrojů, jako jsou různé dostupné vyrovnávací paměti, shadery a v některých případech rozšíření, která umožňují přístup ke zvláštním prvkům určité grafiky karty. Ve většině případů kvalita, přesnost a rychlost stínového vykreslování OpenGL® přímo souvisí s výkonem zpracování a pamětí grafického hardwaru přítomného v počítači nebo zařízení. Mezi populárnější metody implementace stínů OpenGL® patří svazky stínů, mapování stínů a trasování paprsků.
Vytvoření aplikace, která má podporu stínového OpenGL®, vyžaduje matematické znalosti a hluboké pochopení toho, jak OpenGL® funguje. OpenGL® se z velké části používá k vytváření 3D scén, které jsou dynamické a vykreslené v reálném čase, takže algoritmy, které se používají k vytváření stínů, musí být nejen optimalizovány pro rychlost, ale také musí být pečlivě měřeny z hlediska spotřeby zdrojů a případných narušení, které může být způsobeno v grafickém potrubí použitém pro vykreslování. Z těchto důvodů je nejzákladnější metoda vytváření stínu, nazvaná trasování paprsků, často nepraktická pro plné 3D scény, protože to může trvat velmi dlouho.
Sledování paprsků v podstatě sleduje imaginární linii nebo paprsek od zorné roviny nebo pozice kamery přes scénu k povrchu objektu a poté vypočítává barvu povrchu na základě polohy jednoho nebo více světelných zdrojů a dalších faktorů. Během procesu rasterizace, kdy je 3D scéna nakreslena na dvourozměrný (2D) povrch, aby mohl být zobrazen, musí být proces sledování paprsků prováděn na každém kresleném pixelu a zejména u textur nebo jiných vlastnosti povrchu, možná bude třeba několikrát posoudit stejné pixely. To znamená trasování paprsků v reálném čase, ačkoli by přesně vykreslovalo stíny, obvykle to není praktické.
Další metoda, kterou lze použít k vytvoření stínu OpenGL®, se nazývá stínové mapování. Tato metoda používá hloubku nebo vzorníkový buffer k vykreslení scény z úhlu světelného zdroje jako řady vzdáleností od světelného zdroje k povrchům různých objektů ve scéně. Scéna se poté podruhé vykreslí ze správného zorného úhlu a zkontroluje, zda každý pixel spadá do určité vzdálenosti v mezipaměti, což naznačuje, zda je pixel osvětlen nebo zastíněn. Použití stínového mapování může být náročné na paměť a u scén, které mají více než jeden světelný zdroj, může zahrnovat vytváření více map z více úhlů.
Stínové svazky představují způsob, jak vytvořit stín OpenGL®, který je přesnější než některé jiné metody, ale představuje své vlastní problémy. Stínový objem je v podstatě neviditelným kusem geometrie ve scéně, která se rozpíná z osvětleného povrchu předmětu mimo zdroj světla. Tento svazek lze zkontrolovat oproti jiným objektům a zjistit, zda padají do stínu plochy, ze které svazek pochází. Tento postup může být velmi složitý a při optimalizaci rychlosti může v konečném důsledku vytvářet vizuální artefakty.