Analytický model pro rozptyl světla v mlze. Jan Ondřej

Rozměr: px
Začít zobrazení ze stránky:

Download "Analytický model pro rozptyl světla v mlze. Jan Ondřej"

Transkript

1 České vysoké učení technické v Praze Fakulta elektrotechnická Diplomová práce Analytický model pro rozptyl světla v mlze Jan Ondřej Vedoucí práce: Ing. Jaroslav Křivánek, Ph.D. Studijní program: Elektrotechnika a informatika dobíhající magisterský Obor: Informatika a výpočetní technika leden 2007

2

3 Poděkování Na tomto místě chci poděkovat Jaroslavu Křivánkovi za odborné vedení, cenné připomínky a trpělivost při tvorbě této práce. Dále bych rád poděkoval rodině a přátelům za morální podporu a užitečné rady. iii

4

5 Prohlášení Prohlašuji, že jsem svou diplomovou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne v

6

7 Abstract In this work I present an analytical model for single scattering in participating media. This model is suitable for spotlights with piece-wise constant intensity dependence on angle. I start from an existing method, which is working for point lights [32], and extend it so that it works with spotlights. The transport equation have several analytic terms and few 2D table lookups. I implemented the final algorithm as a fragment shader in programmable graphics processing unit (GPU) and stored the tables as 2D textures. I achieve real-time framerate. The algorithm is linearly dependent on the number of spotlights and also on the resolution of the image. The implementation as a shader makes it possible to use my algorithm in current interactive applications without major modification of the rendering engine architecture. Abstrakt V této práce prezentuji analytický model pro rozptyl světla v opticky aktivním prostředí. Tento model je určen pro bodová světla typu reflektor s po částech konstantní závislostí intenzity na úhlu. Použil jsem existující metodu fungující pro bodová světla s konstantní intenzitou (point light) [32] a rozšířil jsem ji tak, aby fungovala i pro reflektor (spotlight). Transportní rovnice je vyjádřena několika analytickými členy a zbylé integrály jsou předpočítané ve formě 2D tabulek. Výsledný algoritmus jsem poté implementoval jako stínovací program (angl. shader) v GPU a předpočítané tabulky jsem uložil ve formě 2D textur. Tím jsem dosáhl interaktivní rychlosti vykreslení scény, která je lineárně závislá na počtu světel ve scéně. Implementace ve formě stínovacího programu umožňuje, s malými úpravami vykreslovacího řetězce, použití tohoto algoritmu ve stávajících interaktivních aplikacích. vii

8

9 Obsah 1 Úvod 1 2 Předchozí práce 4 3 Teorie Obecný základ Model pro single scattering Airlight integrál Vliv rozptylu na povrch objektu Implementace 16 5 Výsledky 20 6 Závěr 28 7 Seznam literatury 29 A Obsah přiloženého CD 33 ix

10

11 Seznam obrázků 1.1 Příklad scény s mlhou a bez mlhy Postup světla opticky aktivním prostředím Scéna ulice v mlze Obrázek auta v mlze Jevy vznikající při průchodu paprsku opticky aktivním prostředím Příklad dvou typů fázové funkce Ilustrace k integrální transportní rovnici Světlo se závislostí intenzity na úhlu Popis označení v obrázku Diagram postupu světla médiem Graf funkce F(u,v) Popis označení v obrázku Diagram popisující dopadající světlo na povrch objektu v médiu Graf funkce G 0 (u, v) a G 20 (u, v) Zdrojový kód funkce IntersectionPoints() Zdrojový kód funkcí pro výpočet osvětlení podle rovnice Zdrojový kód vstupní funkce main() Snímky zachycující scénu s různou hustotou mlhy Vliv rozptylu na difúzní složku Vliv rozptylu na zrcadlovu složku Porovnání mého modelu a modelu z článku [32] Světla z obrázku 5.4 použitá v jedné scéně Závislost počtu snímků za sekundu na rozlišení snímku (Graf k tabulce 5.2) Snímky s několika reflektorovými světly s různou hustotou mlhy Několik pohledů na scénu s autem xi

12

13 KAPITOLA 1. ÚVOD 1 1 Úvod Pro realistické zobrazení scény s opticky aktivním prostředím, jako například mlha, kouř, mraky, je potřeba simulovat náročné fyzikální a optické efekty. Mezi důležité efekty patří rozptyl světla. Ten nastává při průchodu světla aktivním prostředím jako je mlha nebo kouř. Mezi hlavní projevy tohoto efektu patří záře kolem světelných zdrojů, rozostření odrazů na lesklých plochách, zjemnění stínů a osvětlení tmavých oblastí. Přidáním těchto efektů do scény se značně přiblížíme skutečnosti a je mnoho aplikací, které je potřebují. Oblasti, ve kterých se jich využívá jsou například hry a virtuální realita, vojenské účely nebo aplikace pro výuku řidičů [30]. Bohužel je simulace těchto efektů náročná na výpočet a je potřeba si vybrat mezi kvalitou nebo rychlostí. Pro zobrazení ve vysoké kvalitě existuje několik metod Monte Carlo a konečných prvků [13, 22, 18, 9, 19]. Tyto metody mohou simulovat velice komplexní a náročné efekty, jsou ale velmi pomalé a vykreslení scény může trvat i několik hodin. Na rozdíl od předešlých metod existují metody, které běží v reálném čase, ale scéna vykreslená pomocí nich zdaleka nezobrazuje všechny efekty způsobené rozptylem světla. Tyto metody simulují jen jeden nebo několik málo efektů popsaných výše. Nejjednodušší způsob, jak simulovat mlhu, je zahrnout pouze útlum světla způsobený několikanásobným rozptylem v závislosti na vzdálenosti světla od pozorovatele. Takto je například implementována mlha v OpenGL, která se počítá automaticky na grafické kartě. Obrázek 1.1: Na obrázcích je vidět scéna s reflektorem. Nalevo je scéna bez mlhy, napravo je potom tato scéna v mlze vykreslená modelem z této práce. S rozvojem programovatelných grafických akcelerátorů se podařilo výrazně zvýšit kvalitu zobrazované scény, přidáním efektů, které nebylo dříve možné v reálném čase zobrazit. Bohužel ani díky tomu nelze dnes úplný model rozptylu světla v interaktivních aplikacích použít. Proto se hledají jednodušší modely, které by byly interaktivní a z úplného modelu zobrazily co možná nejvíce efektů. V poslední době se objevilo několik

14 2 KAPITOLA 1. ÚVOD modelů [4, 32, 33], které úspěšně implementovaly zjednodušený rozptyl světla, a umožnily v reálném čase zobrazit komplexní scény. V této práci se budu zabývat zjednodušeným modelem rozptylu světla, kde budu brát v úvahu pouze paprsek světla, který se po prvním rozptylu odrazí přímo do kamery (Obrázek 1.2). Tento model je pouze aproximací úplného modelu, ale ve spoustě situací je dostatečný a pro nízké hodnoty koeficientu rozptylu (řídká mlha) i poměrně přesný [32]. Na obrázku 1.2 je vidět několik důležitých jevů, které vznikají při průchodu světla opticky aktivním prostředím, a je třeba brát je v úvahu i pro výše uvedený zjednodušený model. Obrázek 1.2(a) zobrazuje scénu, kde žádný rozptyl nenastává. Světlo putuje ze zdroje nebo od objektu k pozorovateli přímo, nastává pouze útlum na základě vzdálenosti od pozorovatele. Toto je způsob výpočtu mlhy v OpenGL. Obrázek 1.2(b) představuje jeden z nejdůležitějších a nejviditelnějších jevů, které nastávají. Tím je záře kolem zdroje světla (glow), která vzniká dopadem světla do oka pozorovatele z různých směrů. To je zapřičiněno alespoň jedním rozptýlením světla mezi zdrojem a pozorovatelem. Toto nastává i mezi zdrojem světla a povrchem objektu (Obrázek 1.2(c)). V tomto případě se světlo rozptýlí a rozostří se zrcadlové a lesklé odrazy na povrchu objektu. Dalším důsledkem je zesvětlení tmavých částí objektu, které nejsou osvětleny přímo. Poslední obrázek 1.2(d) přidává ještě rozptyl světla odraženého od povrchu objektu, což způsobí snížení intenzity odraženého světla, a zesvětlení a rozmazání objektu. (a) (b) (c) (d) Obrázek 1.2: Diagramy ukazují, jak světlo putuje skrz opticky aktivní prostředí k pozorovateli.

15 KAPITOLA 1. ÚVOD 3 V článku [32] uvedli autoři model, který odpovídá obrázku 1.2(c), ale omezili se pouze na izotropní bodové světlo (intenzita stejná ve všech směrech). Dalšími omezeními byl předpoklad homogenního prostředí a neuvažování volumetrických stínů. Tato práce z něho vychází a rozšiřuje ho o možnost použití světel s po částech konstantní úhlovou závislostí intenzity. Přínosem této práce je: Analytický model rozptylu světla v mlze pro reflektor: Běžný výpočet rozptylu světla je založen na numerickém sčítání příspěvků jasu podél paprsku, to je ale stále velice pomalé. V článku [32] se toto podařilo vyřešit pro bodová světla, ale pro výpočet reflektoru (spotlight) zatím podobné řešení není. Přínosem této práce je rozšíření tohoto modelu právě pro reflektorová světla v homogením isotropním prostředí. Hardwarová implementace: Tento model je stejně jako v [32] implementován s využitím programovatelných grafických akcelerátorů. To se podařilo zjednodušením integrálu na řadu jednoduchých analytických rovnic a několika 2D funkcí, které se dají předpočítat do tabulky. Výsledný algoritmus lze implementovat v podobě stínovacího programu s několika přístupy do 2D textur, ve kterých jsou uloženy předpočítané 2D funkce. Cílem této práce je navrhnout algoritmus, který bude umožňovat zobrazení scény s aktivním prostředím a se světly, která mají po částech konstantní závislost intenzity na úhlu (reflektor), při zachování interaktivní rychlosti. Abych toho dosáhl, omezil jsem se na homogenní prostředí, při rozptylu světla beru v úvahu model zobrazený na obrázku 1.2(c) a neuvažuji volumetrické stíny. Díky implementaci jako stínovací program se dá moje metoda začlenit do většiny aplikací bez větších změn v jejich architektuře. S intenzivním využitím grafického hardwaru a s nízkými nároky na texturovací paměť je moje metoda schopna zobrazovat komplexní scénu ve vysokém rozlišení při zachování vysokého počtu snímků za sekundu, a dá se tak využít i v interaktivních aplikacích (Obrázek 1.1). Kapitola 2 popisuje některé práce, které se zabývají simulováním efektů v otpicky aktivním prostředí, ve 3 kapitole je popsána teorie k šíření světla v opticky aktivním prostředí a je zde také představeno mé rozšíření metody z [32], 4 kapitola je o implementaci mé metody v podobě stínovacího programu a v 5. kapitole je zhodnocení a na příkladech jsou ukázány efekty, které má metoda simuluje.

16 4 KAPITOLA 2. PŘEDCHOZÍ PRÁCE 2 Předchozí práce Simulace průchodu světla opticky aktivním prostředím je již dlouhá léta výzvou a je o ní napsáno mnoho literatury. Tuto literaturu lze rozdělit na metody simulující efekty, které vznikají při mnohonásobném rozptylu světla (multiple scattering), a na ty, co se omezují pouze na první rozptyl (single scattering). Prvním kdo se zabýval simulací rozptylu světla v médiu byl v roce 1982 Blinn [2]. Na něho poté v následujících letech navázali další, kteří se v převážné většině zabývali prvním typem metod. Komplexní přehled všech metod je popsán v článku [3]. Výpočet mnohonásobného rozptylu světla vytváří úžasné a skutečně vypadající efekty a metody jeho výpočtu lze rozdělit na deterministické (založené na numerickém výpočtu) [13, 18, 31, 25, 27, 28] a stochastické (využívají náhodného vzorkování) [1, 24, 23, 5, 10, 16] (Obrázek 2.2). Díky jejich vysokému realismu je jejich výpočet časově náročný a vykreslení jedné scény může trvat i několik hodin. Tyto metody nejsou pro potřeby interaktivních aplikací použitelné. Proto se hned zpočátku objevily také metody, které vyšetřují pouze první rozptyl světla [22, 15, 17] (Obrázek 2.1). Obrázek 2.1: Scéna ulice v mlze z [22]. S vývojem programovatelných grafických akcelerátorů se objevily metody, které značně urychlují numerické výpočty. Přestože některé z těchto metod značně snížily čas výpočtu vykreslení snímku, nejsou tyto metody vhodné pro všechny typy interaktivních aplikací, jako například hry. V článku [4] je představena metoda založená na víceprůchodovém vykreslení scény, která používá grafický hardware pro sčítání příspěvků radiance po rovinách, podobně jako v objemovém vykreslování. Tyto metody jsou většinou zaměřeny pouze na určitý typ efektů, jako jsou mraky, a mohou tak využít předpočítání některých parametrů prostředí a víceprůchodových technik. Díky tomu mohou tyto metody vykreslovat neizotropní nebo nehomogenní prostředí [4, 7, 12]. Tyto metody mají ale většinou i svá omezení, jako jsou například nepohyblivá světla. Dále také často využívají 3D textury pro rozmístění média v prostoru a kvalita snímku je pak

17 KAPITOLA 2. PŘEDCHOZÍ PRÁCE 5 Obrázek 2.2: Auto bez mlhy (vlevo) a v mlze (vpravo) z [16]. závislá na jejich rozlišení. Dalším způsobem jak rychle vykreslit scénu s opticky aktivním prostředím je nalezení analytického modelu. Objevilo se několik metod zabývajících se podpovrchovým rozptylem [6, 11]. Tyto modely jsou ale omezeny předpokladem, že je světlo a pozorovatel mimo médium a nejsou proto použitelné pro mlhu nebo kouř, kde se obvykle pozorovatel i světelný zdroj nacházejí uvnitř média. Podobně jsou na tom i analytické modely pro rozpyl světla na obloze [26, 8, 20]. Existují také analytické modely pro záři kolem bodových světelných zdrojů (airlight) v homogenním prostředí [21, 33, 32]. Díky těmto metodám může být tento efekt použit v interaktivních aplikacích. Některé z těchto metod mají ale svá omezení. Metoda v [21] není úplně korektní pro objekty uvnitř média a pro řídkou mlhu, metoda z článku [33] používá pro rozptyl polynomiální aproximaci, což generuje nepřesné výsledky v blízkosti světel. Analytický model z [32] tyto problémy nemá a navíc zahrnuje vliv rozptýleného světla na porvch objektů. Proto byl tento model nejvhodnější jako výchozí metoda pro hledání analytického modelu pro bodová světla se závislostí intenzity na úhlu.

18 6 KAPITOLA 3. TEORIE 3 Teorie V této části nejdříve popíšu a vysvětlím diferenciální a integrální transportní rovnici, která popisuje interakci světla s opticky aktivním prostředím. Poté se budu zabývat přímým rozptylem světla v médiu a nakonec vlivem rozptylu světla na odchozí radianci objektu. 3.1 Obecný základ Při průchodu světla opticky aktivním prostředím vzniká několik jevů, které je třeba brát v úvahu. Je to absorbce, záření a rozptyl (Obrázek 3.1). Absorbce nastává při přeměně světelné energie na jiný druh energie, jako je například teplo. Obvykle se označuje koeficientem K a (x). Dalším jevem je záření (emise) K e (x). To musíme brát v úvahu, pokud bod x spontánně vyzařuje světelnou energii. Posledním z výše popsané trojice je rozptyl světla. Ten nastává při dopadu světla na částici v médiu, kdy část světelné energie změní svůj směr. Koeficient K s (x) udává, jak veliké množství příchozí energie se rozptýlí do jiných směrů. Při výpočtu energie, které se dostane až k pozorovateli, rozdělujeme rozptyl na dvě části. První způsobuje úbytek energie (out-scattering) pro daný směr paprsku. V druhém případě k výsledné energii přispívá kladně rozptyl (inscattering) ostatních paprsků od ostatních bodů v médiu. Obrázek 3.1: Jevy vznikající při průchodu paprsku opticky aktivním prostředím. S využitím výše popsaných jevů můžeme vyjádřit změnu energie v okolí nějakého bodu x ve směru ω o jako diferenciální rovnici, která se nazývá transportní rovnice. dl(x, ω o ) dx = k a (x)l e (x, ω o ) k t L(x, ω o ) + k s(x) 4π Ω L(x, ω o )p(ω o, ω i )dσ ωi, (3.1) kde L e (x, ω o ) je vyzářená radiance, k t = k s +k a je extinkční koeficient, a p(ω o, ω i ) je fázová funkce, která určuje jakým způsobem se světlo v opticky aktivním prostředí rozptyluje. Obrázek 3.2 ukazuje několik případů těchto funkcí. Transportní rovnice 3.1 se dá rozložit na tři části. První člen k a (x)l e (x, ω o ) v rovnici představuje vyzářenou radianci v bodě x ve směru ω o, prostřední člen určuje ztrátu

19 KAPITOLA 3. TEORIE 7 Obrázek 3.2: Příklad dvou typů fázové funkce. Vlevo pro malé částice, vpravo pro velké. energie pohlcením a rozptylem (out-scattering), poslední člen udává přírůstek energie, který je způsoben okolním rozptýleným světlem odraženým do směru ω o (in-scattering). Pojmenujme si J(x, ω o ) část, která k výsledné radianci přispívá kladně. Pak, kde Ω(x) = k s k t rovnici: J(x, ω o ) = (1 Ω(x))L e (x, ω o ) + Ω(x) 4π Ω L(x, ω o )p(ω o, ω i )dσ ωi, (3.2) je takzvaný albedo koeficient. Integrací rovnice 3.2 dostaneme následující Obrázek 3.3: Integrální transportní rovnice. Radiance L(x) v bodě x je součtem absorbované radiance τ(x 0, x)l(x 0 ) a radiance z média. L(x, ω o ) = L ri + L m = τ(x 0, x)l(x 0, ω o ) + x x 0 τ(u, x)k t (u)j(u, ω o )du. (3.3) kde τ(x 0, x) = e x x 0 k t(u)du je činitel prostupu. Bod x0 je bod na prvním povrchu mimo aktivní prostředí, ve směru ω o, a L ri pak představuje radianci pocházející z toho bodu. L m je potom radiance přicházející od bodů uvnitř media (Obrázek 3.3). Radiance uvnitř média J(x) se dá rozložit do tří členů, na vlastní záření média, na radianci vzniklou při prvním rozptylu (single scattering) a na rozptyl radiance uvnitř

20 8 KAPITOLA 3. TEORIE média (multiple scattering). J(x, ω o ) = J e (x, ω o ) + Ω(x) 4π Ω L ri (x, ω i )p(ω o, ω i )dσ ωi + Ω(x) 4π Ω L m (x, ω i )p(ω o, ω i )dσ ωi, (3.4) Zjednodušené modely, které berou při rozptylu v úvahu pouze první rozptyl, neuvažují o vícenásobných rozptylech uvnitř média, tj. zanedbávají třetí člen. 3.2 Model pro single scattering V této a následujících podkapitolách se již budu zabývat pouze modelem pro single scattering. Hlavně se zaměřím na přírůstek energie způsobený rozptylem v opticky aktivním prostředí, protože výpočet absorbce, emise, a úbytku energie rozptylem je poměrně jednoduchý. Aby se podařilo zjednodušit integrál z rovnice 3.4 je potřeba přijmout několik omezení. Důležitým předpokladem je omezení se pouze na homogenní prostředí, které se nachází v celé scéně. V homogenním prostředí jsou totiž koeficienty prostředí všude stejné. Pro jednoduchost omezíme ještě fázovou funkci p(ω o, ω i ) na isotropní. Zde ale není problém použít i jiné fázové funkce, podobně jako v [32, 33]. Dále provedeme omezení u použitého světla. Zde budu uvažovat pouze reflektorová světla (spotlight), která mají v závislosti na úhlu intenzitu světla po částech konstantní. Pokud vezmeme v úvahu všechny příspěvky k radianci podél pohledového paprsku a omezíme se na model z obrázku 1.2(c), dostaneme v místě pozorovatel O radianci L odpovídající následující rovnici. L(O) = L a ( OP ) + L p (P )e KtOP (3.5) První člen představuje radianci získanou prvním rozptylem světla v opticky aktivním prostředí (single scattering) a simuluje záři kolem reflektoru. Ta je závislá na vzdálenosti světla od pozorovatele a na optické hustotě média. Pro bodové světlo se tato radiance vyšetřuje mezi pozorovatelem O a bodem P na povrchu objektu. U reflektoru se stačí omezit na body uvnitř osvětleného kužele, protože vně tohoto kužele je příspěvek k radianci nulový (Obrázek 3.4). Druhý člen je potom radiance odražená od objektu v bodě P, která je zmenšená o absorbci a rozptyl. Ten zjemňuje a rozostřuje zrcadlové odrazy a přispívá k zesvětlování tmavých částí scény. To je vyjádřeno následující rovnicí: L p (P ) = L p,a (P ) + L p,d (P )e KtSP (3.6) kde L p,a (P ) je radiance dopadající na objekt v bodě P, která je podobná jako radiance L a z rovnice 3.5, ale získaná mezi zdrojem světla S a bodem na povrchu objektu P. Druhý člen je radiance přímého osvětlovacího modelu, jako je například Phongův model, která je opět zmenšená o absorbci a rozptyl. Členy, které nelze v rovnicích 3.5 a 3.6 analyticky spočítat, jsou příspěveky k radianci od rozptýleného světla v médiu L a ( OP ) a L p,a (P ). Jimi se budeme v následujících dvou kapitolách zabývat.

21 KAPITOLA 3. TEORIE 9 Obrázek 3.4: Světlo se závislostí intenzity na úhlu. 3.3 Airlight integrál Integrál, který se skrývá pod prvním členem z rovnice 3.5, a je zjednodušenou verzí rovnice 3.3, si přepíšeme do následující podoby: L a = P O k t p(α) I(θ)e ktd d 2 e ktx dx (3.7) Protože budeme uvažovat pouze světlo typu reflektor, můžeme, jak už bylo výše zmíněno, přepsat tento integrál na následující tvar podle obrázku 3.4 a 3.6. L a = B A k t p(α) I(θ)e k td b e ktx dx = k d 2 t p(α) I(θ)e k td e ktx dx (3.8) a d 2 Protože je příspěvek k výsledné radianci mezi body O,A a B,P nulový, upřesnil jsem v předchozí rovnici meze integrálu O a P na A a B. Tyto body vzniknou, když pohledový paprsek protne kužel reflektoru. Pokud leží bod A za pozorovatelem dosadí se místo průsečíku A bod O, obdobně pokud je objekt viditélný podél pohledového paprsku uvnitř světelného kužele, nahradí se průsečíku B bodem P. Protože uvažujeme intenzitu světla I(θ) konstantní v závislosti na úhlu, můžeme za ni dosadit I 0. Výše jsem také uvedl, že budu uvažovat isotropní prostředí, a můžu tedy po normalizaci za p(α) dosadit 1 4π (v izotropním prostředí je fázová funkce konstantní a p(α) = 1 ). Nyní dostáváme rovnici: 4π L a = I 0k t 4π b e k td a d 2 e ktx dx (3.9) Rovnice 3.9 stále závisí na 4 parametrech, ale nyní ji již postačuje upravit podle [32, 33]. Cílem je rodělit tuto rovnici na dvě nezávislé části, kde první budou analytické rovnice a druhá část bude integrál, který bude záviset pouze na jednom parametru

22 10 KAPITOLA 3. TEORIE O, P, S označují pozorovatele, bod na povrchu objektu a zdroj světla A, B průsečíky pohledového paprsku s kuželem světla a vzdálenost k bližšímu průsečíku pohledového paprsku s kuželem světla b vzdálenost k vzdálenějšímu průsečíku pohledového paprsku s kuželem světla d vzdálenost mezi světlem a místem prvního rozptylu h vzdálenost mezi světlem a místem prvního rozptylu pro α = π 2 l vzdálenost mezi zdrojem světla a pozorovatelem m vzdálenost k prvnímu objektu t vzdálenost mezi místem prvního rozptylu a pozorovatelem pro α = π 2 x vzdálenost mezi místem prvního rozptylu a pozorovatelem I(θ) intenzita světla α úhel rozptylu β úhel mezi aktuálně vyšetřovaným paprskem světla a h φ úhel mezi směrem k světlu a směre pohledu θ úhel mezi směrem reflektoru a aktuálně vyšetřovaným paprskem světla Obrázek 3.5: Popis označení v obrázku 3.6. nezávislém na koeficientech prostředí a půjde předpočítat do tabulky. Proto nyní dosadím za x: x = t + h tan β, kde h = l sin φ a t = l cos φ jsou geometrické parametry a jsou během integrace konstantní. Také se podle toho upraví meze na γ a = arctan a t h, a dostanu následující rovnici: γ b = arctan b t h, L a = I 0k t e ktt 4π γb γ a e ktd h d 2 cos 2 β e k th tan β dβ (3.10) Předchozí rovnice lze dále zjednodušit dosazením za d: d = L = I 0k t e ktt 4πh h cos β γb Ještě se provede menší úprava, když se za β dosadí γ a e k sin β+1 th cosβ dβ (3.11) β = 2η π 2

23 KAPITOLA 3. TEORIE 11 Obrázek 3.6: Diagram ukazuje jak světlo putuje od zdroje k pozorovateli a přitom se v médiu jednou rozptýlí. a meze se upraví do tvaru: γ a = π arctan a t h γ b = π arctan b t h Následující rovnice je již v konečné podobě: (3.12) L a = I 0k t e ktt 2πh γb γ a e kth tan η dη = A 0 γb γ a e A 1 tan η dη (3.13) Nyní mám rovnici, kde je integrál závislý pouze na jednom parametru, a tím je A 1 (Rovnice 3.15). Navíc je A 1 během výpočtu konstantní. Druhou část rovnice pak tvoří analytický člen A 0 (Rovnice 3.14). A 0 (h, t, k t ) = I 0k t e ktt 2πh Nyní si můžu integrál zapsat jako funkci dvou proměnných: (3.14) A 1 (h, k t ) = k t h (3.15) F (u, v) = v 0 e u tan ζ dζ (3.16) Pro funkci F (u, v) neexistuje jednoduchý analytický výraz, ale lze si ji předpočítat do 2D tabulky. Průběh funkce F (u, v) lze vidět na obrázku 3.7. S využitím této možnosti

24 12 KAPITOLA 3. TEORIE Obrázek 3.7: Graf funkce F(u,v). lze rovnici 3.13 vyřešit výpočtem analytického členu A 0 a dvěma pohledy do 2D tabulky. Nakonec tedy dostávám pro L a výraz L a (φ, l, a, b, k t ) = A 0 [F (A 1, γ b ) F (A 1, γ a )], (3.17) kde γ a a γ b jsou z rovnice Vliv rozptylu na povrch objektu Podobně jako v [32] spočítám osvětlení bodu P a vliv rozptýleného světla v médiu na něj. To na povrchu objektu zjemňuje a rozostřuje zrcadlové odrazy a přispívá k zesvětlování tmavých částí na objektu. Budu počítat odraženou radianci na povrchu objektu v bodě P (člen L p (P ) z rovnice 3.5), utlumenou při cestě médiem z bodu P k pozorovateli O o hodnotu e K top. Člen L p (P ) popisuje podrobněji rovnice 3.6. L p,d je přímé osvětlení bodu P a podle obrázku 3.9 lze zapsat ve tvaru: L p,d = I 0 l 2 f r(θ s, φ s, θ v, φ v ) cos θ s, (3.18) kde f r je BRDF objektu, (θ v, φ v ) je směr pohledu a (θ s, φ s ) je směr dopadu světla na povrch objektu. Druhou částí členu L p (P ) je rozptýlená radiance L p,a. Spočítat tento člen je obtížnější, protože je potřeba sečíst příspěvky radiance L a z rovnice 3.17 ze všech směrů, L p,a = L a (φ(θ s, ω i ), l, a(θ i, ω i ), b(θ i, ω i ), k t )f r (θ i, φ i, θ v, φ v ) cos θ i dω i. (3.19) Ω 2π Nejdříve si probereme parametry radiance L a. Zde je φ úhel mezi dopadajícím světlem ω i a směrem ke světlu (θ s, φ s ). Pro izotropní BRDF můžeme souřadný systém natočit

25 KAPITOLA 3. TEORIE 13 O, P, S označují pozorovatele, bod na povrchu objektu a zdroj světla l vzdálenost mezi světlem a povrchem objektu n normála povrchu v bodě P I(θ) intenzita světla φ úhel mezi směrem ke zdroji a dopadajícím světlem (θ s, φ s ) směr ke zdroji světla (θ i, φ i ) směr dopadajícího světla na povrch objektu (θ v, φ v ) směr pohledového paprsku Obrázek 3.8: Popis označení v obrázku 3.9. Obrázek 3.9: Diagram popisuje dopadající světlo na povrch objektu v opticky aktivním prostředí. tak, aby φ s = 0. Potom můžeme přepsat φ na na tvar z rovnice Poměrně velkým problémem jsou zde a(θ i, ω i ) a b(θ i, ω i ), které jsou závislé na dopadajícím rozptýleném světle. Naštěstí je vždy parametr a = 0, a spodní mez integrálu v L a se tak rovná 1 φ(θ 2 s, ω i ). U parametru b takové štěstí nemáme a měli bychom za něj dosadit pro každý směr dopadajícího světla průsečík s kuželem nebo vzdálenost k povrchu nejbližšího objektu. Proto zde provedu předpoklad, stejně jako v [32], že b =. Je to poměrně velké zjednodušení, ale abych se vyhnul složitému integrálu v L a, je to nezbytné. Horní mez tedy bude π 2. Nejprve budeme řešit rovnici 3.19 pro Lambertův osvětlovací model (ideální difúzní BRDF) a získanou rovnici poté rozšíříme i pro Phongův model. Nyní pro Lambertův

26 14 KAPITOLA 3. TEORIE Obrázek 3.10: Graf funkce G 0 (u, v) a G 20 (u, v). případ dostanu po dosazení za L a v rovnici 3.19 následující výraz: L p,a = [F (A 1, π 2 ) F (A 1, 1 ] 2 φ) k d cos θ i dω i. (3.20) Ω 2π A 0 Po dosazení za A 0 a přesunutí konstant před integrál dostanu výslednou rovnici L p,a = I 0k t k d 2πl Ω2π e k tl cos φ sin φ [F (A 1, π 2 ) F (A 1, 1 2 φ) ] cos θ i dω i. (3.21) Protože úhel φ je závislý na směru θ s a integrační proměnné ω i, je integrál závislý pouze na dvou parametrech, a mohu si ho označit jako funkci G 0 (k t l, θ s ) a dostávám: L p,a = I 0k t k d G 0 (k t l, θ s ) (3.22) 2πl Phongův model je mnohem komplikovanější a je třeba provést reparametrizaci z [29]. Po této transformaci je možné ukázat, že Lambertův a Phongův model jsou matematicky analogické. Proto mohu definovat další 2D funkci G n, která vychází z funkce G 0 a bere v úvahu Phongův exponent n. G n (k t l, θ s) = Ω2π e k tl cos φ sin φ [F (A 1, π 2 ) F (A 1, 1 2 φ) ] cos n θ i dω i. (3.23) Úhel θ s se v tomto případě neměří od normály povrchu jako u G 0, ale měří se mezi zrcadlově odraženým paprskem a směrem pohledu. Ukázka grafu pro G 0 a G 20 je na obrázku Výsledný výraz pro osvětlení povrchu objektu Phongovým modelem, který bere v úvahu přímé osvětlení i rozptyl je: L p = I 0 k d [ e k tl l 2 cos θ s + k ] [ t e k tl 2πl G 0(k t l, θ s ) + I 0 k s cos n θ l 2 s + k ] t 2πl G n(k t l, θ s) (3.24)

27 KAPITOLA 3. TEORIE 15 Podobně jako při výpočtu rozptylu v médiu L a, se podařilo zjednodušit výpočet pro určení radiance na povrchu objektu na několik analytický rovnic a čtyři pohledy do tabulky, dva pro difúzní odraz a dva pro zrcadlový. Tyto modely umožnily zachovat některé důležité efekty, které světlo při rozptylu v opticky aktivním prostředí vytváří. Člen L a simuluje záři kolem reflektoru. Ta je závislá na vzdálenosti světla od pozorovatele a na optické hustotě média. Druhý člen L p potom zjemňuje a rozostřuje zrcadlové odrazy a přispívá k zesvětlování tmavých částí scény.

28 16 KAPITOLA 4. IMPLEMENTACE 4 Implementace V této kapitole popíšu implementaci mého modelu pro rozptyl světla (reflektoru) v mlze jako stínovací program. Redukcí částí L a a L p z rovnice 3.5 na několik analytických členů a na pár pohledů do 2D tabulky, mi umožnilo implementovat celý algoritmus jako stínovací program pixelů, který běží na programovatelné grafické kartě. Díky tomu lze tento algoritmus s menšími úpravami použít ve stávajících aplikacích. Pro napsání testovací aplikace jsem použil OpenGL a na psaní shaderu jsem si zvolil programovací jazyk GLSL [14]. Pro přehlednost jsem rozdělil algoritmus do několika funkcí. Vstupním bodem algoritmu je funkce main() (Obrázek 4.3), v ní se volá funkce IntersectionPoints() (Obrázek 4.1) pro výpočet průsečíků A a B pohledového paprsku s kuželem světla, a tři funkce pro výpočet jednotlivých částí rovnice 3.5. Jsou jimi funkce Airlight(), Diffuse() a Specular() (Obrázek 4.2). Většina parametrů, které jsou pro výpočet potřeba, se zadávají pomocí funkcí OpenGL, předají se do fragment shaderu jako uniformní parametry z aplikace nebo se pošlou jako proměnné parametry ze stínovacího programu vrcholů. Mezi první typ parametrů patří nastavení hodnot u mlhy a zdoje světla. Druhým typem je například intenzita. Přes uniformní parametr se také předávají 2D funkce F, G 0 a G n. Ty jsou uloženy jako 2D textury s hodnotami v pohyblivé řádové čárce. Posledním typem se v našem případě předává interpolovaná normála a poloha vrcholu (Obrázek 4.3). Zbylé parametry, které se během výpočtu mění, se pak vypočítájí na začátku funkce main(). První, co je potřeba spočítat, jsou průsečíky A a B. Jejich výpočet provádí výše zmíněná funkce IntersectionPoints z obrázku 4.1. Tato funkce také nastavuje proměnné a a b podle toho, kde body A a B leží a jakým směrem svítí reflektor. Pokud pohledový paprsek neprotne světelný kužel, nastaví se hodnota a i b na nulu. Dalším krokem je s pomocí funkce Airlight() (Obrázek 4.2) výpočet příspěvku rozptýleného světla podle rovnice Pokud světlo v daném fragmentu dopadá i na povrch objektu provede se ve funkcích Diffuse() a Specular() výpočet Phongova osvětlovacího modelu z rovnice Návratovou hodnotou funkce main() je potom barva pixelu, která se získá jako součet všech tří hodnot.

29 KAPITOLA 4. IMPLEMENTACE 17 // c0, c1, c2 - parametry kvadratické rovnice // V - směr pohledového paprsku // Dvp - vzdálenost mezi pozorovatelem a objektem // lightdir - směrový vektor světelného paprsku vec2 IntersectionPoints(float c0, float c1, float c2, vec3 V, float Dvp, vec3 lightdir) { float s1 = (-c1+sqrt(c1*c1-c0*c2))/(c2); float s2 = (-c1-sqrt(c1*c1-c0*c2))/(c2); // zajistí s1 < s2 float ss = min(s1,s2); s2 = max(s1,s2); s1 = ss; // nalezení průsečíků vec3 x1 = s1*v; vec3 x2 = s2*v; float a = s1; float b = s2; float d1 = dot(lightdir,normalize(x1-gl_lightsource[0].position.xyz)); float d2 = dot(lightdir,normalize(x2-gl_lightsource[0].position.xyz)); // kontrola protnutí správného kužele if ( d1 <= 0.) { a = s2; b = Dvp; } if ( d2 <= 0. ) { a = 0.; b = s1; if ( d1 < 0.) { b = 0.; // žádný průsečík } } return vec2(a,b); } Obrázek 4.1: Zdrojový kód funkce IntersectionPoints() pro výpočet průsečíku paprsku se světelným kuželem.

30 18 KAPITOLA 4. IMPLEMENTACE // a, b, Dvp - vzdálenost od pozorovatele k bodům A, B a P // Dsp - vzdálenost od zdroje světla k povrchu objektu // beta - extinkční koeficient // gamma - úhel mezi pohledovým paprskem a směrem ke zdoji smětla // F, G_0, G_20 - tetxury pro funkce F, G_0 a G_20 // NdotL - cos úhlu mezi dopadajícím světlem a normálou povrchu // RV - cos úhlu mezi dopadajícím světlem a zrcadlovým odrazem // thetas, thetas_ - úhly mezi dopadajícím světlem a normálou, resp. zrcadlovým odrazem vec4 Airlight( float Dsv, float beta, float a, float b, float gamma, sampler2d F) { const float LOG2E = ; const float PI = ; float t = Dsv*cos(gamma); float h = Dsv*sin(gamma); float u = beta*h; float v1 = 0.25*PI+0.5*atan((b-t)/h); float v2 = 0.25*PI+0.5*atan((a-t)/h); vec4 f1=texture2d(f, vec2(v1, u)); vec4 f2=texture2d(f, vec2(v2, u)); vec4 A0 = (beta*gl_lightsource[0].diffuse*exp2(-beta*t*log2e))/(2.*pi*h)); vec4 color = A0*(f1.x-f2.x); } return color; vec4 Diffuse( float Dsp, float beta, float NdotL, float thetas, sampler2d G_0) { const float LOG2E = ; const float PI = ; float t1 = exp2(-beta*dsp*log2e)*ndotl/dsp; vec4 t2 = beta*texture2d(g_0, vec2(beta*dsp/2., thetas/pi))/(2.*pi); vec4 color = gl_frontmaterial.diffuse*gl_lightsource[0].diffuse*(t1+t2.x)/dsp; } return color; vec4 Specular( float Dsp, float beta, float RV, float thetas_, sampler2d G_20) { const float LOG2E = ; const float PI = ; t1 = exp2(-beta*dsp*log2e)*pow(rv,20.)/dsp; t2 = beta*texture2d(g_20,vec2(beta*dsp/2., thetas_/pi))/(2.*pi); vec4 color = gl_frontmaterial.specular*gl_lightsource[0].specular*(t1+t2.x)/dsp; } return color; Obrázek 4.2: Zdrojový kód funkcí pro výpočet osvětlení podle rovnice 3.5.

31 KAPITOLA 4. IMPLEMENTACE 19 varying vec3 normal, vertpos; // normála a pozice vrcholu objektu uniform sampler2d F, G_0, G_20; // textury s funkcí F, G_0 a G_20 uniform float intensity; // intenzita světla //tt=pow(cos(theta),2)*i, kde I je jednotkova matice a cos(theta) je GL_SPOT_CUTOFF uniform mat3 tt; void main(void) { const float LOG2E = ; const float PI = ; vec3 lightdir = normalize(gl_lightsource[0].spotdirection); float beta = gl_fog.density; vec3 V = normalize(vertpos); vec3 S = normalize(gl_lightsource[0].position.xyz); vec3 N = normalize(normal); vec3 L = normalize(gl_lightsource[0].position.xyz - vertpos); float NdotL = max(dot(n, L),0.0); vec4 color = vec4(0.0, 0.0, 0.0, 0.); vec3 S1 = gl_lightsource[0].position.xyz; mat3 M = -tt + mat3(vec3(lightdir.x*lightdir), vec3(lightdir.y*lightdir), vec3(lightdir.z*lightdir)); vec3 hlp = V*M; float c2 = dot(hlp,v); float c1 = dot(hlp,-s1); hlp = S1*M; float c0 = dot(hlp,s1); // pokud má kvadratická rovnice reálné kořerny, výpočet proběhne if ( c1*c1-c0*c2 >= 0. ) { float Dvp = length(vertpos); vec2 ab = IntersectionPoints(c0, c1, c2, V, Dvp, lightdir); float a = clamp(ab.x, 0., Dvp); float b = clamp(ab.y, 0., Dvp); float Dsv = length(gl_lightsource[0].position.xyz); float gamma = acos(dot(s, V)); // Airlight color += intensity*airlight(dsv, beta, a, b, gamma, F); float spoteffect = dot(normalize(gl_lightsource[0].spotdirection), normalize(-l)); if (spoteffect > gl_lightsource[0].spotcoscutoff) { vec3 R = reflect(v,n); float RV = max(0.0, dot(r,l)); float Dsp = length(gl_lightsource[0].position.xyz - vertpos); float thetas = acos(dot(n, L)); float thetas_ = acos(dot(r,v)); // Diffuse color += intensity*diffuse(dsp, beta, NdotL, thetas, G_0); // Specular color += intensity*specular(dsp, beta, NdotL, thetas, G_20); } } gl_fragcolor = color; } Obrázek 4.3: Zdrojový kód vstupní funkce main().

32 20 KAPITOLA 5. VÝSLEDKY 5 Výsledky Výsledný model, představený v předchozích kapitolách, jsem implementoval jako stínovací program a ten jsem následně otestoval ve vlastní OpenGL aplikaci. Testoval jsem rychlost renderování v závislosti na rozlišení obrázku a na počtu světel ve scéně. Dále jsem také pozoroval jak se projeví změna některých parametrů (hustota mlhy, vzdálenost světla od pozorovatele) na vzhled scény. Pro testování jsem použil počítač s procesorem Athlon 3000+, 512MB RAM a s grafickou kartou ATI Radeon X1650Pro. Testování probíhalo v operačním systému Windows XP. (a) (b) (c) Obrázek 5.1: Snímky zachycující scénu s různou hustotou mlhy. Nahoře vlevo je snímek bez mlhy, nahoře vpravo s k t = 0.01 a dole s k t = Je zde vidět závislost na hustotě mlhy (k t ), i na vzdálenosti světla od pozorovatele. Nejdříve se podíváme jaké jsou vizuální efekty při rozptylu světla v médiu. Na obrázku 5.1 je několik snímků scény s různým nastavením parametrů. První ukazuje scénu bez mlhy, kde extinkční koeficient k t = 0, na druhém je k t = 0.01 a na posledním snímku je k t = Na snímcích s k t > 0 je zřetelně vidět záře ve směru, kam je reflektor natočen. Toto je jeden z hlavních efektů, které můj model umožňuje zobrazit, a

33 KAPITOLA 5. VÝSLEDKY 21 které chybí u jednodušších modelů, jako například mlha v OpenGL. Na druhém a třetím snímku je vidět patrný vliv různé vzdálenosti světla od pozorovatele. Z obrázků 5.1 a 5.7 je vidět rozdíl při různém nastavení hustoty mlhy. Podobně je závislost na vzdálenosti a na hustotě mlhy vidět na obrázku 5.8, kde je ukázáno několik snímků scény s autem z různých vzdáleností a s různým nastavením hustoty mlhy. (a) (b) (c) Obrázek 5.2: Obrázky ukazují kouli osvětlenou reflektorem a vliv rozptýleného světla na její difúzní složku. Snímek (a) je scéna bez mlhy, snímky (b) a (c) pak ukazuje objekt v mlze bez a se složkou airlight. Na snímku (b) je vidět zesvětlení tmavých částí, které je ještě více patrné na snímku (c). Vliv rozptylu světla v opticky aktivním prostředí na povrch objektu ukazují obrázky 5.2 a 5.3. Vliv na difůzní složku je vidět na obrázku 5.2, kde je koule osvětlená reflektorem bez mlhy (Obrázek 5.2(a)) a v mlze (Obrázky 5.2(b) a 5.2(c)). Na snímku 5.2(b) je vidět patrné zesvětlení levé neosvětlené části koule a na snímku 5.2(c) je to ještě zvýrazněno přidáním složky airlight. Vliv na zrcadlovou složku pak ukazuje obrázek 5.3. Na obrázcích 5.3(b) a 5.3(c), které jsou s mlhou, je vidět zjemnění zrcadlové složky a na obrázku 5.3(c) je také vidět patrná ztráta sytosti barev. Na obrázku 5.4 je porovnání metody pro bodová světla z [32] a mé metody pro reflektor. Je vidět, že metoda pro bodová světla se hodí pro lampu z obrázku 5.4(a), se stejnou metodou a bodovým světlem je také lampa na obrázku 5.4(b). Zde je vidět, že

34 22 KAPITOLA 5. VÝSLEDKY (a) (b) (c) Obrázek 5.3: Zde je vidět vliv rozptýleného světla na zrcadlovou část radiance na povrchu objektu při Phongově exponentu 20. Na obrázcích s mlhou (b) a (c) je viditelné zjemnění zrcadlového odrazu a hlavně na obrázku (c) je patrné snížení sytosti barev. pro tento typ lampy se toto světlo nehodí. Je zde totiž patrná záře i nad světlem, která by u této lampy být neměla. Na snímku 5.4(c) je u stejné lampy použito reflektorové světlo s mojí metodou, které se pro tento typ lampy hodí. Všechny lampy v jednom snímku ukazuje obrázek 5.5. Testování rychlosti vykreslení snímku v závislosti na rozlišení scény bylo prováděno s jedním reflektorem. Z tabulky 5.1 je vidět závislost fps na počtu pixelů ve snímku. S rostoucím rozlišením roste i počtem pixelů, které jsou osvíceny, a tím klesá fps. Rychlost také značně kolísá při stálém rozlišení, když se mění počet osvícených pixelů. Má to ale i svojí výhodu. Algoritmus není závislý na počtu objektů, a tím pádem i na počtu vrcholů ve scéně. Pokud bych použil pro výpočet vertex shader, výsledek by byl opačný. Určitě by se zvýšila rychlost, protože dnes běžné rozlišení odpovídá asi 1.3 milionu vrcholů, což je hodně. Zvýšení rychlosti je ale vykoupeno poměrně značným snížením kvality výsledného obrazu. Druhá tabulka 5.2 ukazuje vliv počtu světel ve scéně na rychlost vykreslení. Zde

35 KAPITOLA 5. VÝSLEDKY 23 (a) (b) (c) Obrázek 5.4: Porovnání mého modelu a modelu z článku od Bo Suna [32]. U snímku (a) i (b) je použit model pro bodová světla, na snímku (c) je potom model pro reflektor z tohoto článku. je dopad na rychlost poměrně značný, protože se pro každé světlo musí scéna znova vykreslit. Tyto výsledky jsou měřeny při rozlišení scény a všechna světla osvětlovala stejný počet pixelů. Závislost potom ukazuje graf na obrázku 5.6. Je také potřeba brát v úvahu počet různých druhů lesklých materiálů, protože funkce G n se musí předpočítat pro každý Phongův exponent zvlášť. Na rozlišení textur závisí kvalita výsledného obrázku, jako vhodná velikost se jevý rozlišení textury Pro několik málo hodnot to pro dnešní grafické karty není problém uchovat v paměti karty. Existují však dnes například hry, u kterých ani 256MB nebo i více grafické paměti nestačí. Potom je potřeba přenášet textury mezi pamětí počítače a grafické karty, což může mít negativní dopad na rychlost vykreslování. Další věcí, která může mít vliv na výkon, je počet instrukcí v shaderu. Zdrojový kód z předchozí kapitoly je poměrně dlouhý a na starších grafických kartách nemusí jít díky tomu spustit. Některé starší grafické karty mají omezený počet instrukcí, například

36 24 KAPITOLA 5. VÝSLEDKY (a) (b) Obrázek 5.5: Světla z obrázku 5.4 použitá v jedné scéně. rozlišení 640x x x x x1200 fps Tabulka 5.1: Závislost počtu snímků za sekundu na rozlišení snímku. Radeon 9700 umožňuje spustit shadery jen s 64 aritmetickými instrukcemi. Pak je nutné shader rozdělit na části a scénu vykreslit na několik průchodů.

37 KAPITOLA 5. VÝSLEDKY 25 Obrázek 5.6: Závislost počtu snímků za sekundu na rozlišení snímku (Graf k tabulce 5.2). počet světel rychlost vykreslení [s] Tabulka 5.2: Závislost rychlosti vykreslení na počtu reflektorů ve scéně.

38 26 KAPITOLA 5. VÝSLEDKY (a) (b) Obrázek 5.7: Snímky s několika reflektorovými světly s různou hustotou mlhy. Na snímku (a) je k t = 0.04 a snímek (b) má k t = 0.1.

39 KAPITOLA 5. VÝSLEDKY 27 (a) (b) (c) (d) Obrázek 5.8: Několik pohledů na scénu s autem.

40 28 KAPITOLA 6. ZÁVĚR 6 Závěr V diplomové práci jsem se zabýval analytickým modelem pro rozptyl světla v opticky aktivním prostředí, jako je mlha nebo kouř, podle [32]. Navrhl jsem jeho rozšíření umožňující použití s reflektorem s po částech konstantní závislostí intenzity na úhlu. Tento model se dá jednoduše implementovat v podobě stínovacího programu a použít v interaktivních aplikacích. Klíčem k tomu bylo zjednodušit a poté upravit transportní rovnici do analytické podoby. To umožnilo smulovat efekty, jako záře kolem světla (anglicky airlight), které bylo doposud v interaktivní podobě možné vidět pouze u bodových světel. Tento model je skoro lineárně závislý na počtu použitých světel. Při implementaci jako stínovací program je také závislý na rozlišení snímku, ale není závislý na počtu a komplexnosti modelů ve scéně. Kromě shaderu jsou také potřeba tři tabulky, které jsou uloženy ve formě 2D textury. Pokud je ale potřeba několik materiálů s různým Phongovým koeficientem, je nutné předpočítat a uložit do textury funkci G n pro každý materiál zvlášť. Rozšíření a úprav, které je možné do budoucna udělat, je mnoho. První úpravou, která bude mít dopad na rychlost výpočtu scény, je důkladná optimalizace shaderu. Další vylepšení jsou pak už z kategorie vizuálních. Zde je v budoucnu možné rozšířit můj model pro použití s jinými fázovými funkcemi, podobně jako v článcích [32, 33]. Z nich je patrné, že by to nemusel být veliký problém. Další oblastí jsou jiné BRDF a osvětlovací modely než je Phongův. Článek [33] také ukazuje jakým způsobem je možné rozšířit stávající model, aby se daly použít volumetrické stíny. Hlavní výzvou ale bude pokusit se nalézt analytický model pro reflektor s jinou než konstantní závislostí intenzity na úhlu. Další možností je hledání analytického modelu pro multiple scatering. Je možné, že s dalším rozvojem programovatelných grafických karet, kdy bude růst výpočetní výkon a budou klesat omezení pro programování zobrazovacího řetězce, se objeví nové metody nebo bude možné použití stávajících metod pro interaktivní aplikace.

41 KAPITOLA 7. SEZNAM LITERATURY 29 7 Seznam literatury [1] N. Adabala. Modeling and rendering of gaseous phenomena using particle maps. The Journal of Visualization and Computer Animation, 11(5): , [2] J. F. Blinn. Light reflection functions for simulation of clouds and dusty surfaces. In SIGGRAPH 82: Proceedings of the 9th annual conference on Computer graphics and interactive techniques, pages 21 29, New York, NY, USA, ACM Press. [3] E. Cerezo, F. Pérez, X. Pueyo, F. J. Serón, and F. X. Sillion. A survey on participating media rendering techniques. The Visual Computer, 21(5): , [4] Y. Dobashi, T. Yamamoto, and T. Nishita. Interactive rendering of atmospheric scattering effects using graphics hardware. In HWWS 02: Proceedings of the ACM SIGGRAPH/EUROGRAPHICS conference on graphics hardware, pages , [5] R. Fedkiw, J. Stam, and H. W. Jensen. Visual simulation of smoke. In SIG- GRAPH 01: Proceedings of the 28th annual conference on Computer graphics and interactive techniques, pages 15 22, New York, NY, USA, ACM Press. [6] P. Hanrahan and W. Krueger. Reflection from layered surfaces due to subsurface scattering. In SIGGRAPH 93: Proceedings of the 20th annual conference on Computer graphics and interactive techniques, pages , [7] K. Hegeman, M. Ashikhmin, and S. Premože. A lighting model for general participating media. In SI3D 05: Proceedings of the 2005 symposium on Interactive 3D graphics and games, pages , [8] N. Hoffman and A. J. Preetham. Real-time light-atmosphere interactions for outdoor scenes. Graphics programming methods, pages , [9] H. W. Jensen. Realistic Image Synthesis Using Photon Mapping. AK Peters, [10] H. W. Jensen and P. H. Christensen. Efficient simulation of light transport in scences with participating media using photon maps. In SIGGRAPH 98: Proceedings of the 25th annual conference on Computer graphics and interactive techniques, pages , [11] H. W. Jensen, S. R. Marschner, M. Levoy, and P. Hanrahan. A practical model for subsurface light transport. In SIGGRAPH 01: Proceedings of the 28th annual conference on Computer graphics and interactive techniques, pages , 2001.

42 30 KAPITOLA 7. SEZNAM LITERATURY [12] J.-R. Jiménez and X. Pueyo. Interactive rendering of globally illuminated scenes including anisotropic and inhomogeneous participating media. The Visual Computer, 21(7): , [13] J. T. Kajiya and B. P. V. Herzen. Ray tracing volume densities. In SIGGRAPH 84: Proceedings of the 11th annual conference on Computer graphics and interactive techniques, pages , New York, NY, USA, ACM Press. [14] J. Kessenich, D. Baldwin, and R. Rost. The OpenGL shading language, [15] R. V. Klassen. Modeling the effect of the atmosphere on light. ACM Trans. Graph., 6(3): , [16] E. P. Lafortune and Y. D. Willems. Rendering Participating Media with Bidirectional Path Tracing. In Rendering Techniques 96 (Proceedings of the Seventh Eurographics Workshop on Rendering), pages , [17] N. L. Max. Atmospheric illumination and shadows. In SIGGRAPH 86: Proceedings of the 13th annual conference on Computer graphics and interactive techniques, pages , [18] N. L. Max. Efficient Light Propagation for Multiple Anisotropic Volume Scattering. In Fifth Eurographics Workshop on Rendering, pages , Darmstadt, Germany, [19] S. G. Narasimhan, M. Gupta, C. Donner, R. Ramamoorthi, S. K. Nayar, and H. W. Jensen. Acquiring scattering properties of participating media by dilution. In SIG- GRAPH 06: ACM SIGGRAPH 2006 Papers, pages , [20] S. G. Narasimhan and S. K. Nayar. Vision and the atmosphere. Int. J. Comput. Vision, 48(3): , [21] S. G. Narasimhan and S. K. Nayar. Shedding light on the weather. In IEEE CVPR, [22] T. Nishita, Y. Miyawaki, and E. Nakamae. A shading model for atmospheric scattering considering luminous intensity distribution of light sources. In SIGGRAPH 87: Proceedings of the 14th annual conference on Computer graphics and interactive techniques, pages , [23] S. Pattanaik and S. Mudur. Computation of global illumination in a participating medium by Monte Carlo simulation. The Journal of Visualisation and Computer Animation, 4(3): , 1993.

43 KAPITOLA 7. SEZNAM LITERATURY 31 [24] M. Pauly, T. Kollig, and A. Keller. Metropolis light transport for participating media. In Proceedings of the Eurographics Workshop on Rendering Techniques 2000, pages 11 22, [25] F. Perez, I. Marten, X. Pueyo, and F. X. Sillion. Acceleration of Monte Carlo path tracing in general environments. In PG 00: Proceedings of the 8th Pacific Conference on Computer Graphics and Applications, page 71, [26] A. J. Preetham, P. Shirley, and B. Smits. A practical analytic model for daylight. In SIGGRAPH 99: Proceedings of the 26th annual conference on Computer graphics and interactive techniques, pages , [27] S. Premože, M. Ashikhmin, and P. Shirley. Path integration for light transport in volumes. In EGRW 03: Proceedings of the 14th Eurographics workshop on Rendering, pages 52 63, [28] S. Premože, M. Ashikhmin, J. Tesendorf, R. Ramamoorthi, and S.Nayar. Practical rendering of multiple scattering effects in participating media. In EuroGraphics Symposium on Rendering., pages , [29] R. Ramamoorthi and P. Hanrahan. Frequency space environment map rendering. In SIGGRAPH 02: Proceedings of the 29th annual conference on Computer graphics and interactive techniques, pages , [30] H. Rushmeier. Rendering participating media: problems and solutions from application areas. In 5th Eurographics workshop on rendering, pages 35 56, [31] J. Stam and E. Fiume. Depicting fire and other gaseous phenomena using diffusion processes. In SIGGRAPH 95: Proceedings of the 22nd annual conference on Computer graphics and interactive techniques, pages , [32] B. Sun, R. Ramamoorthi, S. G. Narasimhan, and S. K. Nayar. A practical analytic single scattering model for real time rendering. In SIGGRAPH 05: ACM SIGGRAPH 2005 Papers, pages , [33] D. A. V. Biri, S. Michelin. Real-time single scattering with shadows. In In review biri/recherche.php, 2004.