GPU Relighting systém pro studii usability

Úvod do problematiky, cíle projektu

Cílem této semestrální práce je vytvořit rychlou a robustní implementaci relighting systému (systém umožňující interaktivní změnu osvětlení v již vyrenderované scéně) s GI (global illumination - globální osvětlení), které bude následně využita pro studii použitelnosti. V této studii bude systém používán laiky pro nasvěcování interiérových a exteriérových scén. Cílem je zodpovědět několik otázek, například:

  • Dokáže laik vytvořit osvětlení jednoduchých (složitých) scén, které bude dávat stejný výsledek jako reference?
  • Dosáhnou uživatelé lepší kvality s nebo bez použití GI?
  • Dokáže uživatel předvídat dopad světel na konečnou podobu renderu?
  • Není fyzikální korektnost osvětlení s využitím GI příliš restriktivní proti běžným filmovým konfiguracím s key/fill lights?

Jedná se o pokračování studií 1) 2) 3).

Relighting systém bude vycházet z algoritmu Direct-to-indirect transfer for cinematic relighting popsaném v 4) a bude implementovaný na grafické kartě, což by mělo v ideálním případě umožnit dosáhnout interaktivní snímkové frekvence.

Projekt řeší tým ve složení: Jaroslav Křivánek (předvýpočet), Fabio Pellacini (konzultace, psaní paperu), Martin Růžička (framework a UI pro realtime aplikaci), Ondřej Karlík + Václav Gassenbauer (implementace zobrazovací části Direct-to-indirect transfer (DTIT)) a konečným cílem je vytvoření článku na konferenci Siggraph.

Rešerše

I když existuje mnoho relighting systémů, ten ze článku Direct-to-indirect transfer for cinematic relighting je unikátní svojí podporou GI. Algoritmus funguje tak, že zvolí ve scéně sadu n vzorků (gather samples), a propočítá mezi nimi vzájemný přenos energie. Výsledek se uloží do matice n×n. Pokud konvenčními metodami (např. stínové mapy) vypočítáme intenzitu přímého osvětlení na vzorcích, dokážeme touto maticí transformovat přímé osvětlení na nepřímé. Protože tato matice je ale příliš velká, je potřeba ji zkomprimovat, například pomocí ztrátové wavelet komprese. Pro zvýšení kvality se dále používá další matice, tzv. final gather matice, která transformuje vektor osvětlení na vzorcích ve scéně na vektor osvětlení na vzorcích viditelných z kamery. Tyto dvě matice se předpočítají, zkomprimují a uloží. Na tom pracuje J. Křivánek a není to součást této semestrální práce.

Uživatelské rozhraní pro manipulaci se světly má na starosti samostatná aplikace Kodiak, vyvíjená M. Růžičkou jako jeho diplomová práce. Tato aplikace také bude poskytovat framework pro zobrazování výsledků DTIT.

Použitý základní programovací jazyk je C++, kvůli jeho rychlosti a podpoře moderních programovacích konstruktů, jako je OOP, polymorfismus, šablony, atd. Jako programovací jazyk na GPU byl nakonec vybrán jazyk CG. Jde o shader jazyk od firem NVidia a Microsoft. Jeho výhodou je, že narozdíl od jazyků GLSL a HLSL podporuje jak OpenGL, tak i Direct3D. Jeho systém profilů pro kompilaci umožňuje jeden a ten samý zdrojový kód kompilovat různě podle grafické karty, na které zrovna běží, aby dosáhl vždy největšího výkonu. Důvod proč jsm se rozhodli používat shader jazyk a ne univerzální GPU jazyk jako je CUDA je právě v rychlosti: specializovaný jazyk bývá podle zkušeností řádově cca dvakrát rychlejší než univerzální CUDA.

Do aplikace vstupují předpočítané „gather samples“ (vzorky umístěné náhodně ve scéně), „view samples“ (vzorky umístěné na místech viditelných z kamery). U těchto vzorků si pamatujeme jejich polohu, normálu, difůzní odrazivost, a u view samples navíc spekulární odrazivost a spekulární koeficient (ty u gather samples nepotřebujeme, neboť u nich neuvažujeme spekulární složku). Dále načteme matice: multibounce matici, která převádí přímé osvětlení na gather samplech na nepřímé a final gather matici, která převádí přímé+nepřímé osvětlení na gather samplech na nepřímé osvětlení na gather samplech. Tyto matice jsou zkomprimované waveletovou kompresí - z každého řádku si pamatujeme jen fixní počet koeficientů

Algoritmus DTIT

Algoritmus syntézy obrazu se pak skládá z několika kroků, ve kterých manipulujeme s vektory reprezentující osvětlení na gather/view vzorcích:

  1. Vypočítáme přímé osvětlení na gather vzorcích
  2. Na toto přímé osvětlení aplikujeme waveletovou transformaci
  3. Vynásobíme mezi sebou multibounce matici a vektor přímého osvětlení (oboje je nyní transformované do waveletů), výsledkem je nepřímé osvětlení na gather vzorcích
  4. sečteme výsledky kroků 1) a 3), výsledkem je celkové osvětlení na gather vzorcích
  5. Celkové osvětlení na gather vzorcích opět waveletově transformujeme a vynásobíme s final gather maticí. Výsledkem je nepřímé osvětlení na view vzorcích
  6. Spočítáme přímé osvětlení na view vzorcích a sečteme s výsledkem minulé operace. Výsledkem je přímo finální obrázek.

Vzhledem k implementaci na GPU je přirozené jednotlivé vektory a matice reprezentovat jako textury/buffery na grafické kartě. Jako problém se jeví omezená paměť na grafické kartě. Pro realistické vykreslování složitějších scén je potřeba mít řádově milion gather vzorků. View vzorků je tolik, jaké je rozlišení obrázku (pokud použijeme supersampling, tak ještě více). Protože je třeba šetřit paměť, analyzovali jsme algoritmus a zjistili jsme, že si vystačíme se 2 RGB buffery odpovídajícím velikostí počtu gather vzorků a jedním RGB buffem velikosti view vzorků, kam se bude ukládat finální výsledek. Také jsme se snažili omezit paměťovou náročnost používáním menších datových typu (jako například half). Výsledné schéma algoritmu, které bere v potaz tyto optimalizace, je v následujícím dokumentu: karliond_dtit_schema.pdf

Přímé osvětlení

Bylo rozhodnuto, že pro testy jsou potřeba následující typy světel:

  • bodový všesměrový zdoj světla - omni light
  • bodový směrový zdroj světla - spot light
  • plošný zdroj světla - area light

Všechny druhy světel budou ve dvou variantách: key light a fill light. Key lights jsou primární zdroje světla, které mají vyšší intenzitu a vrhají stíny. Fill lights slouží k doladění osvětlení, jsou typicky difůznější, méně intenzivní, a v naší implementaci nebudou vrhat stíny. Protože nelze vždy v reálném čase uspokojivě vypočítat stíny od plošného zdroje světla, budou tyto světla v naší implementaci pouze ve variantě fill light. Pro iradianci z plošného difůzního světla, které nevrhá stíny existuje analytický vzorec pro výpočet 5)

1) Obert, J. - Křivánek, J. - Pellacini, F. - Sýkora, D. - Pattanaik, S.: iCheat: A Representation for Artistic Control of Indirect Cinematic Lighting. Computer Graphics Forum. 2008, vol. 27, no. 4, p. 1217-1224. ISSN 0167-7055.
2) Kerr, W. B. and Pellacini, F. 2009. Toward evaluating lighting design interface paradigms for novice users. ACM Trans. Graph. 28, 3 (Jul. 2009), 1-9. DOI= http://doi.acm.org/10.1145/1531326.1531332
3) Kerr, W. B. and Pellacini, F. 2010. Toward evaluating material design interface paradigms for novice users. In ACM SIGGRAPH 2010 Papers (Los Angeles, California, July 26 - 30, 2010). H. Hoppe, Ed. SIGGRAPH '10. ACM, New York, NY, 1-10. DOI= http://doi.acm.org/10.1145/1833349.1778772
4) Hašan, M., Pellacini, F., and Bala, K. 2006. Direct-to-indirect transfer for cinematic relighting. In ACM SIGGRAPH 2006 Papers (Boston, Massachusetts, July 30 - August 03, 2006). SIGGRAPH '06. ACM, New York, NY, 1089-1097. DOI= http://doi.acm.org/10.1145/1179352.1141998
5) Baum, D. R., Rushmeier, H. E., and Winget, J. M. 1989. Improving radiosity solutions through the use of analytically determined form-factors. In Proceedings of the 16th Annual Conference on Computer Graphics and interactive Techniques SIGGRAPH '89. ACM, New York, NY, 325-334. DOI= http://doi.acm.org/10.1145/74333.74367
 
a4m39mma/12.txt · Poslední úprava: 2010/12/11 12:20 (upraveno mimo DokuWiki)
 
Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí: GNU Free Documentation License 1.3
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki