Inferred lighting

Lukáš Cezner

Zadání

Naimplementujte techniku Inferred Lighting a srovnejte ji (výkonnově a vizuálně) s technikou forward rendering. Pro účely testování navrhněte reprezentativní scénu, která by měla:
  1. být plně dynamická (pohybující se světla i objekty),
  2. obsahovat průhledné i neprůhledné objekty,
  3. obsahovat velké množství světelných zdrojů s různou charakteristikou (směrovost, útlum, barva, atd.)
  4. být variablní - množství světel ve scéně bude možné měnit (měření proveďte s dostatečně velkým množstvím světelných zdrojů),

Zdroj:

Popis implementace

Základní verze využívá víceprůchodový algoritmus podobný odloženému vykreslování. Hlavním rozdílem oproti odloženému vykreslování je fakt, že výpočet osvětlení je prováděn v nižším rozlišení.

První průchod naplní G-buffer, pomocí kterého se následně druhým průchodem vypočítá osvětlení a uloží se do L-bufferu. Poslední průchod, který pracuje v plném rozlišení, znovu vykresluje geometrii scény a pomocí speciálně interpolovaných dat z G a L-bufferů dochází k výpočtu výsledné barvy fragmentů.

Navíc lze zajistit i vykreslování poloprůhledných objektů pomocí techniky prokládání, při ztrátě poloviny rozlišení.

Oproti původnímu popisu z článku je zde přidáno několik úprav se snahou o odstranění některých neduhů:

Navíc je zde implementováno dlaždicové vykreslování osvětlení, při kterém dochází k filtrování seznamu světel a následném počítání osvětlení pouze u světel, které mohou osvětlit fragmenty dané dlažice. Tohoto je docíleno pomocí výpočtu rozsahu hloubek fragmentů z prvního průchodu vykreslování a analytického výpočtu rozsahu hloubek jednotlivých světel.

Ovládání

Přepínání kamer

Ostatní

Naměřené výsledky

Forward
Inferred 25%
Forward Inferred 75% Inferred 25% Inferred 100% Inferred 75% (predepth) Inferred 75% (complex dsf) Inferred 75% (w/o light count)
Render CPU 2150.52µs 2826µs 2463.96µs 3181.99µs 5221.74µs 2924.04µs 12155.3µs
Predepth G-Buffer 596.41µs
G-Buffer Pass 1739.34µs 1395.38µs 1942.67µs 1975.7µs 1739.04µs 1713.48µs
Light Depth Scale 46.5838µs 32.3348µs 59.0694µs 47.017µs 46.7159µs
Light Count Pass 31.0538µs 22.4102µs 39.1383µs 34.7085µs 32.0594µs
Light Pass 1050.3µs 229.847µs 1709.84µs 1052.2µs 1054.84µs 9355.22µs
Predepth Material 699.995µs
Material Pass 1668.05µs 1502.94µs 1833.83µs 1565.58µs 2413.88µs 2063.01µs
Render GPU 163289µs 5142.88µs 3758.47µs 6295.97µs 6376.58µs 5942.01µs 13752.8µs

Soubory