Vegetace v trojrozměrné scéně



Podobné dokumenty
Zobrazování terénu. Abstrakt. 1. Úvod. 2. Vykreslování terénu

11 Zobrazování objektů 3D grafiky

13 Barvy a úpravy rastrového

Studentská tvůrčí a odborná činnost STOČ D MODELY STROMŮ PRO VYUŽITÍ V REAL-TIME APLIKACI. Michaela Brázdilová

Programátorská dokumentace

Jana Dannhoferová Ústav informatiky, PEF MZLU

Souřadnicové prostory

7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování

9 Prostorová grafika a modelování těles

Architektura počítačů

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

12 Metody snižování barevného prostoru

Návod k použití softwaru Solar Viewer 3D

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

GIS Geografické informační systémy

monitor a grafická karta

Typy geometrie v. Rhinu. Body

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

Úvod Typy promítání Matematický popis promítání Implementace promítání Literatura. Promítání. Pavel Strachota. FJFI ČVUT v Praze

Počítačová grafika RHINOCEROS

Výpočet vržených stínů

GIS Geografické informační systémy

MRBT M8. VIDITELNOST OBJEKTŮ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ. Bc. MARTIN MAŠTERA

GRAFICKÉ KARTY. Pracovní režimy grafické karty. Základní blokové schéma grafické karty

1. Vektorové algoritmy jejich výstupem je soubor geometrických prvků, např.

Hierarchický model Josef Pelikán CGG MFF UK Praha. 1 / 16

PROGRAMY PRO GIS. Formovat/formulovat problém pro aplikaci v počítači. Fungování GIS programů na základní úrovni - "uvažovat" jako počítač

Interaktivní modely pro Konstruktivní geometrii

Lekce 4 - Vektorové a rastrové systémy

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

Základy 3D modelování a animace v CGI systémech Cinema 4D C4D

2. přednáška z předmětu GIS1 Data a datové modely

Lingebraické kapitolky - Analytická geometrie

Středové promítání. Středové promítání E ~ ~ 3. dané průmětnou r a bodem S (S r) je zobrazení prostoru...

Co je grafický akcelerátor

Vektorové grafické formáty

9. přednáška z předmětu GIS1 Digitální model reliéfu a odvozené povrchy. Vyučující: Ing. Jan Pacina, Ph.D.

Voronoiův diagram. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta

PŘÍMKA A JEJÍ VYJÁDŘENÍ V ANALYTICKÉ GEOMETRII

Mezi jednotlivými rozhraními resp. na nosníkových prvcích lze definovat kontakty

Rastrová reprezentace geoprvků model polí Porovnání rastrové a vektorové reprezentace geoprvků Digitální model terénu GIS 1 153GS01 / 153GIS1

Kapitola 2. o a paprsek sil lze ztotožnit s osou x (obr.2.1). sil a velikost rovnou algebraickému součtu sil podle vztahu R = F i, (2.

Autodesk AutoCAD 2018

Katedra informatiky, Univerzita Palackého v Olomouci. 27. listopadu 2013

Rastrová reprezentace

Úvod do GIS. Prostorová data II. část. Pouze podkladová prezentace k přednáškám, nejedná se o studijní materiál pro samostatné studium.

Kreslení obrazů součástí Zobrazování geometrických těles. Zobrazení kvádru

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

Matematika 1 MA1. 1 Analytická geometrie v prostoru - základní pojmy. 4 Vzdálenosti. 12. přednáška ( ) Matematika 1 1 / 32

Pohled do nitra mikroprocesoru Josef Horálek

b) Po etní ešení Všechny síly soustavy tedy p eložíme do po átku a p ipojíme p íslušné dvojice sil Všechny síly soustavy nahradíme složkami ve sm

Popis funkcí tlačítek jednotlivých modulů programu OGAMA

G R A F I C K É K A R T Y

HVrchlík DVrchlík. Anuloid Hrana 3D síť

Prohledávání do šířky = algoritmus vlny

Interakce prostorů IIIv 7

2D transformací. červen Odvození transformačního klíče vybraných 2D transformací Metody vyrovnání... 2

Technické zobrazování

Grafická karta nebo také videoadaptér je součást počítače, která se stará o grafický výstup na monitor, TV obrazovku či jinou zobrazovací jednotku.

AGP - Accelerated Graphics Port

Digitální model reliéfu (terénu) a analýzy modelů terénu

Vývoj počítačové grafiky. Tomáš Pastuch Pavel Skrbek

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

Surfels: Surface Elements as Rendering Primitives

Zavádění inovativních metod a výukových materiálů do přírodovědných předmětů na Gymnáziu v Krnově 07_10_Zobrazování optickými soustavami 1

ANALYTICKÁ GEOMETRIE V ROVINĚ

Rastrové digitální modely terénu

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Počítačová grafika 2 (POGR2)

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 27 NÁSTROJE KRESLENÍ]

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

TECHNICKÁ DOKUMENTACE

Lekce 10 Analýzy prostorových dat

7. Geografické informační systémy.

DUM č. 14 v sadě. 31. Inf-7 Technické vybavení počítačů

Reflections, refractions, interreflections

Algoritmizace prostorových úloh

Vytvoření a úpravy geologického modelu

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

TECHNICKÁ DOKUMENTACE

Algoritmy pro shlukování prostorových dat

CVIČNÝ TEST 36. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Reprezentace 3D modelu

Vyplňování souvislé oblasti

Vzorce počítačové grafiky

Satori. Uživatelský manuál

Shodná zobrazení v rovině

Algoritmy výpočetní geometrie

Ing. Jan Buriánek. Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jan Buriánek, 2010

Topografické plochy KG - L MENDELU. KG - L (MENDELU) Topografické plochy 1 / 56

Jana Dannhoferová Ústav informatiky, PEF MZLU

Staré mapy TEMAP - elearning

Algoritmizace prostorových úloh

Novinky. Autodesk Vault helpdesk.graitec.cz,

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Obsah Přehled existujících a evidence nových klientů... 3 Přehled foto-záznamů... 4 Nahrávání foto-záznamů... 6 Analýza foto-záznamů...

Transkript:

Univerzita Hradec Králové Fakulta informatiky a managementu Katedra informatiky a kvantitativních metod Vegetace v trojrozměrné scéně (Interaktivní zobrazení trojrozměrné scény s vegetací) Bakalářská práce Autor : Jan Vašíček Aplikovaná informatika Vedoucí práce : Odborný konzultant: Mgr. Jan Vaněk Ing. Bruno Ježek, Ph.D. Hradec Králové duben 2005

Prohlášení: Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a s použitím uvedené literatury. V Kolíně dne 9.dubna 2005 Jan Vašíček

Poděkování: Děkuji vedoucímu bakalářské práce Mgr. Janu Vaňkovi a odbornému konzultantovi Ing. Brunovi Ježkovi, Ph.D. za veškerou pomoc při vypracování bakalářské práce.

Anotace Bakalářská práce se zabývá trojrozměrným zobrazováním rozsáhlé vegetace. Cílem práce je popsat dostupné algoritmy a zvolit nebo navrhnout nový přístup pro zobrazení vegetace na rozloze tisíců až desetitisíců kilometrů čtverečných. V práci je navrženo řešení na vykreslování rozsáhlé vegetace v reálném čase. Annotation This bachelor thesis deals with the three-dimensional visualization of a large-scale vegetation cover. The main aim of the thesis is to describe existing algorithms and to choose or to design a new approach that in real-time renders the vegetation covering a terrain of thousands square kilometers in size. A solution to the problem of a large-scale vegetation cover rendering in real-time is proposed in the thesis.

Obsah Seznam obrázků Seznam zkratek 1 Úvod... 1 2 Existující metody... 3 2.1 Billboardy... 3 2.2 Objemové textury... 4 2.3 Sprity a impostory... 6 2.4 Listové zjednodušování... 8 2.5 Plátkování a prolínáním... 10 2.6 Posouzení nalezených řešení... 13 3 Navrhované řešení... 15 3.1 Tvorba vrcholů... 17 3.2 Tvorba indexů... 19 3.3 Textury... 20 3.3.1 Textury jednotlivých stromů... 21 3.3.2 Dlouhá textura... 22 3.3.3 Neuspořádaná textura lesa... 23 3.4 Úrovně detailu... 24 3.5 Ořezávání... 25 4 Implementace... 27 4.1 Použité technologie... 27 5 Výsledky... 29 6 Závěr... 31 7 Odkazy... 32

Seznam obrázků Obr. 1: Povrch bez vegetace... 2 Obr. 2: Povrch s vegetací... 2 Obr. 3: Klasický billboard (vlevo) a křížený billboard (vpravo) převzato z [Szijártó03 ]... 3 Obr. 4: Buňky převzato z [Decaudin04 ]... 4 Obr. 5: Aperiodické pokrytí převzato z [Decaudin04 ]... 5 Obr. 6: Výsledky použití objemové textury převzato z [Decaudin04 ]... 6 Obr. 7: Sprite (vlevo) a rozmístění spritů ve stromu (vpravo) převzato z [Szijártó03]... 7 Obr. 8: Množství listí vykreslovaných do textury převzato z [Szijártó03]... 7 Obr. 9: Koruna stromu (vlevo) a 200 stromů tvořících les (vpravo) převzato z [Szijártó03 ]... 8 Obr. 10: Zjednodušování stromu převzato z [Inmacul02 ]... 9 Obr. 11: Výsledky použití listového zjednodušení - převzato z [Inmacul02 ]... 10 Obr. 12: Slicing box (vlevo) a primární a sekundární sada plátků (vpravo) převzato z [Jakulin2000]... 11 Obr. 13: Popis jednoho plátu buňky... 15 Obr. 14: Popis půdorysu buňky... 16 Obr. 15: Tvorba vrcholů... 18 Obr. 16: Typy vykreslování trojúhelníků... 20 Obr. 17: Textury jednotlivých stromů... 21 Obr. 18: Jedna buňka s texturou jednotlivých stromů... 22 Obr. 19: Dlouhá textura... 22 Obr. 20: Jedna buňka s dlouhou texturou... 23 Obr. 21: Neuspořádaná textura lesa... 23 Obr. 22: Jedna buňka s neuspořádanou texturou... 24 Obr. 23: Pomocný ořezávací objem... 26 Obr. 24: Vegetace s prvním nastavením... 30 Obr. 25: Vegetace s druhým nastavením... 30

Seznam zkratek CPU GIS GPU LOD UHK central procesor unit geografický informační systém graphics procesor unit level of detail Univerzita Hradec Králové

1 Úvod S nárůstem výkonu a rozšířením výpočetní techniky se stále více uplatňují i aplikace trojrozměrné počítačové vizualizace. Jednou z nejvýznamnějších oblastí nasazení výpočetní techniky jsou geografické informační systémy (dále jen GIS). GIS v současné době využívají trojrozměrné zobrazování geografických dat. Nedílnou součástí každého zemského povrchu je i vegetace, bez ní je vykreslený terén neúplný a působí nepřirozeně (viz Obr. 1 a 2). Proto je nezbytné vykreslovat povrch i s vegetací, aby byla krajina kompletní, měla přirozený vzhled a poskytovala co nejvíce informací. Pojem vegetace je velice široký, tento termín zahrnuje stromy, keře, trávu, mechy a další. Z tohoto důvodu jsou používána data vztahující se pouze ke stromům, protože zobrazování menších objektů na rozlehlém území by bylo výpočetně velice náročné. Tato práce si klade za cíl nalézt nebo vytvořit přístup pro zobrazování vegetace, kterým ji bude možné zobrazovat v reálném čase na území o rozloze tisíců až desetitisíců km 2. Vegetace by měla být pozorována z ptačí perspektivy, neboť je kladen důraz na její celkové zachycení, více než na reálný vzhled jednotlivých stromů. Přesto by měly stromy vypadat co nejvěrohodněji a výsledná vegetace tvořená těmito stromy by měla mít reálnou hustou zalesnění. Konečný vybraný nebo navržený přístup bude testován na prototypu implementovaném jako aplikace, která bude interaktivně komunikovat s uživatelem. V následujících kapitolách se budeme zabývat přístupy pro řešení, některými problémy spojenými s implementací a testováním vytvořené aplikace. 1

Obr. 1: Povrch bez vegetace Obr. 2: Povrch s vegetací 2

2 Existující metody Kapitola se zabývá nalezenými existujícími přístupy řešení problematiky zobrazování vegetace v reálném čase. Na konci kapitoly je provedeno posouzení nalezených přístupů. 2.1 Billboardy Jedna z nejstarších, nejjednodušších a nejrozšířenějších technik real-time zobrazování vegetace využívá k reprezentaci stromů billboardy. Je popsána například v [Decaudin04], [Szijártó03] nebo [Inmacul02]. Díky tomu, že billboardy jsou velmi nenáročné na výkon počítače, jsou stále považovány za jednu z nejlepších technik pro současné průmyslové simulátory. Metoda má dva odlišné směry. První z nich je klasický billboard, což je čtyřúhelník potažený kvalitní texturou. Při zobrazování je vždy plochou otočen ke kameře a většinou se otáčí kolem vertikální osy, která prochází jeho středem (viz Obr. 3 vlevo). Druhý směr se nazývá křížený billboard. Skládá se ze dvou až čtyř čtvercových nebo obdélníkových ploch křížících se navzájem (viz Obr. 3 vpravo). Obr. 3: Klasický billboard (vlevo) a křížený billboard (vpravo) převzato z [Szijártó03 ] V první metodě se neprojevuje žádná paralaxa při pohybu kamery a nehodí se tedy příliš pro objekty, které nejsou osově souměrné. Vykreslovaný les musí být řídký, protože strom, který je těsně za jiným, by mohl při změně úhlu pohledu přejít náhle do popředí. Obě metody mají společný nedostatek v mizení stromů při pohledu shora. Při pohybu kamery nad takto vykresleným lesem se stromy pod pozorovatelem zobrazují jako roviny 3

kolmé k průmětně. U křížených billboardů se tento problém řeší přidáním dalšího čtyřúhelníku, na němž je nanesena textura koruny stromu. Tento čtyřúhelník bývá rovnoběžný se zemí. Ani jedna metoda nezahrnuje schéma úrovně detailu (dále jen LOD) pro jednotlivé stromy, protože se vytvořené stromy nedají více zjednodušit. Velmi hustý les vykreslovaný za pomoci této techniky by se skládal z miliónů otexturovaných čtyřúhelníků, což by bylo náročné i s moderním grafickým hardwarem. 2.2 Objemové textury Přístupem založeným na využití objemových textur se zabývá Decaudin a kol. v [Decaudin04]. Metoda kombinuje objemové textury a aperiodické pokrytí. Reprezentace lesa poskytuje kvalitní vykreslování díky vhodně zvolenému 3D nelineárnímu filtrování a spoléhá se na LOD a strukturu k udržení real-time výkonu, která je přátelská ke grafickému procesoru (dále jen GPU). Objemová textura reprezentuje pokrytí povrchu porostem. Použití objemové textury se skládá z nanášení 3D vrstev na povrch užívající 3D data k nastavení textury. Pro účely hardwarového urychlení je objem vykreslován pomocí sady plátků, která je autorem označována jako texcell a zde jako buňka. Nakonec jsou plátky v každé buňce otexturovány. Mezi výhody patří perfektní paralaxa, protože vytvářené plátky mají vlastní hloubku, a filtrování, jež je hladce řízeno texturovacím hardwarem. Obr. 4: Buňky převzato z [Decaudin04 ] 4

V přístupu jsou vytvářeny dva odlišné druhy buněk. Jednoduché pravidelné buňky (regular texcell), které mají dobrý výkon a kvalitu, ale nejsou vhodné pro zobrazování lesů blízko obrysu povrchu, a obrysové buňky (silhouette texcell). Pravidelné buňky (viz Obr. 4) jsou adaptovány pro většinu scény a tvoří je plátky rovnoběžné s povrchem. Lze je jednoduše vytvořit z povrchu a zároveň jsou efektivní, protože se jejich geometrie nemusí obnovovat a transformovat z CPU v každém snímku. Tento model je věrný až do doby, kdy se začíná projevovat a zvětšovat chyba paralaxy. V důsledku této chyby jsou jednotlivé plátky rozeznatelné, a proto se přechází k obrysovým buňkám (viz Obr. 4), které se spoléhají na orientované vytváření plátků. Tyto plátky jsou natočeny směrem k pozorovateli. Otáčení jednotlivých plátků je jednoduše prováděno vertikálním posunem jejich vrcholů. To dovoluje transformovat polygony předtím uchované v GPU místo jejich opětovného vytváření v CPU a tímto se samozřejmě omezuje provoz na sběrnici. V reprezentaci pravidelných buněk se místo 3D textury vytváří sada 2D textur, která koresponduje s plátky. Každá textura v 2D sadě má připojenou MIP-MAP pyramidu a zároveň se vytváří LOD pyramida sady. Pro reprezentaci obrysových buněk je použita 3D textura. LOD použité v tomto řešení závisí na vzdálenosti pozorovatele od slices a úhlu mezi směrovým vektorem pozorovatele a normálovým vektorem plátků. Obr. 5: Aperiodické pokrytí převzato z [Decaudin04 ] 5

Pokrytí terénu buňkami je prováděno pomocí aperiodického schématu. V tomto schématu mají buňky tvar trojúhelníků, které jsou mezi sebou různě hranově kompatibilní (viz Obr. 5). Je vyrobeno 16 možných trojúhelníků směřujících na sever a na jih, pro úsporu paměti z nich bylo však vybráno pouze 8 (4 směřují na jih a 4 na sever). Použitím výše popsaného řešení byl pokryt povrch lesem skládajícím se z 2 300 stromů a obnovovací frekvence se pohybovala mezi 25 a 40 snímky za vteřinu. Bylo použito 576 buněk a každá obsahovala 4 stromy. Také byl implementován rozlehlejší les skládající se z 37 000 stromů a z 9 212 buněk. Při těchto parametrech dosahovala obnovovací frekvence 20 až 30 snímků za vteřinu. Výsledky byly měřeny na osobním počítači s procesorem Pentium 4 o frekvenci 1.7 GHz a grafickou kartou GeForceFX 5800. Výstupní rozlišení bylo 640 x 480. Velikost objemových dat byla 128 plátků o rozměrech 256x256 s 32bitovou hloubkou barev. Výsledky implementace jsou zobrazeny také na Obr. 6. Obr. 6: Výsledky použití objemové textury převzato z [Decaudin04 ] Tato metoda je schopná zobrazovat velmi rozsáhlé terény pokryté vegetací a to i s vysokým stupněm detailu. Ale na druhou stranu se při zvyšování množství stromů ve scéně zvyšuje náročnost aplikace. 2.3 Sprity a impostory Tento algoritmus je popsán v [Szijártó03] a představuje zlepšené vykreslování pomocí impostorů, které má dvě hlavní části. První se skládá z pohledově závislé operace vykreslující do textury. Toto vykreslování je vlastní tvoření impostoru. V druhé části je vytvořená textura nanesena na sprite nebo billboard. 6

Sprity jsou plochy obdélníkového nebo čtvercového tvaru, které jsou vždy orientovány na pozorovatele (viz Obr. 7 vlevo). Algoritmus vytváří výsledný obraz koruny stromu z více než jednoho spritu. Kdyby však byly použity pouze sprity, vznikl by velmi nerealistický obraz. Algoritmus proto používá pohledově závislých impostorů, aby eliminoval tento problém. Hloubka je zavedena do procedury vykreslování do textury. Při vykreslování je informace o hloubce uložena v texturách s alpha kanálem. Výsledkem je poté 2,5D impostor. Obr. 7: Sprite (vlevo) a rozmístění spritů ve stromu (vpravo) převzato z [Szijártó03] Impostory jsou tvořené texturami, do kterých jsou vykresleny libovolné skupiny náhodně uspořádaného listí. Tato textura je poté implementována na více spritů, aby se vytvořila požadovaná koruna stromu. Kvalita vytvořeného obrazu a pocit realismu se dramaticky zvyšuje, i když je stejný impostor použit pro celý strom. Obr. 8: Množství listí vykreslovaných do textury převzato z [Szijártó03] Výsledek implementace byl testován na osobním počítači s procesorem Athlon o frekvenci 1,2 GHz a grafickou kartou GeForce4. Výsledky implementace jsou velice závislé na třech parametrech. První je množství vykreslovaných stromů, další je počet 7

spritů tvořících korunu stromu a poslední je množství listí vykreslovaných do textury (viz Obr. 8). Samotné výsledky představuje Tabulka 1. Výsledky implementace jsou ukázány na Obr. 9. počet stromů 1 2 4 8 16 32 64 128 256 128 spritů s 512 listy 210 198 170 128 83 46 25 13,1 6,7 64 spritů s 256 listy 214 207 189 158 116 72 42 23 13 32 spritů s 128 listy 215 209 199 179 145 103 65 38 22 Tabulka 1: Počet snímků za vteřinu převzato z [Szijártó03 ] Obr. 9: Koruna stromu (vlevo) a 200 stromů tvořících les (vpravo) převzato z [Szijártó03 ] 2.4 Listové zjednodušování Přístup popsaný v [Inmacul02] spojuje dvě real-time metody vykreslování: dynamické generování impostoru a multiresolution modelovací techniku. Multiresolution modelování se dělí do dvou skupin: diskrétní a spojité. Diskrétní modely mají konečné množství LOD a vlastní řídící mechanismus. Tyto modely mají řadu nevýhod. Mezi uchovávanými LOD nejsou žádné vztahy, tudíž rychle stoupá velikost těchto modelů při zařazení nové úrovně detailu. Na druhou stranu spojité modely obsahují veliké množství aproximací povrchu objektu. Modely tedy nabízejí adaptivní LOD v real-time, což zrychluje vizualizaci. V [Inmacul02] byl navržen speciální spojitý multiresolution model pro strom. Listy jsou vymodelovány jako množství nezávislých polygonů. Díky užití speciálního modelu pro stromy můžeme adaptovat různé množství polygonů v závislosti na důležitosti stromu ve scéně. Je-li pozorovatel tak blízko, že může vidět detaily objektu, bude impostor kombinovaný s geometrií. Zadní část stromu bude reprezentována s méně detaily a impostorem. Přední část stromu bude naopak vykreslena jen s vlastní geometrií. Stromy 8

tak vypadají opravdu 3D, což u klasických obrazově založených metod neexistuje. V tomto přístupu jsou stromy rozděleny do dvou hlavních částí: pevné části stromu (kmen stromu a větve) a na korunu stromu (listy a větévky). Pevné části stromu jsou tvořeny trojúhelníkovou sítí a koruna stromu je tvořena množstvím nezávislých polygonů. V modelu je pro korunu vytvořen zjednodušující algoritmus. Ten při přechodu z jedné úrovně detailu do další spojuje polygony nebo listy do jednoho polygonu. Zjednodušování stromu je vidět na Obr. 10. Obr. 10: Zjednodušování stromu převzato z [Inmacul02 ] Při implementaci byly použity stromy, které byly vymodelovány pomocí komerční aplikace Xfrog. Stromy se skládaly z 4 791 listů tedy z 9 582 trojúhelníků. Počítač, na kterém byla implementace testována, obsahoval dva procesory Pentium III Xeon na 1.5GHz a grafickou kartu NVIDIA Quatro2 Pro s pamětí o velikosti 64MB. Při testu se pozorovatel ve scéně pohyboval a zároveň se v ní zvyšovalo množství stromů. Výsledky jsou vidět v Grafu 1. 9

Graf 1: Závislost frekvence vykreslování na počtu stromů převzato z [Inmacul02 ] Výsledky jsou vidět na Obr. 11. Obr. 11: Výsledky použití listového zjednodušení - převzato z [Inmacul02 ] 2.5 Plátkování a prolínáním Přístup uvedený v [Jakulin2000] je založený na plátkování a prolínání. Přístup vychází z obrazově založeného vykreslování, které se dále spojuje pouze s mícháním textur polygonů. Tento přístup rozděluje strom na dvě hlavní části: pevné a rozptýlené. Pevné části jsou tvořeny kmenem stromů a hlavními větvemi, druhou část stromu tvoří větvičky a listy. Rozptýlené části obsahují většinu geometrické složitosti modelu, a proto je tato část stromu zobrazována menším množstvím paralaxových vrstev, které poskytují plný vjem hloubky při pozorování stromu z přibližně stejného směru. Každá taková vrstva leží na pevném místě ve scéně. Všechny vrstvy jsou rovnoběžné a stejně vzdálené. Sada takových vrstev je v tomto přístupu nazývána slicing. 10

Slicing je zobrazován vykreslením všech vrstev, z nichž je složen. Orientace sady vrstev je stále stejná a nemění se vůči orientaci pozorovatele. Všechny vrstvy v sadě mají stejný normálový vektor a vzdálenost mezi vrstvami se rovná velikosti normálového vektoru. Slicing je obklopován slicing boxem (viz Obr. 12 vlevo) definovaným středem c s, výškou h s a šířkou w s. Každá vrstva v sadě je tvořena otexturovaným čtyřúhelníkem. Vrcholy vrstev leží na průsečících hran slicing boxu a jednotlivých ploch tvořících vrstvy. Množství vrstev tvořící slicing závisí na požadované kvalitě vykreslení, ale 3 až 7 vrstev je pro strom optimální. LOD jsou tvořeny používáním různého počtu vrstev ve slicing. Nejvíce vrstev je použito, je-li pozorovatel nejblíže stromu a při vzdálenosti, kdy není možné rozeznat paralaxu, je použita pouze jedna vrstva. Obr. 12: Slicing box (vlevo) a primární a sekundární sada plátků (vpravo) převzato z [Jakulin2000] Jednotlivé sady plátků ale neobsahují dost informací pro pozorování stromu ze všech možných úhlů, proto musí být vypočítáno větší množství sad, jenž budou vytvořeny z různých úhlů, které jsou okolo modelu rovnoměrně rozloženy. Přepínání mezi jednotlivými sadami závisí na úhlu, který se vypočítává ze směrového vektoru sady a směrového vektoru ze středu sady k pozorovateli. To by vedlo k náhlým přepínáním mezi jednotlivými sadami, proto se zobrazují dvě sady stromu: první nejbližší, označována jako primární sada plátků, a druhá nejbližší, nazývaná sekundární sada plátků (viz Obr. 12 vpravo). Zároveň se rozlišuje jejich úroveň průhlednosti. Průhlednost sady je úměrná rozdílu úhlu mezi primární a sekundární sadou. Je-li úhel primární sady roven 0, pak je sekundární sada úplně průhledná. Jestliže jsou úhly primární a sekundární sady stejné, měly by být koeficienty neprůhlednosti obou sad 11

shodné. Koeficient neprůhlednosti primární sady, označován jako α p, se pohybuje mezi 1 a 0,5. U sekundární sady je koeficient označený α s a je roven 1- α p. Výše popsaná metoda byla implementována s využitím rozhraní OpenGL. Model stromu byl automaticky vygenerován a pak manuálně rozdělen na pevné a rozptýlené části. Trojúhelníková síť pevné části stromu byla manuálně zjednodušena, zatímco rozptýlené části stromu byly použity pro vytvoření textur. Jako software pro tvorbu textur byl využit nemodifikovaný POVRay ray tracing. Každá sada obsahovala 5 vrstev a pro jednotlivý strom bylo vytvořeno 6 sad po 60. Koruna stromu byla tedy vykreslena ze 40 vrcholů, což znamená 10 trojúhelníků. Kmen a hlavní větve byly vykresleny přibližně z 200 trojúhelníků. Osobní počítač, na kterém byla tato metoda implementována, byl sestaven z procesoru Pentium II na 350 MHz a grafické karty NVIDIA GeForce256 DDR. Rozlišení aplikace bylo 640x480. Výsledky implementace jsou uvedeny v Tabulce 2. množství stromů 10 32 100 158 rychlost vykreslení [ms] 10 30 50 90 Tabulka 2: Výsledky v tabulce převzaty z [Jakulin2000 ] 12

2.6 Posouzení nalezených řešení Aby bylo možné posoudit nalezené přístupy, je nutné definovat pojem vegetace na rozsáhlém území. Vzhledem k současným schopnostem hardwaru a požadavkům trojrozměrných GIS. Jako vhodný příklad pro další úvahy poslouží terén s rozlohou 50x50 km (2 500 km 2 ). Hustota průměrného vzrostlého lesa mírného pásu je kolem 175 stromů na hektar 1, tedy 17 500 stromů na 1 km 2, což na uvažovaném terénu představuje pokrytí skládající se z 43 750 000 stromů. U algoritmů budeme sledovat počet trojúhelníků na jeden strom. Počet závisí na LOD každého přístupu a není možné ho zjistit bez implementace všech algoritmů, která však přesahuje rozsah této práce. Protože ve všech popsaných metodách jsou pro zobrazování předpokládány stromy různých úrovní detailu, postačuje pro posouzení použitelnosti metod pro vykreslování na rozsáhlém území odhad minimálního počtu trojúhelníků na jeden strom při nejnižší úrovni detailu všech stromů. Pro porovnání metod slouží Tabulka 3, která obsahuje pro každý přístup odhadované minimální množství trojúhelníků na jeden strom při nejnižší LOD a zároveň množství trojúhelníků potřebných na vykreslení dané vegetace při použití nejnižší LOD pro všechny stromy. Přístup Počet trojúhelníků na jeden strom při nejnižší LOD Počet trojúhelníků pro 43 750 000 stromů Billboardy Objemové textury Sprity a impostory Listové zjednodušení Plátkování a prolínání 2 0,25 2 2 54 87 500 000 10 937 500 87 500 000 87 500 000 2 362 500 000 Tabulka 3: Počty trojúhelníků 1 Dle údajů Správy Krkonošského národního parku 13

Z Tabulky 3 vyplývá, že by každý přístup, až na Objemové textury, měl při nejnižší LOD nejméně dva trojúhelníky na jeden strom, protože by byl reprezentován např. pouze impostorem nebo billboardem. Objemové textury mají nižší množství trojúhelníků na jeden strom, bylo by je ale možné použít jen pro vegetaci, která by byla tvořena pouze poslední úrovní detailu tohoto přístupu. Kvalita takto vytvořené vegetace by byla nevyhovující a nepůsobila by realisticky. Běžně dostupné grafické akcelerátory střední třídy, jako jsou ATI Radeon 9800XT nebo nvidia GeForceFX 5950 Ultra, zobrazují teoretické maximum kolem 400 miliónů trojúhelníků za vteřinu. Pro udržení frekvence vykreslování alespoň 25 snímků za vteřinu by tedy složitost scény nesměla překročit 15 miliónů trojúhelníků. Z toho vyplývá, že žádný z nalezených přístupů není vhodný a je potřeba navrhnout nový. V následujících kapitolách bude popsáno autorem navržené a implementované řešení. 14

3 Navrhované řešení V předchozí kapitole bylo ukázáno, že pro zobrazení více jak jednoho miliónu stromů vytvářejících vegetaci je potřeba zredukovat množství trojúhelníků tvořících strom ve scéně na méně než jeden trojúhelník. Toho lze dosáhnout použitím plátů. Plát je reprezentován čtyřmi koplanárními body ležící v rovině, která svírá pravý úhel s povrchem, na němž by měla být vegetace vykreslena. Z bodů se vytvoří dva trojúhelníky pomocí nichž je plát vykreslen (viz Obr. 13). Na tyto trojúhelníky je nakonec nanesena textura obsahující několik desítek až stovek stromů. Na tvorbu vegetace by bylo použito více plátů, které by byly rovnoběžné a uspořádané v řadě za sebou. To by ovšem bylo možné použít pouze tehdy, jestliže by se pozorovatel ve scéně nepohyboval a jeho směrový vektor pohledu by byl rovnoběžný s normálovým vektorem plátu. Jinak by při pohybu pozorovatele okolo stromů docházelo k jejich mizení (např. kdyby se úhel mezi směrovým vektorem pozorovatele a normálovým vektorem plátu pohyboval blízko pravému úhlu). Řešením tohoto problému je vytvořit stejné množství dalších plátů upevněných ve scéně tak, aby byly na předešlé pláty kolmé a navzájem se křížily v předem stanovených bodech. Tyto pláty budeme nazývat sekundární pláty a předešlé pláty primární. Počet primárních a sekundárních plátů je stejný a musí být zajištěno, aby se každý primární plát křížil se všemi sekundárními (viz Obr. 14). vrcholy plátu trojúhelníky Obr. 13: Popis jednoho plátu buňky Na jednu stranu ve vytvořené vegetaci zaniká problém s mizením stromu při pohybu pozorovatele okolo vegetace a množství trojúhelníků tvořící strom se pohybuje pod hranicí jednoho trojúhelníku (např. vegetace skládající se z jednoho miliónu stromů bude tvořena jedním tisícem primárních a stejným množstvím sekundárních plátů, na kterých bude textura obsahující tisíc stromů, a množství trojúhelníků na jeden stromu tedy 15

bude 0,004). Ale na druhou stranu je tu problém s povrchem, na němž se vegetace rozkládá. Tento povrch by musel být dokonale rovný, což v reálném světě neexistuje. rohy buňky sekundární pláty střed buňky primární pláty Obr. 14: Popis půdorysu buňky Kvůli tomuto problému byla vegetace rozdělena na jednotlivé buňky, které mají tvar čtverce. Buňky aproximují povrch, na němž se vegetace rozkládá. Každá buňka je charakterizována svým středem, výškou, šířkou, hloubkou, počtem plátů a čtyřmi vrcholy reprezentujícími rohy buňky. Výška buňky určuje výšku primárních a sekundárních plátů a zároveň velikost lesa v této buňce. Délka primárních plátů se rovná hodnotě šířky buňky a hloubka buňky udává délku sekundárních plátů. Další vlastností buňky je počet primárních respektive sekundárních plátů určující hustotu vegetace v dané buňce. Posledním parametrem jsou rohy buňky, ze kterých se vypočítávají vrcholy jednotlivých primárních a sekundárních plátů vytvářejících vegetaci v buňce. Při rozdělení vegetace na buňky se změní i počet trojúhelníků na jeden strom např. při zobrazení jednoho miliónu stromů by se vegetace rozdělila na 400 buněk a každá z nich by obsahovala 2 500 stromů, 50 primárních a 50 sekundárních plátů, poté by se počet trojúhelníků na jeden strom rovnal 0,08. Za předpokladu, že by všechny buňky měly shodné vlastnosti, by vytvořená vegetace nebyla dostatečně realistická, vypadala by příliš vyrovnaně. Pro vytvoření většího realistického vzhledu vegetace by bylo vhodné zavést variabilitu u vlastností výška buňky a počet primárních a sekundárních plátů. Tím bude dosaženo rozdílů ve 16

výšce a hustotě lesa mezi jednotlivými buňkami a vytvořená vegetace by již neměla tak nerealistický vzhled. 3.1 Tvorba vrcholů Vypočítávání vrcholů, ze kterých se vytvářejí pláty reprezentující vegetaci, je jednou z nejdůležitějších částí algoritmu. Tvorba vrcholů je velice jednoduchá a používají se pro ní rohy buňky a lineární interpolace. Spodní vrcholy plátů leží na úsečce spojující každé dva sousední rohy buňky, takže pro výpočet jejich souřadnic bude použita lineární interpolace. Nejprve se spočítá vzdálenost mezi dvěma primárními nebo sekundárními pláty, kterou označíme jako d. Tato vzdálenost je mezi pláty všude stejná. Vypočteme ji jako poměr délky buňky a počtu jednoho druhu plátů (d = délka buňky/počet plátů). Pro další krok je důležité označit si rohy buňky. Spodnímu levému rohu přiřadíme číslovku jedna a následujícím rohům ve směru proti hodinovým ručičkám přiřazujeme číslovku o jednu vyšší (Obr. 15 šedá šipka). Po označení rohů můžeme přejít k vytváření vrcholů. Vybereme si první dvojici rohů buňky (jedna a dva), poté mezi nimi vypočítáme, pomocí lineární interpolace, první bod, který by měl ležet v polovině vzdálenosti d od rohu buňky číslo jedna směrem k číslu dvě. Další bod bude ležet ve stejném směru, ale ve vzdálenosti, která je o d větší. Postup se opakuje pro ostatní body mezi vybranými rohy buňky. Vzdálenost d/2 pro výpočet prvního vrcholu mezi rohy buňky byla použita, aby nevznikaly pláty na hranách buňky. Takovéto pláty by se s pláty sousedních buněk, ležících na hraně, spojovaly a ve výsledku by vypadaly jako jeden plát. Použitím této vzdálenosti se splynutí plátů eliminuje a využijí se všechny pláty pro reprezentaci vegetace. Celý postup se zopakuje pro další hranu buňky, ale pro poslední dvě hrany buňky se obrátí pořadí rohů pro snadnější generování indexů. Oranžová šipka na Obr. 15 ukazuje směr vytváření vrcholů na jednotlivých hranách buňky. Takto by se vypočítaly pouze dolní vrcholy plátů. Horní vrcholy plátů vzniknou připočtením hodnoty výšky vegetace v dané buňce k jedné ze souřadnic vrcholu, která udává vertikální polohu bodu ve scéně. 17

4 d/2 3 d d d/2 1 2 Obr. 15: Tvorba vrcholů Vypočtené vrcholy by se měly ukládat do jednoho vertex bufferu tak, aby za každým dolním vrcholem byl uložen vrchol ležící nad ním. Celý postup vytváření vrcholů je také ukázán v pseudo jazyku v následujícím odstavci. vzdálenost = 1 / početplátů; pro i od 0 až do 4 začátek h = 0; pro j od 0 do početplátů začátek když j = 0 pak h = h + (vzdálenost/2); jinak h = h + vzdálenost; konec když když i < 1 pak spodnívrchol=lininter(h,prvníroh,druhýroh); jinak spodnívrchol=lininter(h,druhýroh,prvníroh); konec když hornívrchol = spodnívrchol + výškavegetace; konec pro j konec pro i Funkce lininter(h,prvníroh,druhýroh) představuje funkci lineární interpolace mezi rohy buňky a vrací vypočtený spodní vrchol. Parametr h udává vzdálenost v procentech od rohu buňky, který je na dané hraně buňky první v pořadí. Na postup vytváření vrcholů plátů těsně navazuje algoritmus pro vytváření indexů k jednotlivým vrcholům. 18

3.2 Tvorba indexů Další důležitou částí celého algoritmu je vytváření indexů k jednotlivým vrcholům plátů. K vykreslování plátů v jedné buňce je použito dvou bufferů. Vertex buffer uchovává vrcholy všech plátů v buňce a index buffer uchovává indexy pro jednotlivé vrcholy. Indexy představují pozici vrcholu ve vertex bufferu. Aby bylo dosaženo maximálního využití grafického akcelerátoru, měly by být trojúhelníky vykresleny pomocí obou bufferů jedním voláním bez přerušení. Proto byla zvolena metoda jejich vykreslování nazvaná Triangle list, kde je každý trojúhelník tvořen třemi samostatnými body a do index bufferu se tedy zapisují tři indexy na každý trojúhelník (viz Obr. 16). Existují ještě další dvě metody Triangle strip a Triangle fan. Triangle strip je určen pro vykreslování pásů trojúhelníků, kdy je první trojúhelník pásu tvořen třemi vrcholy a další trojúhelníky se vytvoří pomocí jednoho nového bodu a dvou posledních bodů předchozího trojúhelníku (viz Obr. 16). Tato metoda není vhodná, protože by bylo nezbytné přerušit proces vykreslování po každém vykreslení dvou trojúhelníků tvořících jeden plát. Druhá nepoužitá metoda, Triangle fan, se používá pro popis vějíře složeného z trojúhelníků, kde je první trojúhelník vytvořen třemi body a další trojúhelníky jedním novým bodem, bodem ve středu vějíře a posledním bodem předchozího trojúhelníku (viz Obr. 16). Důvod nepoužití této metody pro vykreslování plátů je shodný jako u předchozí metody. 19

Triangle Strip 1 2 3 4 5 Index Buffer 1 6 2 7 3 8 4 9 5 10 6 7 8 9 10 Triangle Fan 2 1 3 4 5 Index Buffer 1 2 3 4 6 7 7 6 Triangle List 2 3 5 8 Index Buffer 1 4 6 7 9 1 2 3 4 5 6 7 8 9 Obr. 16: Typy vykreslování trojúhelníků Pro každý plát je podle vybrané metody potřeba uložit do index bufferu šest indexů. Postup pro výběr indexů je svázán s algoritmem pro generování vrcholů. Do index bufferu se pro první trojúhelník libovolného plátu v buňce uloží pořadí spodních vrcholů ve vertex bufferu a přidá se index jednoho horního vrcholu. Pro druhý trojúhelník plátu se za uložené indexy prvního trojúhelníku umístí pořadí horních vrcholů a jako poslední index plátu se přidá pořadí vrcholu jehož horní vrchol netvoří první trojúhelník. Pomocí tohoto postupu naplníme celý index buffer všemi pláty buňky. 3.3 Textury Textura je popisem vlastností povrchu objektu a je důležitá pro vnímání jeho barvy a struktury. Nanášení textury na objekt vede ke zvýšení jeho vizuální kvality a zároveň je to výpočetně nenáročný proces. Z tohoto důvodu je intenzivně používána zejména v časově náročných aplikacích. Důležitým krokem pro používání textur je jejich nanesení na objekt. Tento postup se nazývá mapování textury a je popsán například v [Žára2004]. O tento proces se v současné době starají grafické karty, kterým stačí pouze zadat požadovanou texturu 20

a body plochy, na níž má být textura nanesena. U bodů je navíc nutné určit jejich umístění v textuře. Toto umístění je v literatuře označováno jako u a v pro dvourozměrné a u,v a w pro trojrozměrné textury. Pro určení průhlednosti povrchu na otexturovaných objektech používáme alpha test. Test stanovuje část nebo části textury, které budou na základě hodnoty alpha průhledné. Alpha test je popsán v [DX9SDK]. Ve výsledku, při použití tohoto testu, jsou na obrazovce zobrazeny pouze stromy. Pro kvalitní vykreslení vegetace je potřeba vytvořit texturu, případně více textur, které nejvěrněji reprezentují vegetaci. Proto bylo vytvořeno a odzkoušeno několik druhů textur, které jsou popsány níže. 3.3.1 Textury jednotlivých stromů Grafické karty mají integrovanou funkci míchání textur. Tato funkce vytvoří z několika různých textur jednu výslednou texturu, která je použita pro zobrazení vegetace. Prvním krokem je vytvoření obrázků jednotlivých stromů, které jsou rozděleny na dvě poloviny, přičemž každá z nich je umístěna do jiné textury. Výchozí textury Výsledné textury s neodfiltrovaným pozadím Obr. 17: Textury jednotlivých stromů Poté jsou pro každý plát náhodně vybrány dvě textury. První představuje levou a druhá pravou půlku stromu. Tyto textury jsou pak grafickou kartou smíchány a pomocí funkce kopírování textury, jež je také integrovaná v grafické kartě, nakopírovány do jedné výsledné textury vegetace pro daný plát. Při použití této textury a další, níže popsané, je 21

nutné, aby bylo zajištěno křížení primárních a sekundárních plátů ve středu každého stromu v textuře. Ukázky výchozích a výsledných textur pro jednotlivé pláty jsou na Obr. 17. Obr. 18: Jedna buňka s texturou jednotlivých stromů 3.3.2 Dlouhá textura Pojem dlouhá textura představuje jednu texturu skládající se z mnoha různých stromů, které jsou symetrické. Stromy jsou v textuře rozmístěny, tak aby byly od sebe stejně vzdáleny. Abychom zajistili různorodost v otexturovaných plátech, musíme náhodně vygenerovat umístění textury na plátu tak, aby otexturovaný plát začínal a končil celým stromem. Ukázka textury je na Obr. 19. Na Obr. 20 je ukázka použití textury v buňce. Obr. 19: Dlouhá textura 22

Obr. 20: Jedna buňka s dlouhou texturou 3.3.3 Neuspořádaná textura lesa Tento druh textury obsahuje veliké množství stromů umístěných neuspořádaně, které se dokonce mohou libovolně překrývat. Z toho vyplývá, že se nemusí zajišťovat křížení plátů ve středech stromů. Stejně jako v předchozí textuře i zde je nezbytné zabezpečit různorodost otexturovaných plátů pomocí náhodně vygenerovaného umístění textury na plátu. Na druhou stranu však není zapotřebí, aby otexturovaný plát začínal a končil celým stromem. Ukázka textury je na Obr. 21 a na Obr. 22 je opět ukázáno použití textury v buňce. Obr. 21: Neuspořádaná textura lesa 23

Obr. 22: Jedna buňka s neuspořádanou texturou Všechny výše popsané druhy textur byly implementovány. Na základě toho bylo zjištěno, že pro zobrazení vegetace pomocí našeho řešení je nejvhodnější použít poslední dva druhy textur. Při použití prvního druhu textury bylo docíleno variability v otexturovaných plátech, ale tato variabilita nebyla dostatečná. Proto je velice pravděpodobné, že by pozorovatel zanedlouho zaznamenal opakující se části textur. V otexturovaných plátech se totiž opakují vybrané půlky stromů, což vypadá velice nerealisticky. Používáním dalších druhů textur vzniká vysoká rozmanitost ve vytvořených stromech, která působí realisticky. 3.4 Úrovně detailu Zjednodušení scény je další nezbytnou součástí zobrazovacího procesu. Není totiž nutné zobrazovat objekty situované ve velké vzdálenosti od pozorovatele s úplnými detaily, protože s rostoucí vzdáleností mezi pozorovatelem a objektem se pro daný objekt zmenšuje množství pixelů, které na obrazovce zabírá. Po zmenšení množství pixelů pak nelze rozeznat všechny detaily objektu. Navíc toto zjednodušení pomáhá urychlit proces vykreslování. 24

V našem řešení je zjednodušování scény prováděno pomocí diskrétních úrovní detailu, které jsou popsány v [Žára2004]. Nejvyšší úroveň vždy reprezentuje objekt s maximálními detaily a nejnižší představuje co nejvíce zjednodušenou reprezentaci objektu, která je ovšem akceptovatelná jako náhrada původního objektu. Pláty v buňce nelze víc zjednodušit, a proto se při různých úrovních detailu mění počet zobrazovaných primárních a sekundárních plátů. Kritéria, podle kterých stanovujeme úrovně detailu, jsou dvě: vzdálenost mezi pozorovatelem a buňkou a dále úhel mezi směrovým vektorem pozorovatele a normálovým vektorem plátů buňky. První kritérium se vypočítává jako vzdálenost mezi pozorovatelem a středem buňky. V závislosti na ní se mění počet primárních a sekundárních plátů, které mají být vykresleny. Druhé kritérium udává jaký druh plátů se má být zobrazen. Je totiž zbytečné zobrazovat oba druhy plátů u nižších stupňů detailu, protože jeden typ plátů při pohybu pozorovatele okolo buňky většinou mizí. Úhel pro přepínání mezi jednotlivými druhy plátů byl stanoven na 45 stupňů. Kdybychom ale toto přepínání použili, docházelo by k náhlému přepínání mezi jednotlivými druhy plátů, což by ve výsledku vypadalo velice nerealisticky. Proto je nutné zavést pro přepínání třetí stav, kdy se zobrazují oba druhy plátů. Pro tento stav je dobré stanovit rozmezí dvou úhlů ( např. 40 až 50 stupňů). Přidáním toho stavu se zamezí nerealistickému přepínání mezi jednotlivými druhy plátů. V našem řešení vytváříme n úrovní detailu. Při nejvyšším stupni detailu se vykreslují všechny pláty tvořící buňku. Při přechodu na nižší úroveň se ubírá 1/n celkového počtu jednoho druhu plátů z primárních a sekundárních plátů. Nejnižší úroveň je tedy tvořena 1/n množství obou druhů plátů. 3.5 Ořezávání Pro potřebu rychlého vykreslování scény s velikým množstvím objektů s ohledem na viditelnost je potřeba stanovit, které objekty můžeme z dalšího zpracování v zobrazovacím řetězci vyloučit a které naopak podrobit důkladnému vyhodnocení viditelnosti. Dnes jsou již tyto postupy, jako např. odstranění odvrácených stěn a odstranění grafických primitiv pohledovým objemem (obě metody jsou vysvětleny v [Žára2004]), implementovány v grafickém procesoru, ale ten jejich vyhodnocení provádí poměrně pozdě v zobrazovacím řetězci. Většina moderních zobrazovacích systémů proto provádí odstranění grafických primitiv pohledovým objemem ještě před jejich posíláním do grafického procesoru. 25

Pro vyhodnocování viditelnosti jednotlivých buněk ve scéně byl nasazen pomocný pohledový objem. Jeho použití je velice jednoduché a výpočetně nenáročné. Nejprve se musí buňky umístit do obálky, která má tvar kulové plochy. Vytvoření obálky má v našem řešení dvě části: výpočet středu buňky a stanovení poloměru kulové obálky. Střed buňky je vypočítáván jako aritmetický průměr rohů buňky a poloměr kulové obálky je nejdelší vzdálenost od středu buňky k jejím rohům. Takto by ale vznikla kulová obálka pro každou buňku a pomocný pohledový objem by poté musel být vypočítáván a použit pro každou buňku. Proto jsme se rozhodli vybrat největší kulovou obálku a přiřadit její poloměr všem buňkám. Toto ovšem přináší jednu nevýhodu. Grafickému procesoru se posílají polygony buněk, které uživatel nemusí ve scéně vidět. Tyto polygony grafický procesor zbytečně zatěžují, ale není jich tolik, aby výrazně zpomalily vykreslování celé vegetace. Dalším důležitým krokem je sestavení pomocného pohledového objemu v závislosti na promítání. Pro středové promítání jej získáme posunutím pozice pozorovatele v pohledovém objemu středového promítání scény ve směru opačném k vektoru pohledu pozorovatele a posunutím bližší a vzdálenější ořezávací roviny. Velikost posunutí je závislá na kulové obálce buněk ve scéně a úhlu pohledu pozorovatele, označovaném jako α. Velikost posunutí, označovanou c, vypočteme pomocí vzorce uvedeného níže. r c = r sin (α /2) r α / 2 c α / 2 obálka buňky střed buňky α buňka bližší ořezávací rovina r pohledový objem c α pomocný pohledový objem Obr. 23: Pomocný ořezávací objem Takto získáme pomocný pohledový objem, v němž by se měly nacházet všechny středy buněk, které jsou pro pozorovatele viditelné. 26

4 Implementace 4.1 Použité technologie Pro implementaci je v první řadě nutné vybrat vhodný programovací prostředek, tedy vybrat programovací jazyk a vývojový nástroj. Zvolil jsem programovací jazyk C++, neboť se v současné době volí mezi objektovými programovacími jazyky. Tento jazyk má vytvořenou normu, což znamená, že lze zdrojový kód z velké části snadno přenést mezi vývojovými nástroji. Jako vývojový nástroj jsem zvolil Microsoft Visual Studio.NET 2003, protože je dostupný na UHK. V aplikaci je kladen důraz na interaktivitu s uživatelem, tedy na vykreslování vegetace s vysokou obnovovací frekvencí scény, pomocí které může aplikace okamžitě reagovat na pokyny uživatele a zároveň je uživatel schopen vnímat změny ve scéně. Z tohoto důvodu bylo zvoleno využití současných grafických akcelerátorů, neboť téměř všechny obsahují programovatelné procesory. Operace prováděné na vrcholech a pixelech nejsou vybírány z těch, které jsou pevně definovány v procesoru, ale jsou tvořeny jednoduchým programem kompilovaným za běhu aplikace. Programovatelné procesory tedy nabízí mnohem více možností a aplikaci lze jednoduše přizpůsobit pro potřeby uživatele. Aplikace vyžaduje grafický akcelerátor podporující vertexové a pixelové programy verze 2.0 a vyšší. Jestliže takovýto hardware daný osobní počítač neobsahuje, potom aplikace nic nevykreslí. V současné době existují pouze dvě rozhraní OpenGL a Direct3D, která poskytují přístup ke grafickému akcelerátoru. Otevřené rozhraní OpenGL dovoluje výrobcům grafických karet rozšiřovat standard o schopnosti akcelerátoru. Pokud se ale výrobci grafických karet nedohodnou na označení totožných funkcí, vede to k nepřehlednosti mezi rozšířeními jednotlivých verzí, k čemuž již došlo při značení vertexových a pixelových programů. Navíc toto rozhraní není objektově navrženo narozdíl od rozhraní Direct3D. Rozhraní Direct3D je částí multimediálního rozhraní DirectX společnosti Microsoft. Vždy je pevně definováno již při svém vzniku a obsahuje do jisté míry zpětnou kompatibilitu, ale pro využití jeho nových funkcí, které přicházejí vždy s novou verzí, je nutné přepsat některé části zdrojového kódu. 27

Rozhodl jsem tedy se použít rozhraní Direct3D 9.0, kvůli jednotnosti přístupu k funkcím grafického akcelerátoru a jeho objektové struktuře. Pokud není na osobním počítači nainstalován DirectX verze 9.0 nebo vyšší, aplikaci nebude možné spustit. 28

5 Výsledky Navržený algoritmus byl implementován do aplikace, která byla testována na dvou osobních počítačích. První sestava obsahovala procesor Intel Pentium 4 na 2,8GHz, operační paměť o velikosti 1,5GB a grafickou kartu ATI Radeon 9800 Pro s velikostí paměti 256MB. Druhá počítačová sestava obsahovala procesor Intel Pentium 4 na 3,2GHz, operační paměť o velikosti 2GB a grafickou kartu nvidia GeForce 6800 Ultra s velikostí paměti 256MB. Pro testy byla vytvořena vegetace skládající se z 15 876 buněk (126x126 buněk), navíc měla vegetace stanovenou konstantní hustotu na 15 600 stromů na 1 km 2. Testována byla dvě nastavení aplikace. V prvním nastavení byla délka buňky ve vegetaci stanovena na 400 m a v druhém na 800m. Tomuto nastavení odpovídalo i množství stromů na jeden plát. V prvním nastavení byla na plát nanesena textura skládající se z 50 stromů a ve druhém byla nanesena textura obsahující 100 stromů. V obou případech byla upravena výška stromů tak, aby odpovídala realitě. Při použití prvního nastavení aplikace byl rozsah vegetace 2 540 km 2 (50,4x50,4 km) a celková vegetace byla tvořena 39,624 milióny stromů. V druhém nastavení aplikace se vegetace rozkládala na území o rozloze 10 160 km 2 (100,8x100,8 km) a vegetaci tvořilo 158,5 miliónů stromů. Výsledky popisovaných nastavení aplikace jsou ukázány na Obr. 24 a 25. Při testování byla měřena obnovovací frekvence zobrazované scény a to ve dvou fázích: v klidu a při pohybu nad vegetací. Výsledky měření jsou uvedeny v Tabulce 4. Systém 1 Systém 2 při pohybu v klidu při pohybu v klidu 1. Nastavení 29 27 48 60 2. Nastavení 38 37 68 73 Tabulka 4: Výsledky měření obrázky za sekundu Z naměřených hodnot v Tabulce 4 vyplývá, že navrhovaný přístup je schopný zobrazovat vegetaci na rozloze tisíců a desetitisíců km 2 s obnovovací frekvencí větší než 25 snímků za vteřinu. Zobrazovaná vegetace působí realisticky a je vykreslována s dostatečnými detaily(viz Obr. 24 a 25). 29

Obr. 24: Vegetace s prvním nastavením Obr. 25: Vegetace s druhým nastavením 30

6 Závěr Stanoveným cílem práce bylo najít nebo navrhnout vhodný algoritmus pro zobrazování rozsáhlé vegetace, ve které není kladen důraz na detailní vykreslení jednotlivých stromů, ale na vykreslení vegetace jako celku. Nalezený nebo navržený přístup byl implementován do prototypu aplikace, ve které probíhalo vykreslování vegetace v reálném čase, aby mohl uživatel interaktivně komunikovat s aplikací. Žádný z nalezených existujících algoritmů nebyl pro vykreslování vegetace vhodným řešením, proto bylo navrženo nové. Toto řešení rozděluje vegetaci na jednotlivé buňky, které jsou odvozeny z povrchu, na němž se vegetace rozkládá. V buňkách je vegetace vykreslována pomocí určitého množství plátů, jež se navzájem kříží v předem stanovených bodech a na které je nanesena textura vegetace. Pomocí tohoto přístupu se podařilo snížit množství trojúhelníků potřebných na vykreslení jednoho stromu ve scéně hluboko pod hranici jednoho trojúhelníku na jeden strom. Díky takové redukci trojúhelníků je přístup schopen vykreslovat rozsáhlou vegetaci v reálném čase a s dostatečnými detaily. Pro další urychlení vykreslování vegetace ve scéně bylo zvoleno a v aplikaci implementováno ořezávání pomocným pohledovým objemem. Toto ořezávání představuje velice jednoduchou a snadno implementovatelnou metodu, která ochrání grafickou kartu od zpracovávání informací o buňkách, jež uživatel ve svém pohledu nemůže vidět. Aby docházelo k rychlejší interakci mezi vytvořenou aplikací a uživatelem, byla v implementaci použita technologie programovatelných procesorů grafických akcelerátorů urychlujících vykreslování trojrozměrné scény. Vytvořený software byl testován na dvou osobních počítačích s grafickými čipy různých výrobců a na dvou vegetacích s odlišnou velikostí. Na testovaných vegetacích bylo pro oba počítačové systémy docíleno dostatečné obnovovací frekvence scény pro rychlou interakci mezi uživatelem a aplikací. V další práci by bylo vhodné zaměřit se na zlepšení aproximace povrchu vegetací. Nejvhodnější by bylo rozdělit vegetaci v buňce do dvou částí, které by měly půdorys ve tvaru trojúhelníku, neboť právě toto rozdělení bude nejlépe aproximovat povrch, na němž se vegetace rozkládá. 31

7 Odkazy [Ati] [Decaudin04] [DX9SDK] ATI Technologies Inc. [online]. Dostupný z WWW: < http://www.ati.com/products/ > DECAUDIN, P., NEYRET, F. Rendering Forest Scene in Real- Time [online]. In Rendering Techniques 04, Eurographics Symphosium on Rendering, page 93-102, květen, 2004 [citace říjen, 20. 2004]. Dostupný z WWW: < http://www-evasion.imag.fr/publications/2004/dn04/> DirectX Documentation in C++. DirectX 9 Software Development Kit [online]. Microsoft, 2, 2005 [citace březen, 7., 2004]. Dostupný z WWW: < http://msdn.microsoft.com/downloads/> [Inmacul02] INMACULADA, R., CHOVER, M., BELMONTE, Ó., RIBELLES, REBOLLO, C. Real Time Tree Rendering [online]. Technical Report DLSI 01/03/2002, Departamento de Lenguajes y Sistemas Informaticos, Universitat Jaume I, Castellón, Spain, březen, 2002 [citace listopad, 20., 2004]. Dostupný z WWW: <http://www3.uji.es/~ribelles/dept/papers/papers/ dlsi_01032002.pdf> [Jakulin2000] [nvidia] [Szijártó03] [Žára2004] JAKULIN, A. Interactive Vegetation Rendering with Slicing and Blending [online]. Eurographics Conference short paper, 2000 [citace listopad, 15., 2004 ]. Dostupný z WWW: < http://zeus.fri.uni-lj.si/aleks/slicing-and-blending/> NVIDIA Home [online]. Dostupný z WWW: < http://www.nvidia.com/page/desktop.htm> SZIJÁRTÓ, G., KOLOSZÁR, J. Hardware Accelerated Rendering of Foliage for Real-Time Application [databáze online]. In International Conference on Computer Graphics and Interactive Techniques, Session: Rendering, page 141-148, Budmerice, Slovenia, 2003, [citace listopad, 13., 2004]. ISBN:1-58113-861-X. Dostupný z WWW: < htttp://portal.acm.org> ŽARA, J., BENEŠ, B., FELKEL, P., SOCHOR, J. Moderní počítačová grafika. Computer Press, 2004. ISBN: 80-251-0454-0. 32