Shadow mapping
Shadow mapping nebo shadow projection je technika používaná pro generování stínů v počítačové grafice. Uvedl ji Lance Williams roku 1978 v práci "Casting curved shadows on curved surfaces"[1].
Zda se nachází daný pixel ve stínu, nebo ne, se zjišťuje dle toho, zda je přímo viditelný z pozice světla.
Princip metody
Když se díváme z pozice světla směrem, kterým světlo svítí, pak všechny plochy objektů, které vidíme, budou osvětlené, a všechny zakryté plochy zůstanou ve stínu. Tohoto faktu využívá metoda shadow mapping. Nejdříve je scéna vykreslena z pohledu světla a do textury se uloží hloubka každého pixelu z tohoto pohledu. Tyto hodnoty jsou zapsány do tzv. shadow mapy. Během finálního vykreslování scény je každý pixel nejdříve transformován do tzv. "light space" (stejný prostor, v kterém byla vykreslena shadow mapa), a zde je hloubka pixelu porovnána s hloubkou uloženou v shadow mapě.
Metoda pak byla a je dále vylepšována. K jejím variantám patří:
Dělení pohledového tělesa
Pro stíny vrhané slunečním svitem se často používají metody, jež rozdělují pohled pozorovatele na menší části. Tyto techniky umožňují lépe využít prostor v shadow mapě. Pokud bychom použili na celou hloubku scény jednu shadow mapu, budou její texely, které reprezentují prostor u pozorovatele, výsledně odpovídat většímu počtu pixelů na monitoru, než tomu budu u texelů, jež se použijí pro stínování vzdálenějších částí scény.
Kaskádový shadow mapping
Kaskádové shadow mapy[2] byly představeny společností NVidia v roce 2007. Hlavní změnou v této metodě je, že před vykreslením shadow mapy je pohledové těleso rozděleno na několik částí dle hloubky, a následně je vykreslena shadow mapa pro každou část zvlášť. Až během finálního stínování scény se rozhodne, ve které kaskádě stínovaný fragment leží, a pak se použije příslušná shadow mapa.
Paralel-split shadow maps
Paralel-split shadow maps[3] řeší způsob, jakým je scéna dělena do jednotlivých kaskád shadow mapy. Pohledové těleso je rozděleno dle vhodné heuristiky. Ať už uniformně (celá hloubka je rozdělena pravidelně), logaritmicky nebo v jejich kombinaci, což se doporučuje.
Sample distribution Shadow Maps
Sample distribution Shadow Maps[4] je technika, jež vylepšuje způsob, jakým je děleno pohledové těleso. K tomu používá informaci z předchozího z-bufferu. Nejdříve se analyzuje rozložení hloubek povrchů ve směru od kamery. Poté se pohledové těleso rozdělí pomocí logaritmické heuristiky.
Tato technika si klade za cíl lepší využití prostoru v texturách shadow map. Například při běžném uniformním rozdělení scény dle hloubky se může stát, že z některé kaskády shadow map nebude nakonec využit žádný pixel. Toto se může stát v případech, kdy v těchto hloubkách není žádný objekt, který by bylo potřeba stínovat.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Shadow mapping na anglické Wikipedii.
- Lance Williams. Casting curved shadows on curved surfaces. cseweb.ucsd.edu. Dostupné online [cit. 2020-12-22]. DOI 10.1145/965139.807402. (anglicky)
- Rouslan Dimitrov. Cascaded Shadow Maps. developer.download.nvidia.com. August 2007. Dostupné online [cit. 2020-12-23]. (anglicky)
- Fan Zhang; HANQIU SUN; LEILEI XU; LEE KIT LUN. Parallel-split shadow maps for large-scale virtual environments. www.researchgate.net. January 2006. Dostupné online [cit. 2020-12-23]. DOI 10.1145/1128923.1128975. (anglicky)
- Andrew Lauritzen; MARCO SALVI; AARON LEFOHN. Sample distribution Shadow Maps. www.researchgate.net. January 2011. Dostupné online [cit. 2020-12-23]. DOI 10.1145/1944745.1944761. (anglicky)