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

Scéna zobrazená z pohledu světla.
Shadow map.

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.

  1. Lance Williams. Casting curved shadows on curved surfaces. cseweb.ucsd.edu. Dostupné online [cit. 2020-12-22]. DOI 10.1145/965139.807402. (anglicky) 
  2. Rouslan Dimitrov. Cascaded Shadow Maps. developer.download.nvidia.com. August 2007. Dostupné online [cit. 2020-12-23]. (anglicky) 
  3. 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) 
  4. 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) 

Externí odkazy

Média použitá na této stránce

2shadowmap.png
(c) Praetor alpha, CC BY-SA 3.0
praetor alpha. pass one, shadow map
1light.png
(c) Praetor alpha from en.wikipedia.org, CC BY-SA 3.0
praetor_alpha pass one, step one, shadow mapping