Odložené stínování - Deferred shading

Difúzní barevný G-Buffer
Z-Buffer
Normální povrchový G-buffer
Konečné skládání (pro výpočet stíny zobrazené na tomto obrázku, jiné techniky, jako je stín mapování , stínových čidly nebo Stínová musí být použit spolu s odložené stínování).

V oblasti 3D počítačové grafiky , odložené stínování je obrazovka-space stínící technika, která se provádí na druhém rendering průchodu po vertex a pixel shadery jsou poskytovány. Poprvé to navrhl Michael Deering v roce 1988.

Při prvním průchodu odloženého shaderu se shromáždí pouze data, která jsou požadována pro výpočet stínování. Pozice, normály a materiály pro každý povrch se vykreslují do vyrovnávací paměti geometrie ( G-buffer ) pomocí „ vykreslení na texturu “. Poté shader pixelů vypočítá přímé a nepřímé osvětlení na každém pixelu pomocí informací o vyrovnávacích pamětí textury v prostoru obrazovky .

Směrová okluze v prostoru obrazovky může být součástí odloženého stínovacího kanálu, aby byla zajištěna směrovost stínů a interreflexí.

Výhody

Hlavní výhodou odloženého stínování je oddělení geometrie scény od osvětlení. Je vyžadován pouze jeden průchod geometrie a každé světlo je počítáno pouze pro ty pixely, které ve skutečnosti ovlivňuje. To dává schopnost vykreslit mnoho světel ve scéně bez výrazného zásahu do výkonu. Pro tento přístup jsou nárokovány další výhody. Mezi tyto výhody může patřit jednodušší správa komplexních zdrojů osvětlení, snadná správa dalších komplexních zdrojů shaderu a zjednodušení kanálu vykreslování softwaru.

Nevýhody

Jednou z klíčových nevýhod odloženého vykreslování je neschopnost zpracovávat průhlednost v rámci algoritmu, ačkoli tento problém je obecný ve scénách s vyrovnávací pamětí Z a má tendenci být řešen zpožděním a tříděním vykreslení průhledných částí scény. Hloubkový peeling lze použít k dosažení transparentnosti nezávislé na pořadí v odloženém vykreslování, ale za cenu dalších dávek a velikosti g-bufferu. Moderní hardware podporující DirectX 10 a novější je často schopen provádět dávky dostatečně rychle, aby udržel interaktivní snímkovou frekvenci. Pokud je požadována transparentnost nezávislá na objednávce (běžně pro spotřebitelské aplikace), není odložené stínování o nic méně efektivní než dopředné stínování pomocí stejné techniky.

Další vážnou nevýhodou je obtížnost používání více materiálů. Je možné použít mnoho různých materiálů, ale vyžaduje to, aby bylo více dat uloženo v G-bufferu, který je již poměrně velký a zabírá velké množství šířky pásma paměti.

Další nevýhodou je, že díky oddělení fáze osvětlení od fáze geometrické již hardwarové vyhlazování neprodukuje správné výsledky, protože interpolované dílčí vzorky by vedly k nesmyslným atributům polohy, normálu a tečny. Jednou z obvyklých technik, jak překonat toto omezení, je použití detekce hran na finálním obrazu a následné aplikace rozostření přes okraje, nicméně v poslední době byly vyvinuty pokročilejší techniky vyhlazování hran po zpracování, jako je MLAA (používá se v Killzone 3 a Dragon Age II , mimo jiné), FXAA (používá se v Crysis 2 , FEAR 3 , Duke Nukem Forever ), SRAA , DLAA (používá se ve Star Wars: The Force Unleashed II ) a post MSAA (používá se v Crysis 2 jako výchozí vyhlazování) řešení). Ačkoli se nejedná o techniku ​​vyhlazování hran, dočasné vyhlazování hran (používané v Halo Reach a Unreal Engine ) může také pomoci dát hranám hladší vzhled. DirectX 10 představil funkce umožňující shaderům přístup k jednotlivým vzorkům v cílech vykreslení s více vzorky (a hloubkových vyrovnávacích pamětí ve verzi 10.1), což uživatelům tohoto API umožňuje přístup k hardwarovému vyhlazování v odloženém stínování. Tyto funkce jim také umožňují správně aplikovat mapování jasu HDR na vyhlazené hrany, kde v dřívějších verzích API mohla být ztracena jakákoli výhoda vyhlazování.

Odložené osvětlení

Odložené osvětlení (známé také jako Light Pre-Pass) je modifikací odloženého stínování. Tato technika používá tři průchody, místo dvou v odloženém stínování. Při prvním průchodu geometrií scény se do vyrovnávací paměti barev zapíší pouze normály a faktor zrcadlového rozpětí. „Odložený“ průchod prostorem na obrazovce poté samostatně shromažďuje difuzní a zrcadlové údaje o osvětlení, takže je třeba provést poslední průchod přes geometrii scény, aby se vytvořil výsledný obraz se stínováním po pixelech. Zdánlivou výhodou odloženého osvětlení je dramatické zmenšení velikosti G-bufferu. Zjevnou cenou je potřeba vykreslit geometrii scény dvakrát místo jednou. Dodatečné náklady spočívají v tom, že odložený průchod v odloženém osvětlení musí vydávat samostatně difuzní a zrcadlové záření, zatímco odložený průchod v odloženém stínění vyžaduje pouze jedinou kombinovanou hodnotu záření.

Kvůli zmenšení velikosti G-bufferu může tato technika částečně překonat jednu vážnou nevýhodu odloženého stínování - více materiálů. Dalším problémem, který lze vyřešit, je MSAA. Odložené osvětlení lze použít s MSAA na hardwaru DirectX 9.

Odložené osvětlení v komerčních hrách

Použití této techniky se ve videohrách zvýšilo kvůli ovládacímu prvku, který umožňuje, pokud jde o použití velkého množství dynamických světel a snížení složitosti požadovaných shaderových pokynů. Některé příklady her využívajících odložené osvětlení jsou:

Odložené stínování v komerčních hrách

Ve srovnání s odloženým osvětlením není tato technika příliš populární kvůli vysoké velikosti paměti a požadavkům na šířku pásma, zejména na konzolách sedmé generace, kde je velikost grafické paměti a šířka pásma omezená a často úzká.

Herní enginy s odloženými technikami stínování nebo vykreslování

Dějiny

Myšlenku odloženého stínování původně představil Michael Deering a jeho kolegové v článku publikovaném v roce 1988 s názvem The triangle processor and normal vector shader: a VLSI system for high performance graphics . Ačkoli článek nikdy nepoužívá slovo „odloženo“, je představen klíčový koncept; každý pixel je po hloubkovém rozlišení stínován pouze jednou. Odložené stínování, jak ho dnes známe, pomocí G-pufrů, představili v článku Saito a Takahashi v roce 1990, i když také nepoužívají slovo „odloženo“. První odloženou stínovanou videohrou byl Shrek , titul pro Xbox vydaný v roce 2001. Kolem roku 2004 se začaly objevovat implementace na komoditním grafickém hardwaru. Tato technika si později získala oblibu u aplikací, jako jsou videohry , a nakonec se stala mainstreamem kolem let 2008 až 2010.

Reference