Odložené osvětlení a stínování , odložené vykreslování ( anglicky odložené stínování ) je softwarová technika (metoda) v trojrozměrné počítačové grafice , která řeší osvětlení a stínování vizuální scény. V důsledku činnosti algoritmu odloženého osvětlení a stínování je proces výpočtu rozdělen na menší části, které jsou zapsány do mezilehlé vyrovnávací paměti a následně spojeny. Hlavní rozdíl mezi odloženým osvětlením a stínováním a standardními metodami osvětlení je ten, že tyto metody okamžitě zapisují výsledek shaderu do barevného framebufferu. Implementace v moderním hardwaru pro zpracování grafiky mají tendenci používat více cílů vykreslení (MRT ), aby se předešlo nadbytečným transformacím vrcholů . Obvykle, jakmile jsou vytvořeny všechny potřebné vyrovnávací paměti, jsou poté načteny (obvykle jako vstupní textura) z algoritmu shaderu (jako je rovnice osvětlení) a zkombinovány za účelem vytvoření výsledku. V tomto případě se výpočetní složitost a šířka pásma paměti potřebné k vykreslení scény sníží na viditelné části, čímž se sníží složitost osvětlené scény.
Primární výhodou odloženého vykreslování je kompatibilita s „hrubým“ a „časným“ testováním Z-bufferu , další výhody ještě nebyly dostatečně prozkoumány. Tyto výhody mohou zahrnovat snadnější správu komplexních zdrojů osvětlení, snadnou správu dalších komplexních zdrojů shaderů a zjednodušení procesu vykreslování softwaru.
Jednou z klíčových nevýhod techniky odloženého vykreslování je neschopnost zvládnout průhlednost v rámci algoritmu, ačkoli tento problém je společný také pro Z-buffering; východiskem z tohoto problému je zpoždění a řazení vykreslování průhledných částí scény [1] . Dalším řešením je použití výpočetních shaderů Direct3D 11/OpenGL 4.3 k implementaci algoritmu průhlednosti nezávislé na pořadí.
Další poměrně důležitou nevýhodou odloženého vykreslování je jeho nekompatibilita s vyhlazováním . Vzhledem k tomu, že fáze osvětlení je oddělená od fáze geometrie, nevede hardwarové vyhlazování ke správným výsledkům. Ačkoli první průchod použitý při vykreslování základních vlastností (difúzní zpracování, heightmap) může používat vyhlazování, vyhlazování nelze použít pro plné osvětlení. Jednou z typických technik, jak překonat toto omezení, je metoda detekce hran ( en:edge detection ) výsledného obrazu a následné aplikování rozostření na okraje (okraje) [2] . Tato nevýhoda však byla relevantní pro Direct3D 9. V pozdějších verzích bylo možné číst a zapisovat jednotlivé vzorky textur MSAA (cíle vykreslení - v Direct3D 10, hloubkové vyrovnávací paměti - v Direct3D 10.1) To umožnilo vývojářům implementovat jejich vlastní algoritmy MSAA pro odložené osvětlení. Příklady her s odloženým osvětlením a podporou MSAA jsou Battlefield 3, Crysis 3, Grand Theft Auto V.
Technika odloženého vykreslování se stále více používá v počítačových hrách, protože umožňuje neomezený počet světel a snižuje složitost požadovaných pokynů shaderu. Konkrétně „Advanced Technology Group“, tým specialistů ze Sony Computer Entertainment , prozkoumal tuto oblast a pomáhá vývojářům integrovat tuto technologii do grafických enginů . PhyreEngine , bezplatný grafický engine vyvinutý společností Sony Computer Entertainment, má podporu pro odložené osvětlení a stínování. Příklady her využívajících odložené vykreslování a podporovaných společností Sony Computer Entertainment jsou Killzone 2 od Guerrilla Games , LittleBigPlanet od Media Molecule a inFamous od Sucker Punch Productions . Odložené-renderované hry, ke kterým společnost Sony nepřispěla, zahrnují série STALKER od GSC Game World , Dead Space od Electronic Arts [3] a Tabula Rasa od NCSoft [4] . V herním enginu CryEngine 3 Crytek je použita technologie odloženého osvětlení a stínování .
Myšlenka odloženého osvětlení a stínování byla původně představena Michaelem Deeringem ( en: Michael Deering ) a jeho kolegy [5] v článku nazvaném „The Trojúhelníkový procesor a normální vektorový shader: systém VLSI pro vysoce výkonnou grafiku“, publikovaný v roce 1988 [6] . Přestože slovo „zpožděný“ není nikde v příspěvku použito, koncept tam prezentovaný našel praktické uplatnění v aplikacích, jako jsou počítačové hry [7] .