Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
K rozboru jednotlivých vlastností se dostaneme postupně souběžně s popisem různých částí<br />
systému. Základní rozdělení práce do samostatných vláken ukazuje Obrázek 4.13, ze kterého<br />
budeme vycházet při popisu činnosti. Číselně jsou v něm označeny kroky vedoucí od vytvoření<br />
požadavku na data až po jejich vyzvednutí. Obrázek také reflektuje názvy vláken, jak je<br />
používáme v dalším textu.<br />
4.5.1 Renderer<br />
Renderer představuje to vlákno programu, které se stará o zobrazování. Kvůli návaznosti na<br />
handle okna to často bývá zároveň hlavní vlákno, které se stará o všechno řízení a logiku. Činnost<br />
tohoto vlákna může být velmi různorodá a komplikovaná, nás však zajímá pouze to, že je to toto<br />
vlákno, kde vzniknou požadavky na nějaká data. Ty jsou způsobeny různou činností uživatele<br />
uvnitř virtuálního světa. V našem k<strong>on</strong>krétním případě je to pouze pohyb, ale obecně to mohou<br />
být i reakce na jiné události. Například rozdělání ohně ve virtuálním světě si vyžádá načtení<br />
animace hoření, která dosud nebyla použita, nebo už byla odstraněna z paměti, protože již<br />
dlouho nebyla použita. Důležité je dokázat rozpoznat situaci, která si vyžádá načtení nějakých<br />
dat, ještě dříve, než nastane, aby bylo možné skrýt zpoždění při načítání. Například v naší<br />
dem<strong>on</strong>strační aplikaci děláme podle pohybu pozorovatele predikci oblastí terénu, které budou<br />
zanedlouho vidět, a které je tedy třeba připravit. Oblasti jsou čtvercové o velikosti 128*128<br />
vzorků a v souboru je každá uložena jako souvislý blok o velikosti 8 kB pro mapu reziduí a 16 kB<br />
pro normálovou mapu.<br />
Druhou prací Renderer vlákna je zpracování příchozích dat, která vznikla na základě nějakého<br />
předchozího požadavku. V zjednodušené podobě je činnost Renderer vlákna složena ze čtyř<br />
kroků, které se provádí neustále dokola:<br />
1. Aktualizace scény.<br />
2. Vytvoření požadavků na data.<br />
3. Zpracování hotových požadavků.<br />
4. Zobrazení scény.<br />
Do aktualizace scény spadá veškerá reakce na vstup od uživatele, přepočet uběhlého času, pohyb<br />
kamery, … V případě by se zde prováděla činnost související s veškerou herní logikou atp.<br />
Vytváření požadavků předchází predikce potřebných dat. Jednak se na základě zaktualizované<br />
scény zjistí, co bude v blízké budoucnosti potřeba a ještě o to nebylo požádáno, ale také se<br />
zk<strong>on</strong>troluje, zda není některá data třeba zajistit urgentně, či zda naopak dříve vytvořený<br />
požadavek neztratil význam (uživatel se zachoval jinak, než jak dříve předurčila predikce).<br />
Všechny tyto informace se převedou na formu požadavků, případně aktualizací požadavků, a jsou<br />
předány do fr<strong>on</strong>ty na zpracování Server vláknem. Důležité je, že proces vložení požadavku do<br />
fr<strong>on</strong>ty je neblokující, takže Renderer se okamžitě může věnovat další práci a o tyto požadavky se<br />
dále nemusí starat. V další fázi se zk<strong>on</strong>troluje fr<strong>on</strong>ta příchozích dat. Ta obsahuje kladně vyřízené<br />
požadavky, které byly dříve vzneseny. Renderer vybírá požadavky, resp. data s nimi spojená, a<br />
kopíruje je do svých interních struktur, odkud probíhá zobrazování. Aby se zajistila plynulost,<br />
provede pouze omezené množství těchto operací za jeden cyklus, tj. za jeden snímek. Nak<strong>on</strong>ec<br />
provede zobrazení celé scény na základě zaktualizovaných dat.<br />
82