2015 http://excel.fit.vutbr.cz
Progressive photon mapping na GPU ´ s Lysek* Tomaˇ Abstrakt ´ cne´ v´ypoˇcetn´ı techniky - global Pro tvorbu fotorealistick´ych obrazu˚ je nutne´ pouˇz´ıt cˇ asoveˇ naroˇ ˇ s´ı techniky patˇr´ı photon mapping a jeho progresivn´ı varianta. illumination techniky. Mezi nejnovejˇ ´ Tento cˇ lanek se bude zab´yvat implementac´ı progressive photon mappingu (ppm) na dneˇsn´ıch ´ a porovna´ rychlost implementace mezi CPU variantou a GPU variantou. Dale ´ grafick´ych kartach ´ ı hitpointu˚ vybere nejpomalejˇs´ı blok ppm a navrhne urychlen´ı. Navrhnute´ urychlen´ı je zclustrovan´ do bl´ızk´ych clusteru˚ a pouˇz´ıt´ı pravidelne´ mˇr´ızˇ ky pro photony. ˇ a´ slova: progressive photon mapping — global illumination — gpgpu Kl´ıcov ´ Pˇriloˇzene´ materialy: N/A *
[email protected], Faculty of Information Technology, Brno University of Technology
brazovac´ı rovnice (rendering equation), kterou v roce 1986 sepsal James T. Kajiya[1]. Od zaˇca´ tku poˇc´ıtaˇcov´e grafiky byla snaha o co nejreZobrazovac´ı rovnice popisuje v´ypoˇcet odraˇzen´eho alistiˇctˇejˇs´ı v´ysledn´e sn´ımky. Pro co nejrealistiˇctˇejˇs´ı jasu (radiance) v urˇcit´em bodˇe. Popisuje to jako souˇcet obrazy je potˇreba prov´est sloˇzitou fyzik´aln´ı simulaci svˇetla, kter´a je velmi cˇ asovˇe n´aroˇcn´a. Pomˇernˇe novou (integr´al) vˇsech pˇr´ıspˇevk˚u osvˇetlen´ı ze vˇsech smˇer˚u fotorealistickou metodou je metoda fotonov´ych map pˇres hemisf´eru kolem vyˇsetˇrovan´eho bodu. Pomoc´ı to(photon mapping) a jeho nejnovˇejˇs´ı varianta progres- hoto pˇr´ıstupu je moˇzn´e analyticky vypoˇc´ıtat osvˇetlen´ı sive photon mapping. Posledn´ı dobou nastal velk´y sc´eny, probl´em ovˇsem nast´av´a s t´ım, zˇ e pro rozumnˇe boom GPGPU poˇc´ıt´an´ı, grafickou kartu m´a v dneˇsn´ı sloˇzit´e sc´eny je toto ˇreˇsen´ı nerealizovateln´e - z cˇ asov´ych dobˇe skoro kaˇzd´y PC a proto se zd´a jako zajmav´a vari- d˚uvodu. V cˇ l´anku o zobrazovac´ı rovnici James T. Kajia[1] anta vyzkouˇset akcelerovat progressive photon mapping na grafick´e kartˇe. Tato pr´ace nejprve navrhne narvhnul zp˚usob jak vypoˇc´ıtat tuto rovnici a to t´ım jednoduchou gpu implementaci progressive photon zp˚usobem, zˇ e pro v´ypoˇcet integr´alu pouˇzil monte carlo mappingu a pot´e pro nejpomalejˇs´ı blok navrhne urychle- metody. Tato metoda se oznaˇcuje jako path tracing n´ı. Nejpomalejˇs´ı blok byl vybr´an a tento blok se po- a vˇsechny metody, kter´e vych´az´ı z path tracingu se moc´ı jednoduch´e akceleraˇcn´ı struktury podaˇrilo urych- naz´yvaj´ı monte carlo raytracing metody. Path tracing funguje podobnˇe jako raytracing, vyˇsle lit oproti CPU implementace v´ıce neˇz 30 kr´at. se paprsek z oka (kamery), kter´y putuje do sc´eny. Pˇri pr˚useˇc´ıku paprsku se sc´enou v bodˇe x se vyˇsle 2. Related work sekund´arn´ı paprsek n´ahodn´ym smˇerem a ten se vyˇsetˇr´ı. Nejlepˇs´ı fotorealistick´e v´ysledky se v dneˇsn´ı dobˇe Protoˇze n´ahodn´y paprsek nedok´azˇ e vypoˇc´ıtat pˇresnˇe dosahuj´ı pomoc´ı tˇr´ıdy technik, kter´e se naz´yvaj´ı global osvˇetlen´ı bodu x vyˇsle se v´ıce paprsku z dan´eho pixillumination (glob´aln´ı osvˇetlen´ı). Ne vˇsechny global il- elu a proˇsetˇr´ı v´ıce n´ahodn´ych cest - odtud n´azev path lumination techniky jsou rozumnˇe implementovateln´e tracing. na GPU a proto je potˇreba vybrat vhodnou techniku. Rozˇs´ıˇren´ım path tracnigu byla v roce 1993 [2] Tyto metody se snaˇz´ı o korektn´ı simulaci svˇetla ve a v roce 1994 [3] technika zvan´a bidirectional path sc´enˇe a z´akladn´ım kamenem pro tyto metody byla zo- tracing. Tato technika prohled´av´a cesty jak od kamery
1. Introduction
tak od svˇetla najednou a pot´e vypoˇcte jak´y pˇr´ıspˇevek m´aj´ı obˇe dvˇe cesty mezi sebou a podle toho spoˇcte osvˇetlen´ı. Dalˇs´ım rozˇs´ıˇren´ım path tracingu je technika zvan´a Metropolis Probl´em monte carlo metod je ten, zˇ e pro dobr´e fotorealistick´e v´ysledky je potˇreba proj´ıt mnoho cest kaˇzd´ym pixelem. V literatuˇre se p´ısˇ e, zˇ e bˇezˇ n´e cˇ ´ıslo jsou tis´ıce cest na pixel, z cˇ ehoˇz vypl´yv´a obrovsk´a cˇ asov´a n´aroˇcnost. Dalˇs´ı moˇznost´ı je pouˇz´ıt novou techniku zvanou Photon mapping. Photon mapping byl vymyˇslen v Henrikem Wann Jensenem v roce 1996 [4]. Photon mapping je dvou-pr˚uchodov´a technika, kter´a v prvn´ım kroce spoˇc´ıt´a pˇr´ıspˇevek svˇetla ve sc´enˇe vzorkov´an´ım svˇetla. Jeden vzorek svˇetla - foton - je proˇsetˇren sc´enou podobnˇe jako paprsek u raytracingu a pˇri dopadu na dif˚uzn´ı povrch je foton uloˇzen do fotonov´e mapy. Pot´e v druh´em pr˚uchodu, se pˇri v´ypoˇctu lok´aln´ıho osvˇetlovac´ıho modelu vypoˇcte nepˇr´ım´e osvˇetlen´ı z nejbliˇzsˇ´ıch foton˚u uloˇzen´ych ve fotonov´e mapˇe. Pro dobr´e v´ysledky pomoc´ı klasick´eho photon mappingu je potˇreba vyslat mnoho (des´ıtky milon˚u) foton˚u ze svˇeteln´ych zdroj˚u, coˇz m´a za n´asledek velkou mapu foton˚u - z toho plyne velk´a pamˇet’ov´a sloˇzitost a nav´ıc cˇ´ım v´ıc foton˚u je uloˇzen´ych ve fotonov´e mapˇe, t´ım pomalejˇs´ı vyhled´av´an´ı ve fotonov´e mapˇe je. Probl´em s velikosti fotonov´e mapy se snaˇz´ı ˇreˇsit progresivn´ı varianta photon mappingu - progressive photon mapping, kter´a vyˇsle ze svˇeteln´eho zdroje pouze cˇ a´ st foton˚u, pomoc´ı t´eto cˇ a´ sti spoˇc´ıt´a osvˇetlen´ı, vyslan´e fotony zahod´ı a v dalˇs´ı iteraci vyˇsle znova menˇs´ı cˇ a´ st foton˚u, pˇriˇcte osvˇetlen´ı a takhle poˇra´ d dokola.
Progressive photon mapping Progressive photon mapping se jev´ı jako jako zajmav´a metoda pro implementaci na grafick´e kartˇe - mal´a pamˇet’ov´a sloˇzitost, iteraˇcn´ı v´ypoˇcet, velk´a koherence. Proto tato sekce rozep´ısˇe teorii za progressive photon mappingem trochu do hloubky. V klasick´em photon mappingu se jas v bodˇe x a ~ spoˇc´ıt´a jako: smˇeru ω
1 ~)≈ 2 Lr (x, ω πr
N
∑ f (x, ω~ , ω~ p )∆Φ p (x, ω~ p )
(1)
p=1
~ p ) je z´aˇre z fotonu p uloˇzena ve fotonov´e kde ∆Φ p (x, ω ~ ,ω ~ p ) je BRDF funkce. Suma zahrnuje mapˇe a f (x, ω N nejbliˇzsˇ´ıch foton˚u z bodu x ve fotonov´e mapˇe. Jak jiˇz bylo zm´ınˇeno, probl´em photon mappingu je v jeji cˇ asov´e a pamˇet’ov´e sloˇzitosti. Pˇri v´ypoˇctu je photon mapping limitov´an operaˇcn´ı pamˇet´ı PC a pˇri
velk´e fotonov´e mapˇe je prohled´av´an´ı taky pomalejˇs´ı. Pr´avˇe proto byla snaha rozdˇelit jednu velkou fotonovou mapu na mnoho menˇs´ıch fotonov´ych map a z nich spoˇc´ıtat osvˇetlen´ı. Jednou jednoduchou variantou bylo vypoˇc´ıst n-kr´at klasick´y foton mapping s menˇs´ım poˇctem foton˚u a pot´e v´ysledky jednotliv´ych iterac´ı zpr˚umˇerovat, toto ˇreˇsen´ı bylo rychlejˇs´ı ale nevedlo k konzistentn´ımu (spr´avn´emu) v´ysledku. Dalˇs´ı moˇznost byla vymyˇslena pr´avˇe pomoc´ı progressive photon mappingu, kter´a vhodnˇe pˇripoˇc´ıt´a osvˇetlen´ı dan´e iterace k pˇredch´azej´ıc´ı iteraci.
´ Obrazek 1. Sch´ema progressive photon mappingu[5]
Obr´azek 1 zobrazuje sch´ema progresive photon mappingu. Nejprve je nad sc´enou vypoˇc´ıt´an raytracing, v pr˚useˇc´ıc´ıch paprsk˚u s dif˚uzn´ım povrchem je uloˇzen´y bod - tzv. hitpoint. V hitpointu je uloˇzena pozice, barva, souˇradnice ve v´ysledn´em obrazku, polomˇer a poˇcet foton˚u, kter´e pˇrispˇely k osvˇetlen´ı dan´eho hitpointu. Druh´a cˇ a´ st je rozdˇelena do iterac´ı, kde se vˇzdy vyˇsle urˇcit´a cˇ a´ st foton˚u, v kaˇzd´em hitpointu se naleznou vˇsechny fotony v jeho polomˇeru, vypoˇcte se podle nich pˇr´ıspˇevek osvetlen´ı, progresivnˇe se pˇripoˇcte k jiˇz vypoˇcten´emu osvˇetlen´ı. Pote se vypoˇc´ıtan´e fotony zahod´ı a cel´y proces vys´ıl´an´ı foton˚u se opakuje (teoreticky) donekoneˇcna. Polomˇer v hitpointu by se mˇel v kaˇzd´e iteraci zmenˇsovat, coˇz vede k zpˇresˇnov´an´ı jiˇz vypoˇcten´eho ˇreˇsen´ı, nov´y polomˇer se vypoˇc´ıt´a jako:
s ˆ = R(x) R(x)
N(x) + αM(x) N(x) + M(x)
(2)
ˆ kde R(x) respektive R(x) je polomˇer v hitpointu x respektive nov´y polomˇer v hitpointu x. N(x) je poˇcet jiˇz uloˇzen´ych foton˚u (z pˇredch´azej´ıc´ıch iterac´ı) v hitpointu x, M(x) je poˇcet nov´ych foton˚u ze zrovna poˇc´ıtan´e iteraci v polomˇeru R(x). α je hodnota v rozsahu 0 - 1 a ud´av´a jak moc nov´ych foton˚u bude pˇrid´ano do v´ysledn´eho osvˇetlen´ı a jak rychle se bude polomˇer zmenˇsovat. ~ ) v bodˇe x je spoˇcteNov´a hodnota osvˇetlen´ı τNˆ (x, ω na jako:
~ ) = τN+M (x, ω ~) τNˆ (x, ω
N(x) + αM(x) N(x) + M(x)
(3)
~ ) je suma jasu z pˇredchoz´ıch iterac´ı a z kde τN+M (x, ω nynˇejˇs´ı iterace spoˇctena rovnic´ı 1 a hodnoty N(x), M(x) a α jsou stejn´e hodnoty jako v rovnici 2. ~ V´ysledn´e osvˇetlen´ı v bodˇe x smˇeˇruj´ıc´ı smˇerem ω je spoˇcteno jako:
~) ≈ L(x, ω
~) 1 τNˆ (x, ω ˆ 2 Nemmited π R(x)
(4)
Pouˇzit´ım progressive photon mappingu je nav´ıc moˇzn´e doc´ılit nˇekter´ych fotorealistick´ych elementu, kter´e jsou velmi sloˇzit´e u ostatn´ıch metod glob´aln´ıho osvˇetlen´ı, jako napˇr´ıklad kaustiky, SDS cesty a jin´e. (SDS cesty jsou z n´azvu specular-diffuse-specular a klasick´a uk´azka tˇechto cest jsou napˇr´ıklad kaustiky na dnˇe baz´enu).
´ obrazu Synteza Posledn´ı blok naˇcte paralelnˇe hitpoint, vypoˇcte barvu podle rovnice 4 a uloˇz´ı spoˇctenou barvu na pozici ve framebufferu.
3. Evaluace jednoduche´ implementace Byla provedena jednoduch´a implementace jednotliv´ych blok˚u. I kdyˇz vˇetˇsina blok˚u je velmi naivn´ıch, tak tato implementace slouˇz´ı pouze k nalezen´ı nejslabˇs´ıch m´ıst photon mappingu. Tato implementace byla otestovan´a na jednoduch´e sc´enˇe a obr´azek 2 ukazuje postupn´e progresivn´ı - zlepˇsov´an´ı v´ysledn´e kvality obrazu. Byla tak´e provedena CPU implementace, kter´a byla rozˇs´ıˇrena o rychlejˇs´ı hled´an´ı foton˚u pomoc´ı kdstromu. CPU a GPU implementace byla evaluov´ana na notebooku s Intel i7-4702MQ processoru, naps´ana v c++ a kompilov´ana Intel C++ 15.0 kompil´atorem. GPU na kter´e bˇezˇ ela OpenCL implementace byla spusˇ t’eˇ na na grafice GeForce GT 750M. Rychlost CPU implementace byla mˇeˇrena pomoc´ı std::chrono knihovny a GPU implementace pomoc´ı nvidia nsight.
Jednoducha´ GPGPU dekompozice Progressive photon mapping m˚uzˇ e b´yt rozdˇelen do nˇekolika nez´avisl´ych blok˚u: raytracing, photon tracing, hitpoint illumination a synt´eza obrazu. Raytracing Raytracing m˚uzˇ e b´yt ch´ap´an jako sekvenˇcn´ı proch´azen´ı pixel˚u v´ysledn´eho obrazu a prohled´av´an´ı sc´eny pomoc´ı patˇriˇcn´ych paprsk˚u. Proch´azec´ı rutina je pro vˇsechny paprsky stejn´a, takˇze paralelizace je velmi jednoduch´a - jedno vl´akno - jeden pixel. Oproti klasick´emu raytracingu, tento raytracing je rozˇs´ıˇren o uloˇzen´ı hitpointu do pamˇeti. Jedna vˇec mus´ı b´yt poznamen´ana, a to ta, zˇ e raytracing je v z´akladn´ı podobˇe rekurzivn´ı algoritmus. V dneˇsn´ı dobˇe grafick´e karty neum´ı zpracovat rekurzivn´ı vol´an´ı funkce a proto je potˇreba upravit raytracing aby fungoval iteraˇcnˇe. Photon tracing Blok photon tracingu je velmi podobn´y raytracingu, neukl´ad´a ovˇsem hitpointy, ale ukl´ad´a fotony. Pro proch´azen´ı fotonov´eho paprsku je pouˇzit velmi podobn´a rutina jako u raytracingu. Hitpoint illumination V tomto bloku se paralelnˇe pro kaˇzd´y hitpoint vypoˇcte nov´e osvˇetlen´ı hitpointu x. Nejjednoduˇssˇ´ı (a taky nejnaivnˇejˇs´ı) varianta je proj´ıt vˇsechny fotony na dan´em objektu a ty kter´e maj´ı vzd´alenost od bodu x menˇs´ı neˇz R(x) se zahrnou do v´ypoˇctu.
Raytracing Photon tracing Hitpoint Illumination Synthesize
GPU CPU 0.706 ms 1172 ms 7.897 ms 317 ms 2041 ms 1593 ms 0.247 ms 3 ms
Tabulka 1. V´ykonost mezi GPU a CPU variantou
algoritmu pˇri rozliˇsen´ı 320*280 a pˇri velikosti fotonov´e mapy 100 tis´ıc foton˚u. Raytracing Photon tracing Hitpoint Illumination Synthesize
GPU CPU 12.107 ms 6 197 ms 7.897 ms 317 ms 38 603 ms 23 957 ms 4.924 ms 91 ms
Tabulka 2. V´ykonost mezi GPU a CPU variantou
algoritmu pˇri rozliˇsen´ı 1280*1080 a pˇri velikosti fotonov´e mapy 100 tis´ıc foton˚u. Tabulky 1 a 2 ukazuj´ı v´ykonost mezi GPU a CPU implementac´ı. Jak je moˇzn´e z tˇechto tabulek vidˇet, vˇsechny bloky kromˇe Hitpoint illumination se na GPU znaˇcnˇe urychlily. Jednu vˇec je potˇreba podotknout, na CPU funguje v bloku Hitpoint illumination vyled´av´an´ı pomoc´ı kd-stromu, pokud se na cpu pouˇzije stejn´a metoda - tedy bruteforce - tak pˇri mal´em rozliˇsen´ı 320*280 trv´a tento blok 68 sekund. Rychlost raytracingu a photon tracingu je ovlivnˇena poˇctem pixel˚u / foton˚u a sloˇzitost´ı sc´eny. I kdyˇz byla testovac´ı sc´ena velmi jednoduch´a, photon tracing a raytracing nejsou nejslabˇs´ı m´ısta. Nav´ıc pro komplexnˇejˇs´ı sc´eny existuj´ı sofistikovan´e algoritmy a datov´e struktury, pomoc´ı kter´ych se d´a dos´ahnout vysok´a v´ykonost
nevad´ı, protoˇze i v mnohem komplexnˇejˇs´ı sc´enˇe se ˇreˇs´ı naprosto stejn´e probl´emy a cˇ asovˇe (pokud se zachov´a poˇcet foton˚u a rozliˇsen´ı) budou stejn´e.
´ 4. Navrh akcelerace Zmiˇnovan´y hitpoint illumination blok je naprogramovan´y velmi naivnˇe. Tato sekce pop´ısˇ e postupnˇe jak´e akceleraˇcn´ı techniky se navrhly, pouˇzily a byly stavebn´ı bloky pro nejrychlejˇs´ı ˇreˇsen´ı. ´ ı pamet ˇ Lokaln´ V naivn´ım ˇreˇsen´ı kaˇzd´y thread naˇc´ıtal postupnˇe z glob´aln´ı pamˇeti jeden foton za druh´ym. Pˇr´ıstup do glob´aln´ı pamˇeti je na GPU velmi drah´y, proto prvn´ı akceleraˇcn´ı technika je vyuˇz´ıt´ı lok´aln´ı pamˇet’i, do kter´e je mnohem rychlejˇs´ı pˇr´ıstup. V kaˇzd´e workgroupˇe se pˇriprav´ı lok´aln´ı pamˇet’ a pˇret´ahne se blok glob´aln´ı pamˇeti do lok´aln´ı pamˇeti. Vˇsechny thready v workgroupˇe zpracuj´ı vˇsechny fotony v lok´aln´ı pamˇeti a pot´e se naˇcte dalˇs´ı blok pamˇeti a tak poˇra´ d dokola.
´ Obrazek 2. V´ysledky postupn´eho poˇc´ıt´an´ı
progressive photon mappingu. Na vrchn´ım obr´azku je v´ysledek s jednou iterac´ı, uprostˇred s deseti iteracemi a dole se sto iteracemi. i pˇri komplexn´ıch sc´en´ach a pokud by se netvoˇril jednoduch´y renderer, tak je moˇzn´e pouˇz´ıt nvidia OptiX framework, kter´y m´a zabudovan´y a vysoce optimalizovan´y raytracing, kter´y by se na tyto dva bloky dal pouˇz´ıt. Hitpoint illumination blok je nejpomalejˇs´ı blok. Je to d´ano t´ım, zˇ e pouˇz´ıvan´a technika je velmi naivn´ı a tento blok testuje velk´e mnoˇzstv´ı foton˚u, kter´e nejsou v˚ubec (d´ano topologi´ı sc´eny) potˇreba. Blok vybran´y k akceleraci je teda hitpoint illumination blok. To zˇ e je sc´ena velmi jednoduch´a v tomto pˇr´ıpadˇe v˚ubec
ˇ Razen´ ı fotonu˚ Kdyˇz se poˇc´ıt´a osvˇetlen´ı hitpointu x, tak se do v´ypoˇctu osvˇetlen´ı mus´ı zaˇradit pouze ty fotony, kter´e leˇz´ı na stejn´em objektu jako hitpoint x. Proto kdyˇz m´ame jedin´e pole foton˚u, tak velk´a cˇ a´ st foton˚u se zavrhne, protoˇze leˇz´ı na jin´em objektu a drah´e naˇc´ıt´an´ı bylo zbyteˇcn´e. Navrhnut´e ˇreˇsen´ı je rozdˇelit jedno pole foton˚u na N pol´ı foton˚u, kde v kaˇzd´em poli jsou fotony pouze z jednoho objektu. Proto se mezi photon tracing blok a hitpoint illumination blok vloˇz´ı blok na rozˇrazen´ı foton˚u a tento blok roztˇr´ıd´ı fotony do pˇr´ısluˇsn´ych pol´ı. Rychlost tohoto bloku je zanedbateln´a (1.5ms) v porovn´an´ı s rychlost´ı bloku hitpoint illumination. Protoˇze nen´ı zajiˇstˇeno, zˇ e vˇsechny hitpointy v jedn´e workgroupˇe budou ze stejn´eho objektu, nen´ı moˇzn´e pouˇz´ıt v tomto pˇr´ıpadˇe lok´aln´ı pamˇet’. ˇ Razen´ ı hitpointu˚ Aby se dos´ahla vˇetˇs´ı koherence, je nutn´e zajistit, zˇ e vˇsechny hitpointy v jedn´e workgroupˇe budou z jednoho objektu, je nutn´e pouˇz´ıt nˇejak´y syst´em rozˇrazen´ı. Toto rozˇrazen´ı je moˇzn´e prov´est na CPU, protoˇze bude v cel´em procesu pouˇzit´e pouze jednou. Jedin´y probl´em, kter´y nast´av´a je pˇri pˇrechodu (v poli) mezi jednotliv´ymi objekty. Je nutn´e vloˇzit do pole s hitpointy takzvan´e filler hitpointy, kter´e jsou neaktivn´ı a zajiˇst’uj´ı pouze to, zˇ e v workgoupˇe budou hitpointy pouze z jednoho objektu, nebo pr´avˇe filler hitpointy.
ˇ ´ ı pamet ˇ’ Razen´ ı hitpointu˚ a lokaln´ Protoˇze nyn´ı jsou v jedn´e workgroupˇe pouze hitpointy z jednoho objektu, je moˇzn´e slouˇcit vˇsechny pˇredchoz´ı pˇr´ıstupy a pouˇz´ıt lok´aln´ı pamˇet’ a rozˇrazen´e fotony najednou. ´ ı hitpointu˚ a spatial grid Klastrovan´ Pˇredchoz´ı ˇreˇsen´ı i kdyˇz je rychl´e, poˇra´ d prohled´av´a velk´e mnoˇzstv´ı zbyteˇcn´ych foton˚u. Kdyˇz se pod´ıv´ame na CPU implementaci pomoc´ı kd-stromu, jde vidˇet, zˇ e CPU akceleraˇcn´ı technika na vyhled´av´an´ı foton˚u pˇrinesla obrovsk´e zrychlen´ı, proto by bylo vhodn´e pouˇz´ıt podobnou akceleraˇcn´ı techiku i na GPU. Kd-strom je ovˇsem tˇezˇ ko sestrojiteln´y za bˇehu na GPU. Proto vybran´e ˇreˇsen´ı je pravideln´a mˇr´ızˇ ka. Pˇri tvorbˇe pravideln´e mˇr´ızˇ ky pro jeden objekt, se nejprve vypoˇcte bounding box dan´eho objektu. Pro jednoduchost a adaptabilitu se vyuˇzije dˇel´ıc´ı faktor n, kter´y urˇcuje kolikr´at se bude dˇelit nejdelˇs´ı strana bounding boxu a z jednoho d´ılku se pot´e vypoˇcte sˇ´ıˇrka pravideln´e mˇr´ızˇ ky. Pˇri urˇcov´an´ı v jak´e cˇ a´ sti mˇr´ızky se bod x nach´az´ı, staˇc´ı pouze vypoˇc´ıst vektor smˇeˇruj´ıc´ı z minim´aln´ıho bodu bounding boxu do bodu x a pot´e podˇelit kaˇzdou sloˇzku sˇ´ıˇrkou jednoho boxu pravideln´e mˇr´ızˇ ky. T´ımto po zaokrouhlen´ı smˇerem dol˚u vypadnou celoˇc´ıseln´e hodnoty x, y, z, kter´e ud´avaj´ı pozici v mˇr´ızˇ ce.
workgroupy a nejefektivnˇejˇs´ı velikost worgkroupy se m˚uzˇ e liˇsit dle rozliˇsen´ı.
5. Vyhodnocen´ı vysledk ´ u˚ Vˇsechny akceleraˇcn´ı techniky, kter´e byly pˇredstaven´e v minul´e sekci byly naimplementov´any a byla zmˇeˇrena jejich rychlost na rozliˇsen´ı 1920*1080 a 320*280. Naive solution Local memory Photon sorting Hitpoint sorting Hitpoint sorting, local memory
320*280 2041 ms 1109 ms 611 ms 484 ms 327 ms
1920*1080 38 603 ms 17 750 ms 10 539 ms 8 384 ms 5 422 ms
Tabulka 3. Vyhodnocen´ı v´ysledku navrhnut´ych
akceleraˇcn´ıch ˇreˇsen´ı. Tabulka 3 ukazuje, zˇ e postupnˇe vˇsechny postupy bez pravideln´e pˇrin´asˇely zˇ a´ dan´e urychlen´ı a postupnˇe se podaˇrilo pˇrekonat a z´ıskat zrychlen´ı oproti CPU variantˇe. Vˇsechny tyto testy byly vykon´any pomoc´ı OpenCL. Pro v´ypoˇcet vzd´alenosti byla pouˇzita zabudovan´a funkce distance(). Jakmile se funkce distance() nahradila za ruˇcn´ı vypoˇc´ıt´an´ı vzd´alenosti, vedlo to k skoro 3x rychlejˇs´ımu v´ysledku. A tedy rychlost hitpoint illumination bloku je pˇri rozliˇsen´ı 320*280 125 ms a pˇri rozliˇsen´ı 1920*1080 1 941ms. Testov´an´ı pravideln´e mˇr´ızˇ ky je nutn´e prov´est oddˇelenˇe a to z d˚uvodu velk´eho mnoˇzstv´ı filler hitpoint˚u. Pˇri rozliˇsen´ı 1920*1080 ve v´ysledn´em v´ypoˇctu bylo pˇr´ıtomno 33% filler hitpoint˚u a tedy algoritmus fungoval pouze na 66%. Je nutn´e tedy uv´est cˇ asy i bez pravideln´e mˇr´ızˇ ky. Tabulka 4 ukazuje fin´aln´ı a maxim´aln´ı zrychlen´ı navrhovan´ych metod. 320*280 1920*1080 Hitpoint sorting, local memory 172 ms 2 852 ms Grid structure 87 ms 730 ms Tabulka 4. Rychlost pravideln´e mˇr´ızˇ ky.
´ Obrazek 3. Klastry hitpoint˚u vytvoˇren´e algoritmem
k-means Posledn´ım probl´emem, kter´y je potˇreba vyˇreˇsit, je maxim´aln´ı koherence hitpoint˚u, coˇz znamen´a, zˇ e je nutn´e zajistit, aby hitpointy v jedn´e workgroupˇe byly co nejbl´ızˇ e (prostorovˇe) u sebe a t´ımp´adem budou proch´azet stejn´e podprostory mˇr´ızˇ ky. Pro toto zajiˇstˇen´ı je vyuˇzito na CPU stranˇe algoritmu k-means, kter´y vytvoˇr´ı na poli hitpoint˚u klastry. Velk´y probl´em algoritmu k-means je ten, zˇ e nen´ı moˇzn´e zajistit aby vracel klustry fixn´ı velikosti a tedy mnoho filler hitpoint˚u je pouˇzito. Obr´azek 3 zn´azorˇnuje jak vypadaj´ı klastry ve sc´enˇe. Velikost klastr˚u je omezena podle velikosti
´ er ˇ 6. Zav Tato pr´ace popisuje experiment´aln´ı implementaci progresivn´ıho photon mappingu na grafick´e kartˇe. Pro kaˇzd´y dekomponovan´y blok je navrhnuta gpu implementace a nejpomalejˇs´ı blok byl postupnˇe zrychlen´y 52 kr´at oproti naivn´ı implementaci a 32kr´at oproti CPU implementaci. V dalˇs´ım pokraˇcov´an´ı pr´ace by bylo vhodn´e vymyslet jin´y algoritmus klastrov´an´ı, napˇr´ıklad pomoc´ı evoluˇcn´ıch algoritm˚u navrhnout takov´e rozˇrazen´ı hitpoint˚u, kter´e sn´ızˇ ´ı chybu z 33% na menˇs´ı hodnotu a vyuˇzije se vˇetˇs´ı potenci´al grafick´e karty.
ˇ ´ ı Podekov an´ Chtˇel bych podˇekovat vedouc´ımu m´e diplomov´e pr´ace profesorovi Pavlovi Zemˇc´ıkovi za uˇziteˇcn´e rady a trpˇelivost, kterou se mnou mˇel.
Literatura [1] James T. Kajiya. The rendering equation. SIGGRAPH Comput. Graph., 20(4):143–150, August 1986. [2] Eric P. Lafortune and Yves D. Willems. directional path tracing. 1993.
Bi-
[3] Eric Veach and Leonidas Guibas. Bidirectional Estimators for Light Transport. 1994. [4] Henrik Wann Jensen. Global illumination using photon maps. In Proceedings of the eurographics workshop on Rendering techniques ’96, pages 21– 30, London, UK, UK, 1996. Springer-Verlag. [5] Toshiya Hachisuka, Shinji Ogaki, and Henrik Wann Jensen. Progressive photon mapping. ACM Trans. Graph., 27(5):130:1–130:8, December 2008.