10.08.2013 Views

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!