Simulace akumulace sn¥hu - DCGI - České vysoké učení technické
Transkript
ii České vysoké učení technické v Praze Fakulta elektrotechnická Katedra grafiky Diplomová práce Simulace akumulace sněhu Bc. Martin Bláha Vedoucí práce: Ing. Jaroslav Sloup Studijní program: Otevřená informatika, strukturovaný, Navazující magisterský Obor: Počítačová grafika 5. ledna 2015 iv v Poděkování Chtěl bych poděkovat své rodině za podporu a panu Ing. Jaroslavovi Sloupovi za trpělivou pomoc během této práce. vi vii Prohlášení Prohlašuji, že jsem 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 5. 1. 2015 ............................................................. viii Abstract The main goal of our work is to make thrustful simulation of snow deposition in the scene. Because the snow deposition is closely connected with a snowfall, we also focus on the simulation of the snowfall in the sence of single snowflakes and determination of their behaviour during interactions with objects of scene or already deposited snow. We have proposed an easy method for the simulation of snowflakes movements reflecting the impact of factors such as snowflake properities (humidity, mass), object properities (adhesion) and forces affecting the snowflakes during interactions with the scene (i.e. gravity, wind, friction, etc.). We have decided to use the parallel computation force of GPU to speed up the run time of our simulation. Abstrakt Hlavním cílem této práce je simulovat akumulaci sněhu ve scéně. Akumulace však závisí i na pohybu padajících sněhových vloček, tudíž se zaměřujeme i na simulování průběhu jednotlivých vloček ve scéně a jejich další chování při kontaktu s objekty nebo s již usazenou sněhovou vrstvou. Pro simulaci chování vloček se scénou jsme navrhli jednoduchý postup, zohledňujcí vliv jednotlivých faktorů, jako jsou vlastnosti vločky (vlhkost, hmotnost), vlastnosti objektů (přilnavost) a síly působící na vločky při interakci s okolím (gravitace, vítr, tření, atd.). Celkový průběh simulace se snažíme pro zrychlení realizovat pomocí paralelních výpočtů na GPU. ix x Obsah 1 Úvod 2 Sníh 2.1 Vznik sněhové vločky . . . . . 2.2 Tvar sněhové vločky . . . . . 2.3 Metamorfózy sněhové vločky . 2.4 Stabilita a laviny . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 9 10 3 Existující metody 3.1 Modelování sněhu pomocí implicitních ploch . . . . . . . . . . . . . 3.2 Simulace padání, akumulace a tání korunového sněhu . . . . . . . . 3.3 Akumulace pomocí sledování částic z povrchu objektů . . . . . . . 3.4 Simulace padajícího sněhu pomocí spektrální syntézy . . . . . . . . 3.5 Padání a akumulace sněhu s využitím LBM . . . . . . . . . . . . . 3.6 Padání a akumulace sněhu pomocí NSE . . . . . . . . . . . . . . . 3.7 Akumulace sněhu pro velké scény pomocí zastínění okolím . . . . . 3.8 Geometrický algoritmus pro rovnoměrné rozmístění sněhu ve scéně 3.9 Padání a akumulace sněhu v realném čase . . . . . . . . . . . . . . 3.10 Souhrn představených metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 16 19 24 28 32 36 38 43 45 . . . . 49 49 50 50 52 . . . . . . 63 63 63 66 68 69 71 . . . . 4 Analýza aplikace a návrh řešení 4.1 Požadované vlastnosti sněhu . . 4.2 Návrh a analýza řešení . . . . . 4.3 Analýza aplikace . . . . . . . . 4.4 Hlavní simulační smyčka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Implementace 5.1 Jazyk a použité knihovny . . . . . . 5.2 Struktura aplikace . . . . . . . . . . 5.3 Realizace navržených postupů . . . . 5.3.1 Průsečík se scénou . . . . . . 5.3.2 Průsečík se sněhovou vrstvou 5.3.3 Eroze vločky . . . . . . . . . xi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii OBSAH 6 Výsledky 73 6.1 Sněhová vločka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.2 Větrné pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.3 Sněhové scény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 7 Závěr 85 Literatura 87 A Proudové pole A.1 Úvod . . . . . . . . . . . . . . . . . . A.1.1 Mikroskopický přístup . . . . A.1.2 Makroskopický přístup . . . . A.1.3 Mezoskopický přístup . . . . A.2 LBM (Lattice Boltzmann Method) A.2.1 Úvod do LBM . . . . . . . . A.2.2 Konfigurace mřížky a výpočet A.2.3 Kolize a transport částic . . . A.2.4 Hraniční podmínky LBM . . A.2.5 Vliv překážek . . . . . . . . . A.2.6 Souhrn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 93 94 94 94 94 95 95 96 98 100 100 B Uživatelská příručka 101 B.1 Instalace aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 B.2 Ovládání aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 C Konfigurační soubor 107 D Testování interakcí částic s překážkami 109 E Obsah přiloženého CD 113 F Testovací sestava 115 Seznam obrázků 1 Sequence diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i 1.1 1.2 1.3 1.4 1.5 1.6 Ukázka přidání sněhu do scény . . . . . . . . . . Ukázka přidání padajícího sněhu do filmové scény Simulace pohybu po sněhové vrstvě. . . . . . . . Postup vývoje sněhových scén ve videohrách. . . Ukázka generovaného obrázku . . . . . . . . . . . Ukázka snímku z animovaného filmu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 3 4 5 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Závislost saturace vzduchu vodní párou na tlaku a teplotě Rozložení gravitační síly při tvorbě laviny . . . . . . . . . Nakayova klasifikace sněhových krystalů . . . . . . . . . . 3D snímky skutečných padajících vloček . . . . . . . . . . Závlisost tvaru sněhového krystalu na teplotě a tlaku . . . Víceúhlová kamera MASC . . . . . . . . . . . . . . . . . . Ilustrace prachové a deskové laviny . . . . . . . . . . . . . Klasifikace sněhových krastalů podle IACS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 9 10 11 11 12 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 Scéna pokrytá sněhem generovaná metodou implicitních ploch. Příklad rozložení implicitních ploch na povrchu objektu . . . . Ilustrace korunového sněhu . . . . . . . . . . . . . . . . . . . . Vliv vlhkosti a teploty vzduchu na tvar sněhové vločky . . . . . Akumulace sněhu během nastavení odlišných teplot . . . . . . . Průběh simulace tání korunového sněhu. . . . . . . . . . . . . . Příklad řešení akumulace sněhu kolem překážky . . . . . . . . . Rozdělení scény pro rychlejší vyhledávání kolizí sněhové vločky Ukládání sněhu do jednotlivých buněk oblohy . . . . . . . . . . Průběh křivky stbility sněhu . . . . . . . . . . . . . . . . . . . . Ukázka sněhového zaprášení . . . . . . . . . . . . . . . . . . . . Případy při řešení sněhové stability . . . . . . . . . . . . . . . . Scéna generovaná metodou spektrální syntézy obrazu . . . . . . Diskretizace vektoru rychlosti do buněk mřížky . . . . . . . . . Výpočet rychlosti vločky uvnitř voxelu . . . . . . . . . . . . . . Výsledný obrázek zachycený z více úhlů . . . . . . . . . . . . . Závislost velikosti vločky na teplotě vzduchu . . . . . . . . . . . Detailní pohled na generované vločky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 17 18 18 18 19 21 22 22 22 23 25 28 30 31 33 34 xiii . . . . . . . . . . . . . . . . . . . . . . . . xiv SEZNAM OBRÁZKŮ 3.19 3.20 3.21 3.22 3.23 3.24 3.25 3.26 3.27 3.28 3.29 3.30 Ukázka projekce proudového pole . . . . . . . . . . . . . . . . . . . . . . . . Ukázka padání a akaumulace sněhu ovlivněné proudovým polem . . . . . . . Průběh akumulace v sněhu časových snímcích . . . . . . . . . . . . . . . . . Vliv více slunečních vzorků na generování scény . . . . . . . . . . . . . . . . Výsledná scéna generovaná pomocí zastínění okolím . . . . . . . . . . . . . . Parametry ovlivňující výšku a míru zaoblení sněhové vrstvy u krajů objektů Porovnání generovaného obrázku se skutečnou fotografií . . . . . . . . . . . Schéma uložení scény do datových struktur . . . . . . . . . . . . . . . . . . Ukázka procesu depth peelingu . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka rozšířené původní metody geometrického algoritmu . . . . . . . . . . Výsledná scéna generovaná metodou s využitím GPU . . . . . . . . . . . . . Případy pro řešení stability u metody využívající GPU . . . . . . . . . . . . . . . . . . . . . . . . 34 35 37 37 38 39 40 41 41 42 44 45 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 Navržený průchod simulací . . . . . . . . . . Simulační smyčka sněhové scény . . . . . . . . Generování tvaru sněhové vločky . . . . . . . Buňky ovlivněné při transportním kroku LBM Detekce přítomnosti objektu v buňce . . . . . Přenos dat mezi lokální a globální mřížkou . . Určení intervalu pro posouvání parsku . . . . Výpočet síly působící na vločku behěm letu . Popis odrazu vločky od objektu . . . . . . . . Popis sil působících na vločku během posunu Popis veličin při výpočtu přilnavé síly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 52 53 54 55 57 58 59 60 61 5.1 5.2 5.3 5.4 Struktura aplikace . . . . . . . . . . . . . . . . . . . . . . Přidání částic do scény . . . . . . . . . . . . . . . . . . . . Rozřazení částic pro hledání průsečíků s implicitní plochou Vliv eroze částice na okolní částice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 70 71 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 Porovnání generovaných vloček . . . . . . . . . . . . . . . . . Vliv teploty na tvar sněhové vločky . . . . . . . . . . . . . . . Testovací scéna pro kontrolu toku větru . . . . . . . . . . . . Řezy vektorů proudového pole . . . . . . . . . . . . . . . . . . Vliv nastavení hraničních podmínek na tok vzduchu ve scéně Vliv aplikace Smagorinskyho filtrace na stabilitu toku . . . . Časové závislosti mřížky proudového pole na jejím rozlišení. . Testované scény pro simulaci akumulace sněhu. . . . . . . . . Průběh akumulace bez vlivu větru. . . . . . . . . . . . . . . . Průběh akumulace s vlivem větru. . . . . . . . . . . . . . . . Detailní pohled na akumulaci ovlivněnou větrem . . . . . . . Ukázka zasněžené scény s krabičkou bez víka . . . . . . . . . . Ukázka zasněžené scény s autobusovou zastávkou . . . . . . . Ukázka detailů zasněžené scény s autobusovou zastávkou . . . Stavba struktury pro scénu antika . . . . . . . . . . . . . . . Stavba struktry pro scénu zastávka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 74 74 75 76 77 79 79 80 80 80 81 81 82 82 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SEZNAM OBRÁZKŮ xv A.1 A.2 A.3 A.4 Přístupy k výpočtu toku kapaliny . . . . . . . . Konfigurace LBM . . . . . . . . . . . . . . . . . Podmřížky konfigurace vektorů rychlosti ve 3D Hraniční podmínky LBM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 96 97 99 B.1 B.2 B.3 B.4 Scéna se sněhovou vločkou. . . . . . . Scéna sledování proudnic. . . . . . . . Scéna sledování vektorů větru . . . . . Scénas ledování simulace sněhové scény D.1 D.2 D.3 D.4 Test Test Test Test zastavení částice při kolizi se eroze zastavených částic . . posouvání částic . . . . . . . zastavení částice při kolizi se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 103 104 105 scénou . . . . . . . . scénou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 110 110 111 E.1 Struktura CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 xvi SEZNAM OBRÁZKŮ Seznam tabulek 3.1 3.2 Tabulka metod se základními vlastnostmi a parametry pro simulaci padání sněhu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Tabulka metod s parametry pro akumulaci sněhu . . . . . . . . . . . . . . . . 47 6.1 6.2 6.3 Tabulka časové náročnosti pro sledování proudnic . . . . . . . . . . . . . . . . 78 Tabulka časové náročnosti pro hledání průsečíku na scéně antika . . . . . . . 78 Tabulka časové náročnosti pro hledání průsečíku na scéně zastávky . . . . . . 78 A.1 Tabulka hodnot koeficientů pro podmřížky LBM . . . . . . . . . . . . . . . . 98 xvii xviii SEZNAM TABULEK Kapitola 1 Úvod Sníh neodmyslitelně patří k zimnímu období a není nijak vzácným úkazem v mnoha koutech světa. Jelikož se jedná o jev, který můžeme spatřit na všech světových kontinentech, sluší se věnovat tomuto přírodnímu fenoménu patřičnou pozornost i z hlediska počítačových simulací a počítačové grafiky. Ukázku přidání sněhu do scény ilustruje obrázek 1.1. Obrázek 1.1: Ukázka přidání sněhu do scény. Vlevo původní fotografie, vpravo upravená původní verze s přidaným sněhem. Obrázek převzat z [18]. Pod pojmem simulace sněhové scény si můžeme představit různé věci. Můžeme se zabývat simulací padajícího sněhu, na kterém chceme pozorovat ovlivnění chování vloček okolím, jako jsou reakce na větrné podmínky či chování sněhových vloček při interakci s překážkami (objekty, domy, další sněhové vločky atd.). Nebo nás může zajímat průběh akumulace napadaného sněhu ve scéně. Sledování hromadění napadaného sněhu je důležité například při návrhu střech budov pro určení jejich nosnosti. Také nelze opomenout možnost sledovat stabilitu sněhové vrstvy, kdy může hrozit nebezpečí kvůli odpadávajícímu sněhu ze střechy, což může zbůsbit velké škody na zdarví i majetku. Tento problém také odpovídá případu tvorby lavin a možnosti předpovídat jejich pohyb. Největší přínos studia souvisejícího se zpracováním scén obsahujících sníh, můžeme rozdělit do dvou hlavních kategorií, kterými jsou zábavní průmysl a vědecké simulace. Z pohledu zábavního průmyslu můžeme zmínit například přínos do světa počítačových her, filmového 1 2 KAPITOLA 1. ÚVOD Obrázek 1.2: Ukázka snímku s přidaným padajícím sněmhem během postprodukce z filmu Liga výjimečných. Obrázek převzat z [7]. průmyslu nebo reklam, které jsou s filmovým průmyslem úzce spjaty, jelikož vyzužívají stejné techniky. Obrázek 1.3: Ukázka simulace pohybu po sněhové vrstvě a reakce sněhové vrstvy na interakci s ní. Obrázek převzat z [10]. V případě filmového průmyslu se jedná hlavně o zpracování scén v postprodukci, například pokud by natáčení scén ve sněžné bouři mohlo být příliš náročné nebo dokonce i nebezpečné. V takovém případě se nabízí možnost přidání padajícího, případně i nahromaděného, sněhu pomocí počítačových úprav. Toho bylo využito například i u filmu Liga výjimečných (The League of Extraordinery Gentleman, 2003 )[1], což zobrazuje obrázek 1.2. Další využití filmového průmyslu pro počítačovou grafiku nabízí samozřejmně tvorba animovaného filmu.Jako dobrý příklad může posloužit například film Ledové království (Frozen, 2013 ), ve kterém byly využity pokročilé techniky pro práci s objekty tvořené sněhem pomocí metody[59]. Ukázkový snímek z filmu Ledové království můžeme vidět na obrázku 1.6. Podobné úpravy můžeme pozorovat i u zmíněných reklam. 3 Obrázek 1.4: Ukázka vývoje generování sněhových scén v průběhu času. Vlevo nahoře můžeme vidět pokus o zobrazení sněžné dráhy ze hry Winter Challange z roku 1992, obrázek převzat z [2]. Vpravo nahoře vidíme scénu ze hry Banjo-Kazooie z roku 1998, obrázek převzat z [50]. Vlevo dole zobrazena už relativně věrohodná scéna ze hry Tomb Raider z roku 2003, obrázek převzat z [9]. Vpravo dole je zobrazena pomocí nejnovějších technologií scéna ze hry Far Cry 4 z konce roku 2014, obrázek převzat z [64]. Pro reklamní účely můžeme ještě zmínit generování fotorealistických obrázků například při tvorbě billboardů nebo různých brožur. Velice populární je tvorba tapet na pozadí pracovní plochy. Příklad takového využítí zobrazule obrázek 1.5. Další odvětví zábavního průmyslu se věnuje počítačovým hrám. Snahu věrohodně zobrazovat sněhové scény v různých videohrách můžeme pozorovat již od jejich vzniku. Menší přehled v průběhu času ilustruje obrázek 1.5. Oproti filmovému průmyslu je zde však kladen větší důraz na rychlost zobrazení a zároveň na rychlost odezvy na akce uživatele, čímž mohl výsledný obraz ztrácet na věrohodnosti. V dnešní době lze ale poměrně úspěšně realizovat kvalitní zobrazení scény i s možností realizace interakcí v reálném čase. Mezi těmito interakcemi si můžeme představit například zanechávaní stop ve sněhové vrstvě při kontaktu se sněhem či deformace objektů tvořených sněhem jako třeba roztříštění sněhové koule hozené na objekt. Z pohledu vědeckých simulací můžeme na simulace pohlížet z několika hledisek. Zaprvé nás může zajímat padání sněhu a jeho následná akumulace. Tyto údaje pak mohou být využity při zkoumaní v souvislosti se stavitelským odvětvím, při již zmíněném návrhu střech budov. Využití by se mohlo najít také pro sportovní účely během lyžařských závodů pro detekcei míst, kde hrozí možnost výskytu čerstvě napadaného sněhu a tím zvolení správného způsobu mazání lyží. Dále můžeme zkoumat vlastnosti již akumulovaného sněhu a jeho stabi- 4 KAPITOLA 1. ÚVOD lity čehož využijeme například u simulací lavin, díky kterým můžeme detekovat nebezpečné či nejvíce ohrožené oblati v krajině, například na sjezdových svazích apod. Další zajímavou možností pro simulace sněhových scén je sledování tání sněhu a zkoumaní možností výskytů záplav v období oblevy. Obrázek 1.5: Ukázka generovaného obrázku za účelem reklamy na videohru The Rise of Tomb Raider. Na obrázku můžeme vidět zajímavý tvar akumulace sněhové vrstvy v podobě zubů hřebenu, způsobeného nastavenými větrnými podmínkami. Obrázek převzat z [57]. U simulací sněhových scén se snažíme co nejvíce přiblížit realitě, ale v určitých případech musíme vzít v potaz i časovou náročnost zpracování. Proto je obvykle nutné učinit kompromis mezi kvalitou a časovou náročností pro výpočet. Jako příklad můžeme uvést interaktivní aplikaci, jako například počítačovou hru, kdy je nutné reagovat v reálném čase na pokyny uživatele. Oproti tomu pro filmové zpracování můžeme mít volnější požadavky na rychlost zpracování a naopak vyšší na její kvalitu. Tato práce se zabývá sledováním padajících sněhových vloček ovlivněných svým okolím a následnou akumulací napadaného sněhu ve scéně s možností sledování v reálném čase. Pro rychlou simulaci se snažíme využívát paralelních výpočtů na GPU, využívající technologii CUDA. V následujících kapitolách vysvětlíme co to sníh je a jak jej můžeme simulovat pomocí počítače. Konkretně v kapitole 2 si představíme fyzikální podstatu sněhu a faktory, které jej ovlivňují. Kapitola 3 představí existující metody pro simulaci padajícího sněhu a jeho akumulaci a předvede krátký souhrn doposud známých možností, jak realizovat simulace sněhových scén. V kapitole 4 pak představíme námi navržené postupy, vycházející z existujících metod, pro generování scény se sněhem a jejich případné rozšíření. Dále se v ka- 5 Obrázek 1.6: Ukázka snímku z animovaného filmu Ledové království. Takto vypadá konečný generovaný snímek, na kterém si můžeme všimnout následků interakce kopyt losa se sněhem. Obrázek převzat z [6]. pitole 5 budeme zabývat implementačními detaily navržených postupů a na konec v kapitole 6 představíme výsledky dosažané pomocí naší metody. 6 KAPITOLA 1. ÚVOD Kapitola 2 Sníh Veškerý sníh vyskytující se na Zemi je součástí tzv. "kryosféry". Termín kryosféra vychází z řeckého slova "κρυoς"- kryos, což můžeme přeložit jako zimu nebo chlad. Kryosféra je částí litosféry a hydrosféry, která je vlivem záporných teplot ve zmrzlém stavu, zahrnuje tak veškerou vodu v pevném skupenství na Zemi, včetně ledu a sněhu, a hraje významnou roli při regulaci teploty naší planety [47]. V této části práce si vysvětlíme co to sníh je a jak vzniká. Dále uvedeme jeho vlastnosti a popíšeme jeho chování po dopadu na zem. 2.1 Vznik sněhové vločky Sněhové vločky se vytváří v mracích, kde může docházet k sublimaci vodní páry nebo zachytávání a přimrzání malých kapek vody na částečky prachu a nečistot. Tyto části pak formují sněhové krystaly, ze kterých se vločka skládá. Tvar a velikost vločky závisí na vlhkosti, tlaku a teplotě okolního vzduchu. Jakmile dojde k nasycení vzduchu párou, začne nahromaděná voda kondenzovat do malých zamrzlých částiček (ledových krystalů), které se k sobě navzájem přichytávají a formují tak tvar budoucí vločky. S rostoucí teplotou roste i potřeba většího tlaku pro vznik vloček, jak dokládá obrázek 2.1. Vytvořené vločky mohou mezi sebou v mracích kolidovat a spojovat se do větších pravidelných celků. Jakmile nabyde vločka hmotnosti, kterou už dále mrak neunese, začne se snášet k zemi. Během cesty k zemi může mezi vločkami docházet k dalším kolizím, čímž dochází k dalším spojováním a vzniku větší vločky. Velikost takto pospojovaných vloček může dosahovat až několika centimetrů, největší doposud zaznamenaná vločka podle Guinessovy knihy rekordů byla zaznamenána roku 1887 a dosahovala průměru 15-ti palců (přibližně 38,1 cm)[28]. 2.2 Tvar sněhové vločky Tvar sněhové vločky je přibližně pravidelný a odpovídá struktuře šestihranu. Tuto skutečnost objevil už Johannes Kepler na počátku 17. století [32]. Tento pravidelný tvar je dán polohou atomů vodíku a kyslíku v molekulách vody, kde atomy mezi sebou svírají úhel 120◦ , což umožňuje vznik právě šestihranných krystalů [19]. Zkoumání vzniku tvaru vločky probíhalo v průběhu času dále, ale až v polovině 20. století dosáhl Ukichiro Nakaya [44] většího přínosu v poznání sněhových vloček. Nakaya zkoumal tvorbu sněhových vloček za různých podmínek 7 8 Obrázek 2.1: Závislost saturace vzduchu vodní párou na tlaku a teplotě pro tvorbu sněhové vločky. Obrázek převzat z [52]. KAPITOLA 2. SNÍH Obrázek 2.2: Rozložení gravitační síly na smykovou a stlačující sílu.Obrázek převzat z [37]. a objevil i do té doby neznámé nepravidelné tvary sněhových krystalů. Výsledkem jeho práce bylo rozdělení sněhových krystalů do 41 morfologických tříd (obrázek 2.3). Tato klasifikace byla dále rozšířena roku 1966 Magonoem a Leeem na 80 možných druhů [35]. Nicměně existují i další rozdělení jako například dělení podle IACS ("International Association of Cryospheric Science"), které dělí krystaly do 10 skupin, přičemž 3 třídy jsou vyhrazeny pro krystaly ledu - kroupy (obrázek 2.8). Obrázek 2.3: Klasifikace sněhových krystalů, které představil Ukichira Nakaya. Obrázek převzat z [44]. V dnešní době máme možnost zkoumat sněhové vločky nejen po zachycení na povrchu a studováním pod mikroskopem, ale i přímo při průběhu padání sněhu pomocí víceúhlové kamery MASC ("Multi-Angle Snowflake Camera"), která byla roku 2012 představena v [20]. 2.3. METAMORFÓZY SNĚHOVÉ VLOČKY 9 Přístroj je zobrazen na obrázku 2.6 a snímky zachycené touto kamerou jsou zobrazeny na obrázku 2.4. Obrázek 2.4: Zachycené snímky skutečných vloček během pádu pomocí MASC kamery. Obrázek převzat z [20]. Jak již bylo zmíněno dříve, tvar sněhové vločky je ovlivněn podmínkami, při kterých dochází k její tvorbě. Při procesu vytváření záleží na míře saturace vodní páry (vlhkosti) a teplotě okolního vzduchu. Tyto dvě veličiny pak určují typ vločky, jenž se bude utvářet. Závislost těchto hodnot na výsledném typu vločky můžeme pozorovat na obrázku 2.5. Jak si můžeme všimnout, vločky se začínají vytvářet při teplotách mraků rovných nebo menších než 0 ◦ C. Teplota zároveň určuje, zda se jedná o takzvaný suchý nebo mokrý sníh. Vlhký sníh vzniká při teplotách větších než -2◦ C, obsahuje více molekul vody, je tedy hustší, a je velmi přilnavý. Naopak suchý sníh vzniká u teplot nižších než -2◦ C a jeho přilnavost je mnohem horší, proto také výsledné vločky nabývají menších rozměrů než vločky mokré [22]. 2.3 Metamorfózy sněhové vločky Po dopadu sněhové vločky na zem dochází k metamorfózám ledových krystalů formujících sněhovou vločku. Tyto přeměny pak probíhají dále, dokud nedojde k úplnému roztání vločky. Přeměny můžeme rozdělit na konstruktivní, destruktivní a tání [27]. Hlavní příčinou těchto přeměn je vzduch, který proudí sněhovou pokrývkou, jelikož se mezi vločkami ve sněhové pokrývce vyskytují mezery. Tento vzduch navíc obsahuje vodní páru, což spolu s teplotními rozdíly vloček a proudícího vzduchu působí na změnu sněhových krystalů, jako při tvorbě sněhové vločky. Konstruktivní a destruktivní přeměny jsou ovlivněny teplotními gradienty v napadaném sněhu, kde vyšší (nad -10◦ C/m) hodnoty umožňují uskutečnění konstruktivních přeměn, naopak nižší hodnoty (pod -10◦ C/m) jsou příznivé pro destruktivní přeměny. 10 KAPITOLA 2. SNÍH Obrázek 2.5: Závislost tvaru sněhového krystalu na vlhkosti a teplotě vzduchu. Křivka míry saturace rozděluje oblasti vzniku sněhových a ledových krystalů. Obrázek převzat z [33]. • Destruktivní přeměna - začíná ihned po dopadu sněhové vločky, kdy se krystaly sněhové vločky začínají zaoblovat, kvůli snaze o dosažení energetické rovnováhy po celém povrchu krystalu, a zmenšují tak póry ve sněhové pokrývce. Díky tomuto procesu dochází ke zpevnění a zvýšení stability sněhové vrstvy [3]. • Konstruktivní přeměna - dochází k rekrystalizaci, kde jsou původní krystaly zvětšovány obdobným způsobem jako při jejich tvorbě v mracích díky přítomnosti vodní páry. Sněhová pokrývka tvořena těmito krystaly je oproti krystalům z předchozí přeměny velmi nestabilní. Právě konstruktivní metamorfóza má velký význam pro vznik lavin [19]. • Tání - přeměny působící při tání se vyskytují ve dvou procesech. První zahrnuje vliv vody z roztavených krystalů na povrchu napadané sněhové vrstvy nebo dešťové vody, která postupuje sněhovou pokrývkou, kde zamrzá a tvoří ledové lamely [19]. Teplota vody která ve sněhové vrstvě zmrzla pak přispývá ke zvýšení teploty celé pokrývky. Druhý proces zahrnuje růst velkých sněhových krystalů vlivem přítomné vody a tím i vznik zaoblených zrn [55]. 2.4 Stabilita a laviny Sněhová lavina je rychlý sesuv sněhové masy ze svahu, který nastává jakmile přestane být sníh stabilní. Laviny nebo spíše jejich cestu můžeme rozdělit do 3 olastí. První oblastí je zóna 2.4. STABILITA A LAVINY 11 Obrázek 2.6: Víceúhlová kamera MASC pro zachycení 3D obrázků padajících sněhových vloček. Obrázek převzat z [20]. počátku laviny, kde je sníh nejvíce nestabilní a dochází ke spuštění laviny. Další oblastí je cesta laviny, někdy označována také jako transportní pásmo, které představuje oblast kudy se lavina šíří směrem dolů. Poslední oblastí je část kde dochází k zastavení laviny a akumulaci lavinové masy, tuto oblast nazíváme akumulační zónou [1]. Obrázek 2.7: Ilustrace průběhu laviny. a) Prachová lavina začínající z jediného bodu. b) Desková lavina tvořena odtržením celé vrstvy ("desky"). Obrázek převzat z [67]. Lavinové typy můžeme rozdělit na prachové, deskové a mokré [55]. Ukázku prachové a deskové laviny vidíme na obrázku 2.7. Prachové se vyskutují u sněhu s velmi malou přilnavostí a nejvíce se s nimi můžeme setkat u čerstvě napadaného sněhu. Začínají se tvořit z počátečního bodu a nabalují na sebe pouze sníh na povrchu sněhové pokrývky. Tento druh laviny obvykle můžeme pozorovat u efektu vyhlazení povrchu pokrývky a je spíše typický 12 KAPITOLA 2. SNÍH pro malá měřítka. Obrázek 2.8: Klasifikace sněhových a ledových krystalů podle IACS. Obrázek převzat z [33]. Deskové laviny jsou naopak případy vyskytující se ve větším měřítku a jsou více nebezpečné. Tento typ se objevuje u akumulovaného sněhu tvořeného velmi přilnavou vrstvou, například u převisů tvořených na závětrné straně svahu, na slabší vrstvě dříve nahromaděného sněhu. Jakmile se stane slabší vrstva nestabilní, například v průběhu času pomocí metamorfózy, dochází k odtržení a pohybu sněhové hmoty směrem dolů. Mokré laviny jsou podobné prachovým, také začínají z jednoho bodu, ale vyskytují se u sněhové pokrývky, která je nasycena vodou a průběh připomíná spíše tok než sesypání sněhové hmoty [55]. Na sněhovou pokrývku působí pnutí, které můžeme rozdělit na rozpínání, stlačení a namáhání smykem. Důležitým faktorem jsou pak síly ovlivňující tyto pnutí, jako jsou přilnavost, třecí síla mezi jednotlivými sněhovými vrstvami a gravitační síla. Přilnavost je ovlivněna teplotou, kdy za velmi nízkých teplot je i přilnavost nízká, hustotou sněhové vrstvy a větrnými podmínkami. Pro vyvolání laviny tedy potřebujeme vyvolat dostatečnou sílu pro namáhání smykem. K tomu slouží gravitační síla, která se na svahu rozkládá do dvou sil a to stlačující a 2.4. STABILITA A LAVINY 13 smykovou, jak ilustruje obrázek ??. Síla potřebná pro spuštění laviny závisí na druhu sněhu (sněhových krystalů) a na tzv. úhlu uložení AOR ("angle of repose"), který určuje úhel, ve kterém už nelze udržet sněhovou vrstvu a začíná spuštění laviny. Pro určení AOR neexistuje obecná rovnice, ale lze využít několik experimentálních měření k jeho přibližnému určení jako například v [37]. 14 KAPITOLA 2. SNÍH Kapitola 3 Existující metody V této části popíšeme již existující metody, využíváné pro simulaci sněhových scén v počítačové grafice. Podle našich potřeb jsme vybrali postupy zaměřující se na padající sníh a na jeho následnou akumulaci. Po představení námi vybraných metod provedeme jejich krátké shrnutí a porovnání. 3.1 Modelování sněhu pomocí implicitních ploch Jako jeden z prvních pokusů o realistické vytvoření scény pokryté sněhem se uvádí postup představený v [46]. V tomto článku autoři popisují nejen způsob pro reprezentaci sněhu ve scéně, ale zároveň i způsob zobrazování výsledné scény s využitím vícenásobného rozptylu světla. Obrázek 3.1: Scéna pokrytá sněhovou vrstvou generovaná metodou implicitních ploch. Obrázek převzat z [46]. Obrázek 3.2: Příklad rozložení implicitních ploch na povrchu objektu. Obrázek převzat z [46]. Tento postup využívá pole hustot("density fileds") pro reprezentaci množství sněhu akumulovaného na povrchu objektů. Tyto pole využívají technik tzv. implicitních ploch ("metaballs", známé také jako "blob"). Implicitní plochy se využívají pro výpočet polygonizované isoplochy v prostoru [49]. K tomuto postupu je třeba využít volumetrické reprezentace scény, 15 16 KAPITOLA 3. EXISTUJÍCÍ METODY ve které pak můžeme pomocí známých algoritmů, jako jsou například "marching cube"[34] či "marching tetrahedra"[63], hledat isoplochy. Každá implicitní plocha je definována svým středem, poloměrem a hustotou sněhu ve svém středu. Při zachycení sněhu na povrchu objektu nastavíme střed implicitní plochy na povrch objektu, čímž zajistíme největší hustotu sněhu ve spodní části (rozhraní s objektem) sněhové vrstvy. Rozmístění implicitních ploch ilustruje obrázek 3.2. Redukovat hrbolatost a zvyšovat výšku sněhové vrstvy můžeme nastavením atributů implicitních ploch, popřípadě aplikovat stejný postup akumulace na již vytvořené sněhové vrstvy. Pro plochy je zvolen iterační postup, při kterém je možné zvolit přesné souřadnice, kam umístit novou implicitní plochu. Pro vykreslení scény je nutno využít volumetrického renderingu, vycházejícího z [45] a upraveného pro potřebu sněhu v této metodě. Při vykreslení jsou využity náhodně rozmístěné částice, obsažené v implicitních plochách, a které mohou blokovat rozptýlené světlo uvnitř sněhové pokrývky. Výsledky generované zmíněným postupem jsou zobrazeny na obrázku 3.1. 3.2 Simulace padání, akumulace a tání korunového sněhu Jednou z prvních metod zabývající se podrobněji vlivem sněhu na původní scénu byl přístup [43]. Při tomto postupu se autoři nezabývali pouze rozložením sněhu ve scéně, ale řešili i simulaci padání sněhu a jeho tání vlivem slunečního záření a vyzařování tepla ze zasněžených objektů. Tato metoda zohledňuje pozorování vývoje sněhové pokrývky, kdy je pro čerstvě napadaný sníh charakteristický zaoblený tvar, který přechází do tzv. "korunového sněhu"("crown snow "), který můžeme vidět na obrázku 3.3. Korunový sníh dostal název podle častého pozorování v korunách stromů. Navíc je podoba sněhové vrstvy ovlivněna nastavitelnou virtuální teplotou. Tvar se dále mění působením tepelného záření slunce a samotných zasněžených objektů, kdy dochází k tání. Vykreslení je nakonec realizováno pomocí objemového renderingu. K simulaci padajícího sněhu je využito proudové pole ("vortex field "). Pole reprezentuje jak laminární proudění, tak i turbulentní. Laminární tok se sestává z rovnoběžných proudnic a můžeme si ho představit jako tok jednotlivých vrstev, kdežto turbulentní tok simuluje například víry. Turbulentní část proudového pole vychází z [61] simulující kouř pomocí Rankineho vírů. Částice se pak scénou pohybují podle proudového pole, výsledná síla působící na sněhovou vločku je pak dána vztahem F = M a(t) = fv (t)fr (t)M gCv(t), kde M představuje hmotnost částice, a(t) její zrychlení, fv (t) síla určená z proudového pole, fr (t) náhodně generovaná síla, M g gravitační síla, C koeficient odporu vzduchu a v(t) rychlost částice. Vlhké vločky se tvoří při teplotě okolo 0 ◦ C, při nižších teplotách dochází k tvorbě suchých vloček s horší přilnavostí. Korunový sníh lze spatřit například na vrcholku stromů, kde vlhký sníh tvoří větší koruny díky své přilnavosti. Akumulaci sněhu ve scéně realizujeme pomocí virtuálních vloček (jiné částice než pro zobrazení padajícího sněhu), které jsou unášeny konstantní rychlostí větru, jenž je dána součtem gravitační síly a síly větru. Při kolizi vločky s objektem dochází k zastavení pohybu ve směru padání sněhu a vločka se začne pohybovat po povrchu objektu s ohledem na směr 3.2. SIMULACE PADÁNÍ, AKUMULACE A TÁNÍ KORUNOVÉHO SNĚHU 17 Obrázek 3.3: Příklad korunového sněhu ("crown snow ") typického pro nahromadění v korunách stromů. Obrázek převzat z [68]. svého předchozího pohybu. Při kolizi s objektem na vločku působí přilnavá síla. Částice unášena silou menší než nastavený práh se zpomaluje nebo se zastaví po vzdálenosti D. D je ovlivněna velikostí částic, která je ovliněna teplotou vzduchu v mracích Tc a mírou saturace páry v mracích, což ovlivňuje i tvary vloček, jak ukazuje obrázek 3.4. D je tedy závislá na teplotě tak ,že D = f (Tc ) = (0, 133Ka)α(Ts −Tc ) , Ts představuje maximální teplotu pro generování vloček, α reprezentuje koeficient pro vztah složitosti vločky s teplotou a Ka je výška sněhové vrstvy pokrývající objekty v počtu voxelů. Přilnavá síla začne působit po zvolené době A. Tento čas je ovlivněn vlhkostí vločky. Přilnavou sílu tedy ovlivní i teplota u povrchu objektu Tg tak, že čas A určíme pomocí empirického měření jako A = (Kb 2 )(3β(Td −Tg ) ) kde Td je maximální teplota, při které vločky dopadnou na zem bez roztání, β je konstanta určující množství vody ve vločce (vlhkost) a Kb představuje délku základní plochy (země) voxelového prostoru v počtech voxelů. Vliv tepot je zobrazen na obrázku 3.5. 18 KAPITOLA 3. EXISTUJÍCÍ METODY Obrázek 3.4: Vliv vlhkosti a teploty vzduchu na tvar sněhové vločky. S klesající teplotou se tvoří jednodušší tvary. Obrázek převzat z [43]. Obrázek 3.5: Vliv nastavení maximální teploty neroztavení vločky Td a teploty vzduchu v oblasti mraků Tc . Obrázek převzat z [43]. Obrázek 3.6: Průběh simulace tání korunového sněhu. Obrázek převzat z [43]. Tání sněhu zahrnuje následující zjednodušení. Uvažujeme pouze sníh tvořící sněhovou pokrývku, který je ovlivněn sluncem a zářením objektů, hustota sněhu se nemění, voda vzniklá z roztátého sněhu je zanedbána. Pro simulaci využijeme voxelovou reprezentaci, kde každý voxel uchovává atributy potřebené k rozlišení objektu, sněhu, země nebo prázdného prostoru. Pro určení virtualní teploty, působící na scénu, využijeme výpočtu přímého osvětlení sluncem a rozptýleného světla. Vypočtenou teplotu uložíme do tzv. nebeské koule ("celestial sphere") obklopující scénu. Objekty a celou scénu převedeme do voxelové reprezentace a zapíšeme ji do voxelového pole V. Informace o objemu sněhu uchováváme ve 3D poli o stejných rozměrech jako poleV. Každý voxel mající sníh přijme záření z nebeské koule a z objektu. Po určení množství tepelného záření dochází u všech voxelů k šíření teploty mezi jeho 6 přilehlými sousedy ("6 voxel contact"). Poté aktualizujeme teplotu v každém voxelu a zkoumáme zda nedošlo ke změně voxelu sněhu na voxel vzduchu. Tento proces se opakuje s každým posunutím slunce po nebeské kouli. Průběh tání ilustruje obrázek 3.6. 3.3. AKUMULACE POMOCÍ SLEDOVÁNÍ ČÁSTIC Z POVRCHU OBJEKTŮ 3.3 19 Akumulace pomocí sledování částic z povrchu objektů Za jednu z nejúspěšnějších metod pro generování sněhových scén je považována metoda představena Paulem Fearingem [12], blíže popsaná v [13]. Tato metoda se zabývá pouze akumulací sněhu ve scéně, nezahrnuje tedy způsob simulace padání sněhu. Hlavní výhodou tohoto přístupu je zpracování vlivu překážek na výslednou úroveň sněhové vrstvy, která se pod touto překážkou vytváří. Jako příklad autor uvádí vliv keře na zem pod ním či vliv větví stromu ve vyšších výškách na větve pod nimi. Příklad s keřem je znázorněn na obrázku 3.7. Musíme tedy vzít v úvahu, že se sníh může objevit na všech plochách ve scéně. Z tohoto důvodu se liší přístup ke zjištění, zda byla ploška zasažena sněhovou vločkou, od intuitivního přístupu, kde sledujeme cestu částice od zdroje k cíli. Obrázek 3.7: Příklad řešení akumulace sněhu kolem překážky. a) Skutečná fotografie nahromadění sněhu kolem keře. b) Scéna generovaná po 10s zjemňování sítě. c) Scéna generovaná po 100s zjemňování sítě. d) Počáteční síť. e) Síť po 10s zjemňování. f) Síť po 100s zjemňování. Obrázek převzat z [13]. Scénu a objekty v ní máme reprezentované pomocí polygonální sítě ("mesh"). Tato síť je tvořena plochami, což mohou být například trojúhelníky. Pro zajištění požadavku, aby byla testována každá plocha na možnost přítomnosti sněhu, vystřelíme částice z plošek směrem ke zdroji, tedy nějaké hraniční ploše reprezentující oblohu. Každá plocha má na počátku přidělenou tzv. vystřelující pozici ("launching site"), ze které vystřeluje částice k obloze. Tyto částice mohou dorazit k obloze nebo se střetnou s překážkou - jsou blokovány. Pokud zjistíme, že se sousední vystřelující pozice výrazně liší v počtu částic, které úspěšně dorazily k obloze, zvýšíme počet vystřelujících pozic. Zvýšení počtu těchto pozic docílíme přidáním nové vystřelující pozice do tzv. výchýleného midpointu ("perturbed midpoint"), což si můžeme představit jako těžiště, tedy bod, pomocí kterého můžeme rozdělit polygon tak, aby nově vytvořené polygony obsahovaly zhruba stejné množství úspěšných částic. Naopak, pokud se sousední pozice výrazně neliší v počtu úspěšných částic, můžeme je sloučit do jedné pozice. 20 KAPITOLA 3. EXISTUJÍCÍ METODY Tyto pozice uchováváme v další trojúhelníkové síti. Přidávání vystřelujících pozic je tak vlastně jen zjemňování této sítě (obrázek 3.7 d)-f)). Každá vystřelující pozice má přiřazenu důležitost. Tato důležitost ovlivňuje pořadí testovaných pozic, počet částic vystřelených k obloze nebo možnost zjemnění. Plocha s největší důležitostí vyšle malou skupinu částic a v závislosti na výsledku obdrží novou hodnotu důležitosti, se kterou se zařadí do seřazeného seznamu. Důležitost ploch je ovlivněna následujícími faktory: • Úplnost – pozice, která doposud nebyla testována má větší prioritu než každá, která byla testována alespoň 1x, což zajistí test každé pozice před úpravou mřížky. • Oblast – s rostoucí oblastí (spojením pozic) je třeba vystřelit více částic a třeba i přidat pozice pro snížení možnosti vynechání průchodu částic místem blokovaným překážkou. • Sousednost - pokud se úspěšnost částic dvou sousedících pozic liší (je nalezena překážka), oběma pozicím se zvýší počet možných vystřelených částic, pro získání lepší představy o překážce a je jim dále přiřazena důležitost. Pokud se liší a zároveň mají přiřazenou důležitost, dochází k zjemnění pomocí přidání další vystřelovací pozice, jestli jsou ovšem hodnoty podobné, je jim důležitost snížena a pozice se stávají kandidáty na spojení. • Intenzita – pokud jsou všechny faktory stejné, nemění se počet částic vystřelujících z pozice. • Omezení – nastavené uživatelem pro omezení přílišného zjemňování mřížky okolo překážek. • Strmost – strmé plochy uchovávají jen malou část sněhové vrstvy, laviny jsou zanedbatelné. • Kamera – můžeme zvolit jemnější mřížku pro plochy blíže ke kameře. • Uživatel – můžeme zvolit plochy, které nejsou důležité. Síť vystřelovacích pozic je trojúhelníková, generovaná ze sítě objektů ve scéně. Každý trojúhelník s normálou směřující k nebi má přiřazenu alespoň jednu vystřelovací pozici. Přidávání pozic je pak realizováno s ohledem na jejich přiřazenou důležitost. Každá pozice zodpovídá za určitou část nepřekrývajícího se povrchu, v ideálním případě za část blízkého okolí této pozice. Oblasti, za které pozice zodpovídá, získáme pomocí techniky pro Voroného diagramy. Vystřelující pozice jsou spojeny pomocí Delaunayovy triangulace s omezením do sítě a každá pozice zodpovídá za svou Voroného oblast. Tyto oblasti jsou vypočteny pro každou plochu a jsou ořezány hranou trojúhelníka pro maximalizaci povrchové nezávislosti. Vystřelující pozice a sítě jimi generované dělíme do hranových skupin ("edge groups"). Hranová skupina reprezentuje samostatné objekty scény promítnuté do roviny XY, tvořené XY siluetami hran. Pozice ve stejné hranové skupině mohou být sousedé a mohou tak sdílet informace, což nelze mezi pozicemi jiných skupin. Díky promítnutí objektů do roviny omezíme plochy, kterým lze přiřadit vystřelující pozici (plochy natočené o úhel uložení (AOR) více než 90◦ nemusíme uvažovat, AOR – "angle of 3.3. AKUMULACE POMOCÍ SLEDOVÁNÍ ČÁSTIC Z POVRCHU OBJEKTŮ 21 Obrázek 3.8: Rozdělení scény pro rychlejší vyhledávání kolizí sněhové vločky. Obrázek převzat z [13]. repose" – úhel uložení). Těchto hranových skupin využijeme pro řešení lavin, tedy přesunu sněhu mezi jednotlivými hranovými skupinami. Při tvorbě hranových skupin je také třeba dát pozor na nekonvexní objekty, což lze vyřešit například reprezentací ploch objektu pomocí více hranových skupin. Sněhové vločky (částice) tedy sledujeme z vystřelovacích pozic. Pohyb vloček reprezentujeme náhodným pohybem, který aproximujeme složením několika kroků sestávajících se z pohybu směrem vzhůru a následného vychýlení po kružnici. Velikost přímého kroku určíme s ohledem na důležitost vystřelující pozice, ze které byla vločka vystřelena a poloměr kružnice vychýlení je náhodně vybrán z normálního rozdělení. Vločku sledujeme dále z bodu, kam byla vychýlena, dokud nenarazí na překážku nebo k ploše reprezentující nebe. Pro zvýšení realistického dojmu lze využít proudové pole pro reprezentaci větru ve scéně. Pro výpočet průniku s překážkami chceme omezit počet testovaných ploch na co možná nejmenší. Využijeme proto pravidelnou mřížku v XY rovině. Pro každou buňku určíme minimální a maximální Z hodnoty ploch ležících v hraničním kvádru („bounding box“) dané buňky. Určené hodnoty zpracujeme pomocí rozsahových stromů ("range tree") [71], strukturu si můžeme představit podle obrázku 3.8. Po zpracování objektů do mřížky můžeme testovat sněhovou vločku jen v blízkých buňkách a v rozsahu Z-souřadnice, ve které se vločka nachází. Pokud vločka během své cesty nenarazila na překážku, dorazila úspěšně k nebi a je třeba o tom provést záznam, čehož později využijeme pro určení výšky sněhové pokrývky. Pro reprezentaci oblohy zvolíme pravidelnou mřížku. Když vločka úspěšně dorazí k obloze, uložíme do příslušné buňky informaci o oblasti, ze které částice přišla. Jestliže je oblast větší než buňka mřížky, uložíme množství sněhu, které částice reprezentuje, odpovídající části oblasti, která přesahuje velikost aktuální buňky, do sousedních buněk. Množství přidělené sousedním buňkám určíme z projekce oblasti na mřížku reprezentující oblohu. Když dokončíme sledo- 22 KAPITOLA 3. EXISTUJÍCÍ METODY vání vloček, určíme pro každou buňku mřížky oblohy b množství sněhu nacházející se v b a každé vystřelovací pozici l přiřadíme nové množství úměrné součtu buněk oblohy, do kterých pozice l přispěla. Oblast náležící l může samozřejmě přijmout množství z více buněk. Výsledná výška sněhové pokrývky je pak určena jako poměr množství sněhu přidělené oblasti s obsahem této oblasti. Princip záznamů v mřížce oblohy ilustruje obrázek 3.9. Obrázek 3.9: Ukládání množství sněhu do jednotlivých buněk oblohy.Vystřelující oblast může přispět do více buněk. Obrázek převzat z [13]. Obrázek 3.10: Graf znázorňující závislost pravděpodobné stability sněhové pokrývky na úhelu uložení AOR. Obrázek převzat z [13]. Obrázek 3.11: Ukázka sněhového zaprášení. Vlevo skutečná fotografie, vpravo objekt zasněžený metodou[12] s pomocí sněhového zaprášení. Obrázek převzat z [13]. Pro velmi úzké, velmi překryté nebo strmé plochy nedochází ke skoro žádné akumulaci, přesto ve skutečném světě můžeme vidět jakési sněhové zaprášení ("flake dust"), jako na obrázku 3.11. To lze modelovat pomocí poloprůhledné šumové textury. Po akumulaci sněhu je třeba také vyřešit jeho stabilitu. Všechny vystřelovací pozice uložíme seřazené podle hodnoty jejich výšky (Z ) přičtené k množství jejich naakumulovaného sněhu do seznamu u1. Seznam procházíme od nejvyšší pozice dolů a testujeme a rovnou řešíme výpočet nestabilních oblastí. 3.3. AKUMULACE POMOCÍ SLEDOVÁNÍ ČÁSTIC Z POVRCHU OBJEKTŮ 23 Nestabilita oblasti s může ovlivnit několik sousedních oblastí přidáním množství sněhu nebo způsobením nestability. Oblast s i všechny oblasti ovlivněné nestabilitou s přidáme do seznamu u2. Po průchodu seznamem u1 nastavíme seznam u1 =u2, u2 vyprázdníme a postup opakujeme, dokud nenastane nějaká podmínka ukončení (viz dále). Pro testování stability využijeme úhel uložení (AOR). Pro určení AOR je využita přechodová křivka určující pravděpodobnost stability pro úhly ve zvoleném rozsahu, tato křivka nemusí být lineární, jak ukazuje obrázek 3.10. AOR je zde závislý na výšce nahromaděného sněhu a ne sklonu oblasti pod ní, navíc se v průběhu času může měnit s ohledem na nahromaděný sníh, proto může i strmá oblast uchovávat sněhovou pokrývku, pokud množství sněhu sousední oblasti blokuje odvalení z oblasti strmé. Obrázek 3.12: Jednotlivé případy při řešení sněhové stability[13]. Test každé oblasti s vystřelující pozicí l probíhá v jednotlivých iteracích s následujícími kroky: • Spočti AOR mezi l a všemi sousedy n nacházející se níže než s. • Pro každé i s AOR příliš strmou pro uchování sněhu vyhodnoť překážkový test mezi l a ni : – je mezi nimi nesněhová překážka, lavina je blokována, ignoruj ni (obrázek 3.12i), – v cestě stojí sněhová vrstva – průnik sněhové vrstvy mezi l a ni - lavina je blokována, ignoruj ni (obrázek 3.12ii), – nestojí v cestě sněhová vrstva, mezi l a ni se na nachází plocha B, která může přijmout množství sněhu z l, nahraď ni za B (obrázek 3.12iii). • Rovnoměrně rozděluj sníh z l do všech ni , dokud se alespoň jeden soused nestane stabilní. • Opakuj kroky 1-3 dokud nejsou všichni sousedi stabilní nebo už v l nic nezbylo. Pokud nestabilní oblast s vystřelovací pozice l nemá žádné sousedy ležící pod ní, leží u okraje hranové skupiny. Z hranové skupiny může sníh dále cestovat vzduchem, dokud 24 KAPITOLA 3. EXISTUJÍCÍ METODY nenarazí na další objekt nebo zem. Pro vyslání laviny (malý počet částic) provedeme nejprve test, pomocí malého vektoru ve směru laviny, zda není lavina blokována. Pokud tomu tak je, musíme počkat, než dojde k nahromadění sněhu přes překážku. Pokud lavina není blokována, sledujeme částice, dokud nenarazí na další oblast s vystřelovací pozicí. Pro ukončení testu stability můžeme zvolit například časový limit, prázdný seznam u1 pro další zpracování nebo zvolení minimálního množství pro přesun lavinou, které nebylo naplněno v předešlém kroku. Pro zvýšení dojmu realističnosti lze do této metody zahrnout i jevy jako vytváření mostu mezi malými vzdálenostmi ploch nebo vyboulení hran sněhové vrstvy na okrajích objektů pomocí implicitních funkcí. Každý objem sněhové pokrývky je převeden do jedné z řady generovaných implicitních funkcí. Různé funkce využíváme pro efekt vyboulení na hranách a jiné pro vyhlazení povrchu při přechodu mezi jednotlivými oblastmi. Pro efekt vyhlazení povrchu je nutné implicitní funkce v určitých oblastech ořezat pro navázání dojmu, jako při tvorbě pomocí isoploch. 3.4 Simulace padajícího sněhu pomocí spektrální syntézy K simulaci padajícího sněhu lze využít také metody spektrální syntézy obrazu představené v [29]. Tento postup vychází z generování pohybu vln na mořské hladině [36]. Metoda sčítá posunující se sinusové průběhy ve frekvenční oblasti, které reprezentují pohyb obrazu v různých hloubkách. Algoritmus se snaží v reálném čase generovat vizualizaci padání sněhových vloček spojením využití částicového systému a obrazové syntézy. Generuje tak dynamickou texturu. V obecném případě 2D funkce, v tomto případě obraz, který je konstantně posouván v průběhu času, generuje pro 3D časoprostorovou frekvenční oblast tzv. "plochu výkonu"[66], zde označovanou jako plochu pohybu. Pokud chceme vyjádřit posunutí obrazu v čase t, můžeme jej určit pomocí vztahu I(x, y, t) = I(x − vx t, y − vy t, y − t, 0), kde vx a vy vyjadřují rychlost v ve směru osy x, respektive y. Aplikací 3D Fourierovy transformace na posunutý obrázek v čase t obdržíme prostorové frekvence ωx a ωy ve směru x a y a časovou frekvenci ωt tak, že veškerý výkon ve 3D frekvenční doméně leží na ploše procházející počátkem a zároveň určené pomocí rovnice ωt = −vx ωx − vy ωy . (3.1) Jestliže chceme vytvořit obrazovou sekvenci tvořenou posouváním jediného obrazového rámce ("frame") určenou rychlostí v, pak je každá 2D komponenta sinusovky posunuta stejnou rychlostí. Tím je způsobeno i to, že každá 2D složka sinusovky vytváří jedinečnou časoprostorovou frekvenční komponentu při posunutí v obrazové sekvenci, jak dokládá rovnice 3.1. Když budeme uvažovat pohyb pouze v ose y, můžeme rovnici 3.1 zjednodušit na tvar ωt = −sωy , kde s představuje y-ovou složku rychlosti vy . (3.2) 3.4. SIMULACE PADAJÍCÍHO SNĚHU POMOCÍ SPEKTRÁLNÍ SYNTÉZY 25 Obrázek 3.13: Výsledky generované metodou spektrální syntézy pro různé nastavení počtu sněhových vloček. Obrázek vpravo představuje scénu tvořenou kombinací částicového systému s metodou spektrální syntézy. Obrázek převzat z [29]. Pro lepší představu pohybové plochy můžeme využít pomocnou plochu definovanou jako ωt = 0 tak, že průnik těchto ploch tvoří přímku vx ωx + vy ωy = 0. Na takto sestrojenou přímku je vektor rychlosti obrazu v kolmý a jeho velikost určuje sklon pohybové roviny ve směru posunu obrazu. Daný model ale neobsahuje efekt lineární perspektivy, který nám zajistí při neměnné 3D rychlosti různou 2D rychlost v odlišných hloubkách. Proto se musí pohyb obrázku generovaný padajícím sněhem skládat ne z pouze jedné transformací, ale z celé skupiny transformací. Při uvažování případu popsaného rovnicí 3.2 tedy chceme, aby byla rychlost sněhové vločky závislá i na její hloubce. K tomu se přiblížíme využitím množiny pohybových ploch ωt = −s cos θωx − s sin θωy : s ∈ (smin , smax ), (3.3) kde (smin , smax ) reprezentuje rozsah rychlostí obrazu a cosθ , sinθ definují fixní směry pohybu obrazu. Díky této množině pokryjeme rozsah různých rychlostí padajícího sněhu, ale nezahrneme vliv perspektivního zkreslení. Toho dosáhneme omezením množiny frekvencí, kterými přispívají jednotlivé pohybové plochy z množiny definované rovnicí 3.3. Omezení musí být v souladu s vlastnostmi lineární perspektivy, proto musí splňovat pro padající sníh v hloubce d následující dvě podmínky. První podmínka říká, že čím blíže je sněhová vločka ke kameře, tím rychleji se pohybuje. Jestliže předpokládáme, že všechny vločky mají stejnou 3D rychlost, pak rychlost obrazu s reprezentující sněhovou vločku je nepřímo úměrná její hloubce d, s ∼ 1/d, v případě předpokladu z rovnice 3.2 pak obdržíme d∼ 1 . ωt /ωy (3.4) Druhá podmínka říká, že čím blíže kameře se sněhová vločka nachází, tím větší se zobrazí. Zvětšený obraz sněhové vločce vytvoří větší amplitudu v nižších prostorových frekvencích, díky čemuž hloubka sněhové vločky d je úměrná prostorové frekvenci, které vločka přispívá 26 KAPITOLA 3. EXISTUJÍCÍ METODY tak, že d= q ωx2 − ωy2 . Při dosazení d z rovnice 3.4 obdržíme 1 ωt =q . ωy ωx2 − ωy2 Pro libovolný směr pohybu θ, pak dostaneme obecný tvar ωt = C cosθωx + sin θωy q ωx2 − ωy2 (3.5) Konstanta C je rovna časové frekvenci, která odpovídá prostorové frekvenci tak, že (ωx , ωy) = (cos θ, sin θ). V případě že θ ∈ {0, π/2} představuje hodnota C obrazovou rychlost komponent sinusovky s vlnovou délkou rovné šířce obrazové oblasti. Rovnice 3.5 je funkce mapující prostorovou frekvenci do frekvence časové a zároveň definuje tvar střechové plochy ("tent surface") ve 3D frekvenční oblasti. Střechová plocha, jak ji nazýváme kvůli svému tvaru připomínající střechu, není definována v počátku (ωx = ωy = 0), kde se nachází stejnosměrná složka ("dc") obrazové frekvence. Pro velmi malé prostorové frekvence aplikujeme tyto limitní pravidla 1, cosθωx + sin θωy > 0 0, cosθωx + sin θωy = 0 lim = (ωx ,ωy )→(0,0) −1, cosθωx + sin θωy < 0 Metoda spektrální syntézy je postavena na diskretizaci rovnice 3.5 a skládá se ze dvou hlavních kroků. Zaprvé využijeme spektrální syntézu k vytvoření časově proměnné funkce viditelnosti α(x, y, t), definující součet hustoty vloček promítnuté na pixel v každém rámci ("frame"). Jinak řečeno, α(x, y, t) představuje součet 2D sinusových vln popsaných rovnicí 3.5. Tyto funkce viditelnosti jsou poté vykreslovány v obrazových částech ("tiles"), které jsou přes sebe poskládány na mřížku, reprezentující obrazovou oblast. Ve druhém kroku využijeme vypočtené viditelnosti k sestavení bílé vrstvy pro padání sněhu umístěnou nad obrázek na pozadí, video nebo vykreslovanou scénu. Pro převedení problému do diskrétní zóny můžeme využít postup pracující ve 2D nebo 3D. 3D přístup je neefektivní z hlediska časové složitosti a zároveň klade podmínku na neměnnost směru pohybu a rozsahu rychlosti vloček. Z tohoto důvodu popíšeme pouze 2D přístup. Pokud máme část obrazu ("tile") o rozměrech M x M, chceme provést syntézu časově proměnné funkce viditelnosti α̂(ωx , ωy , t) přes sekvenci rámců T přes tuto obrazovou část. Pro určení funkce viditelnosti využijeme pomocné funkce hustoty, jejíž hodnoty leží v intervalu {0,1}. Získání těchto hodnot popíšeme později. Aplikací inverzní rychlé Fourierovy transformace (iFFT) na tuto hustotovou funkci obdržíme požadované hodnoty viditelnosti α M X M X 2n 2n 2n α(ωx , ωy , t) = T α̂(ωx , ωy , t)ei N ωx x ei N ωy y ei N ϕ(ωx ,ωy ,t) ), ωx =0 ωy =0 3.4. SIMULACE PADAJÍCÍHO SNĚHU POMOCÍ SPEKTRÁLNÍ SYNTÉZY 27 kde ϕ představuje fázi. Pokud jsou hodnoty C a θ v průběhu času t konstantní, můžeme určit fázi ϕ jako cos θωx + sin θωy q ϕ(ωx , ωy , t) = C ϕ0 (ωx , ωy , t), ωx2 − ωy2 kde ϕ0 představuje náhodně zvolenou počáteční fázi, která zajišťuje iFFT reálný výsledek pro každý rámec. Pro případ, kdy hodnoty C a θ závisí na čase t, lze předchozí rovnici zobecnit na tvar ϕ(ωx , ωy , t + 1) = C cos θ(t)ωx + sin θ(t)ωy q ϕ(ωx , ωy , t). ωx2 − ωy2 Pokud všechny prostorové frekvence (ωx , ωy ) přispívají k určení TENT surface, znamená to, že přispívající vlnové délky nabývají hodnot od šířky dlaždice do vzdálenosti mezi pixely. Tyto extrémní vlnové délky můžeme zanedbat, jelikož nemají pozitivní vliv na vnímání simulace vloček. To si můžeme představit jako malé velmi pomalu se pohybující vločky v dálce nebo jako nereálně veliké sněhové vločky v popředí.Pro zajištění stejné viditelnosti různých obrazových rychlostí definujeme konstantní amplitudu v každém osminásobku prostorové frekvence. Toho docílíme přiřazením šumu amplitudám tak, že definujeme již zmíněnou hustotovou funkci jako 1 |α̂(ωx , ωy )| = q . ωx2 − ωy2 Pokud určíme ωt pro střechovou plochu vetší než Nyquistovu frekvenci T /2, dochází k časovému aliasingu. Pro vyvarování se tohoto jevu tzv. časového rozostření ("temporal blur "). Rozostření realizujeme tak, že pro fixní hodnotu C nastavíme hodnoty amplitudy splňující následující nerovnici rovné 0 |C cos θωx + sin θωy T q |> . 2 ωx2 + ωy2 Po přiřazení amplitud α̂ můžeme pro každý rámec t určit hodnost viditelnosti α použitím 2D iFFT. Pro hodnoty viditelnosti je nutné provést mapování do intervalu <0,1>. Toho docílíme nastavením střední hodnoty na 0,5 a následným snižováním standartní odchylky, aby hodnoty odpovídaly danému intervalu. Hodnoty ležící mimo interval ořízneme. Pro zahrnutí lidského vnímání, které je citlivější na logaritmické změny, spíše než na lineární, umocníme vypočtené hodnoty druhou mocninou, což je posune do spodní části intervalu, čehož následně využijeme při skládání s obrázkem pozadí. Intenzitu popředí (sněhové vrstvy) nastavíme na hodnotu 250 (max. hodnota = 255), což odpovídá bíle barvě sněhu. Pro výsledné složení barvy využijeme vztahu I(x, y, t) = Isnih α(x, y, t) + (1 − α(x, y, t)), kde Isnih označuje intenzitu barvy sněhu a Ipozad intenzitu pozadí. Intenzity jsou konstantní, v průběhu času měníme pouze viditelnost α. Výsledky metody můžeme vidět na obrázku 3.13. Metodu lze využít i pro video, nebo pro pohybující se kameru. 28 3.5 KAPITOLA 3. EXISTUJÍCÍ METODY Padání a akumulace sněhu s využitím LBM Dosud zmíněné metody, kromě [43], při svých výpočtech nezahrnují vliv větru na pohyb sněhových vloček. K definici proudového pole lze z hlediska fyzikalní koreknosti přistoupit dvěma způsoby. Za prvé předpokládáme, že tok je spojitý jak v čase, tak i prostoru. Pro tento způsob využijeme Navier-Stokesovy diferenciální rovnice (soustava nelineárních rovnic, což je výpočetně velmi náročné). Druhý přístup pohlíží na problém z hlediska makroskopických mechanismů, kde vyšetřujeme místo jednotlivých částic pohyb jejich shluků, modelovaný pomocí Boltzmannovy rovnice [65], který zde blíže představíme. Výpočet Boltzmannovy rovnice je také výpočetně náročný, ale díky mikroskopickému přístupu k částicím můžeme čas i prostor plně zdiskretizovat. Jedná se tedy o kombinaci výhod mikroskopickéhoh a makroskopického přístupu. Pro lepší představu o této metodě odkazujeme na přílohu A. Proudové pole můžeme navzorkovat do mřížky a pohyb jednotlivých částic určíme z distribuční funkce, která rozesílá jejich shluky po mřížce. S ohledem na zmíněné předpoklady můžeme Boltzmannovu rovnici v diskrétní doméně vyjádřit jako δfi 1 + ei ∇i = (fieq − fi ), δt τ kde pravá strana představuje Bhatnagar-Gross-Krook (BGK) relaxaci kolizního integrálu Obrázek 3.14: Rozdělení diskrétních vektorů rychlosti do buňky mřížky v případě 2D a 3D prostoru. Obrázek převzat z [65]. s fi aktuální hustotou částic, fieq lokálním rovnovážným stavem distribuční funkce a τ je relaxační čas reprezentující potřebný čas od nerovnovážného k rovnovážnému stavu. Podle Boltzmannova H-teorému [4] se systém v nerovnovážném stavu přibližuje k rovnovážnému stavu s maximální pravděpodobností. Při pohybu shluků částic v diskrétním čase z jedné části mřížky do druhé se tak blíží k lokálnímu rovnovážnému stavu a je zajištěno zachovávání jak hmoty, tak i momentu. Pro zjednodušení si lze představit převedení problému do 2D prostoru (obrázek 3.14), kde rychlost v diskrétní doméně vyjádříme devíti možnými směry. Diskrétní tvar Boltzmannovy rovnice pak můžeme vyjádřit jako 1 fi (t + ∆t, x + ci ∆t) − fi (t, x) = (fieq (x, t) − fi (x, t)), i = 0, 1, 2. . . 8 t 3.5. PADÁNÍ A AKUMULACE SNĚHU S VYUŽITÍM LBM 29 kde fi udává aktuální hustotou částic ve směru i s rychlostí ci v bodě x v čase t a ∆t reprezentuje časový krok pro pohyb mezi uzly mřížky. V každém uzlu mřížky může být hustota a makroskopická rychlost částic vyjádřena pomocí distribuční funkce jako ρ(x, t) = 8 X (fi (x, t)), i=0 8 u(x, t) = 1X (ci fi (x, t)). ρ i=0 Pro modelování proudového pole využijeme stejný princip ve 3D pro rozložení větru Fi (r, t) v buňce r a čase t podél směru ci . Pro 3D prostor rozšíříme počet směrů na 15, jak ilustruje obrázek 3.14. Diskrétní vektory rychlostí můžeme vyjádřit jako i = 0, (0, 0, 0), (±1, 0, 0)c, (0, ±1, 0)c, (0, 0, ±1)c, , i=1...6, ci = (±1, ±1, ±1)c, i = 7. . . 14 Pro každou buňku mřížky můžeme určit hustotu toku větru ρ a jeho rychlost u jako ρ= 14 X (fi ), i=0 u= 14 X 1 i=0 ρ (fi ci )) a model pro naše 3D diskrétní proudové pole může být popsán jako 1 fi (r + ci , t + ∆t) = fi (r, t) + (fieq (u(r, t), r(r, t)) − fi (r, t)), i = 0. . . 14, ξ kde ξ představuje čas relaxace podle lokálních gradientů rychlosti, které jsou spjaté s viskozitou kapalin. Hodnoty ξ nabývají od 0,5 až po velké hodnoty Reynoldsových čísel. Lokální rovnovážný stav fieq (u, r) je pak dán jako f ieq (u, r) = ωi ρ(1 + ciα uα ciαuα uα uα + ( 2 )2 − ), i = 0. . . 14. 2 cs cs 2 ∗ c2s Veličina ciα představuje vektor rychlosti (s hodnotou α) ve směru ci , c2s = 1/3 a váhové koeficienty ωi jsou dány předpisem i=0, ostatní, 2/9, 1/9, i=1...6, ωi = 1/72, i=7. . . 14 Pohyb větru je ovlivněn tvarem scény, objektů atd. Pro tyto případy je třeba zavést hraniční podmínky pro chování větru. Pro horní hranici, tedy pro oblohu scény, je vertikální složka rychlosti nastavena na 0 a horizontalní na zvolenou hodnotu. Pro hranice po stranách scény nastavíme horizontální složky rychlosti rovné hodnotě reprezentující nekonečno a nastavíme 30 KAPITOLA 3. EXISTUJÍCÍ METODY vzdálenosti (pozice r) před proudovým polem dostatečně veliké pro dosažení rovnovážného stavu. Pro spodní hranici, reprezentující scénu, tedy terén a objekty ve scéně, je rychlost částic 0. Očekávané chování v této buňce rsolid je odražení zpět do scény, čehož docílíme otočením všech potřebných Fi tak, že fi (rsolid , t) = fi−(−1)i mod 2 (rsolid , t). Při simulaci padání sněhu působí na sněhové vločky více sil než jen síla větru.Významnou silou je gravitace, tu v současném modelu můžeme považovat za konstantní. Další silou ovlivňující pohyb vloček je kolizní síla mezi jednotlivými vločkami, ta je však oproti výše zmíněným silám minimální a můžeme ji zanedbat. Síly působící na částice jsou tedy síla větru u a gravitační síla -ug (záporná, protože působí směrem dolů.) Pohyb částic z pozice 0 0 0 0 0 0 r(rx , ry , rz ) do mista r (rx , ry , rz ) za čas ∆t můžeme vyjádřit jako rx = rx + ux ∆t, ry = 0 ry + uy ∆t, rz = rz + (uz − ug )∆t. 0 Pozice r se nemusí nacházet v uzlu mřížky, v tom případě určíme rychlost v tomto bodě pomocí trilineární interpolace rychlostí z uzlů tvořících buňku mřížky, ve kterém se nachází 0 pozice r , viz obrázek 3.15. Rychlost v daném bodě tedy určíme vztahem Vr = (1 − ∆x)(1 − ∆y)(1 − ∆z)V0 + (1 − ∆x)(1 − ∆y)∆zV1 + (1 − ∆x)(1 − ∆z)∆yV2 + (1 − ∆y)(1 − ∆z)∆x ∗ V3 + (1 − ∆x)∆y∆zV4 + (1 − ∆y)∆x∆zV5 + (1 − ∆z)∆x∆yV6 + ∆x∆y ∗ ∆zV7 (3.6) ∆x = (rx − x0 )/Γx , ∆y = (ry − y0 )/Γy , ∆z = (rz − z0 )/Γz , kde Vi odpovídá rychlosti v uzlu i, Γx , Γy , Γz délce mezi uzly v jednotlivých osách a x0 , y0 , z0 jsou souřadnice uzlu s rychlostí V0 (obrázek 3.15). Ve skutečném světě není vítr konstantní. Obrázek 3.15: Případ pro výpočet rychlosti vločky, kdy se vločka nachází uvnitř buňky. Zde je nutno provést výpočet pomocí interpolace. Obrázek převzat z [65]. Můžeme tak rychlost větru V rozdělit na průměrnou složku Va a náhodnou složku ve tvaru 3.5. PADÁNÍ A AKUMULACE SNĚHU S VYUŽITÍM LBM 31 Vrand = µV sin α, α ∈< 0, π >, kde µ může být náhodné číslo, v tomto případě je zvolena hodnota n/20, kde n je rozměr mřížky. Pro počáteční nastavení proudového pole využijeme rychlost V a postupu podobnému záplavovému algoritmu (také znám jako semínkové vyplňování). Pro krajní uzly mřížky nastavíme rychlosti V podle již popsaných hraničních podmínek. Pro každý uzel, který má být zaplaven, pak přičteme vážené množství hustoty, kterým mu přispívají jeho sousedé z každého směru. Pokud je hodnota hustoty ρ ve zvoleném uzlu a cw směr proudového pole, pak hodnotu ∆fi určíme jako ∆Fi = λi εi ρV , ∆ci = 0, 1/4, 1/16, ∆ci ∈ (0, ∆π/2), λi = 0, ∆ci = π/2, 1, ∆ci ∈< 0, π/2 >, εi = −1, ∆ci ∈ (π/2, π > . Zde ∆ci představuje úhel mezi ci a cw . Přírůstek rychlosti P14 v uzlu je pak dán jako ∆u = 1 P14 i=0 ∆f i = 0. Průměrnou hodnotu i=0 (ci ∆fi ) = V a přírůstek hustoty jako ∆ρ = ρ můžeme pak po uplynutí času t měnit v závislosti na zvolené hodnotě zrychlení a tak, že V = at. Po dopadu vločky na zem nebo objekt a dosažení stability se vločka uloží na danou pozici. K tomuto uložení využijeme výškové pole h(x, y). Po dopadu zvoleného množství sněhových vloček na místo h(i, j), inkrementujeme hodnotu v dané buňce. Každá buňka tak obsahuje svůj čítač pro množství sněhu v daném místě. Pro různé hodnoty jsou dále využity textury v různých odstínech šedi a průhlednosti pro vizuální reprezentaci množství sněhu. Obrázek 3.16: Scéna generovaná pomocí proudového pole vypočteného s využitím diskrétní Boltzmanovy rovnice. Obrázky jsou pořízené ve stejný okamžik z různých úhlů. Obrázek převzat z [65]. Pokud dosáhne síla větru usi větší hodnoty než je zvolený práh uprah , může dojít k erozi již ustáleného sněhu, tedy k přemístění určitého množství z jednoho místa na jiné. Množství poslané do směru i pak vypočteme jako ei = αsnow (usi − uprah ), kde αsnow označuje množství přeneseného sněhu, v tomto modelu je pro zjednodušení empiricky zvolena konstanta 0,1533. Pokud je tedy usi > uprah , pak h(i, j) = h(i, j) − 1, usi = usi − (usi − uprah ). Pro reprezentaci sněhových vloček můžeme využít koule, u kterých měníme poloměr R pomocí náhodného čísla ze zvoleného rozsahu, nebo pomocí textury, zobrazující vločku. Výsledky prezentované touto metodou je možné vidět na obrázku 3.16. 32 3.6 KAPITOLA 3. EXISTUJÍCÍ METODY Padání a akumulace sněhu pomocí NSE Jiný přístup, který využívá proudové pole, pro simulaci padání sněhu představuje [40], podrobněji popsaný v [1]. Zde je využit druhý způsob oproti předešlé metodě, tedy modelování proudového pole pomocí Navier-Stokesovy rovnice. Metoda se dále zabývá modelováním tvaru sněhové vločky a nepoužívá tak pouze zjednodušené tvary v podobě jednoduchých hranolů čí koulí. Akumulace sněhové pokrývky vychází z [12]. Pro modelování sněhové vločky jsou uvažovány tři hlavní rysy, kterými jsou tvar, velikost a hustota. Hlavními vlivy pro určení těchto parametrů je míra saturace vzduchu vodou a teplota. Míru saturace můžeme zanedbat, jelikož nemá v modelu další využití, naopak teplota ovlivňuje i další aspekty, například akumulaci sněhu. Tvary sněhových vloček lze rozdělit do několika odlišných skupin, ale pro zjednodušení se omezíme na modelování pouze jednoho tvaru, měnit budeme pouze velikost a hustotu jednotlivých vloček. Podle experimentů v [26] lze průměr vločky D definovat v závislosti na teplotě jako 0, 0015|T |−0.35 pro T ≤ −0, 061, D= (3.7) 0, 04 pro T > −0, 061, kde D je průměr vločky v m a T teplota v ◦ C. Tyto údaje odpovídají průměrným hodnotám průměrům sněhových vloček, kde nepřesnosti dosahují až ±50%. Z tohoto důvodu můžeme upravovat velikost vločky pomocí přičtení náhodného čísla z daného rozsahu a generovat tak odlišné vločky. Hustotu vločky ρvločka je pak nepřímo úměrná jejímu průměru a závisí také na vlhkosti vzduchu tak, že ρvločka = Cvlhkost D (3.8) Csucho = 0, 170kg/m2 Cvlhko = 0, 724kg/m2 Vlhkost vzduchu můžeme určit pomocí teploty, jak dokládá obrázek 3.17. Samotnou vločku budeme modelovat pomocí soustředných koulí, jejichž počet je dán podle vypočteného průměru, mezera mezi jednotlivými vrstvami je dána zvolenou konstantou. Pro každou vrstvu generujeme stejný počet trojúhelníků tak, aby se nově generované trojúhelníky alespoň dotýkaly trojúhelníků z předešlé vrstvy a nevznikaly tak nesmyslné nespojité konfigurace. Pro vlhké vločky byla empiricky zvolena hodnota 40 trojúhelníků na vrstvu, pro suché 10. Výsledné vločky můžeme vidět na 3.18. Ostrost tvaru vločky způsobená trojúhelníky by měla být ve scéně zanedbatelná, nicméně v [75] můžeme najít postup pro zjemnění konečného tvaru vloček nahrazením rohů trojúhelníku Beziérovými křivkami, což můžeme pozorovat na obrázku 3.18c)-d). Hlavní síly působící na pohyb částice jsou síly gravitační Fgravitace , unášení Funaseni , nadzdvihnutí Fnadzdvihnuti a vychýlení Fvychyleni . Fgravitace a Fnadzdvihnuti sněhové vločky působí pouze v ose y a jsou konstantní. Síla nadzdvihnutí působí proti Fgravitace a je oproti ní velmi malá, proto ji nemusíme dále uvažovat. Funaseni odpovídá síle větru působící na sněhovou vločku a určíme ji jako Funaseni = 2 Ukapalina msnih g 2 Umax,y , 3.6. PADÁNÍ A AKUMULACE SNĚHU POMOCÍ NSE 33 Obrázek 3.17: Graf znázorňující závislost velikosti vločky na teplotě, teplota také určuje vlhkost vytvořené vločky. Přerušovaná čára značí hranice směrodatné odchylky naměřené při experimentálním měření v [26]. Obrázek převzat z [1]. kde Ukapalina představuje rychlost větru, msnih hmotnost vločky, g gravitační zrychlení, Umax,y maximální přípustnou rychlost ve směru osy y tak, že pro suché vločky generujeme číslo z intervalu <0,5,1,5> m/s a pro vlhké z <1,2>m/s. Umax , msnih a g představují v průběhu času konstanty pro jednotlivé vločky, takže Funaseni zavisí pouze na Umax,y . Rychlost toku Ukapalina pak určíme jako rozdíl rychlosti větru Uvitr a Uvlocka představující rychlost vločky, jejíž hodnotu nastavíme jako Uvlocka = −Ugravitace . Fvychyleni způsobuje krouživý a nepravidelný pohyb padající vločky, a rychlost vychýlení pak určíme − sin (ωt) , 0 Uvychyleni = Cvel ωR cos (ωt) kde Cvel = |Ukapalina |/|Uvlocka | je škálovací hodnota vzhledem k rychlosti toku, ω úhlová rychlost vločky, R poloměr vychýlení a t čas. Proudové pole pak modelujeme pomocí Navier-Stokesových rovnic. Při předpokladu nestlačitelnosti, neviskozity a konstantní hustotě rovné jedné můžeme rovnice zjednodušit na Eulerovy rovnice [14] ve tvaru ∇.u = 0, (3.9) δu = −(u.∇)u − ∇p (3.10) δt kde ∇. představuje divergenci, u je vektor rychlosti a p tlak. Rovnice 3.9 definuje zachování hmoty, rovnice 3.9 zachování momentu. Pro řešení těchto rovnic rozdělíme postup do dvou kroků podle [14] a [58]. V prvním kroku využijeme Semi-Lagrangova přístupu pro výpočet středních hodnot ("intermediate") pole rychlosti u∗ a v dalším kroku gradient tlaku ∇p pro 34 KAPITOLA 3. EXISTUJÍCÍ METODY Obrázek 3.18: Přiblížený pohled na generované vločky. a) Vlhká sněhová vločka. [1], b) Suchá sněhová vločka. [1], c) Původní vlhká sněhová vločka. [75] d) Vlhká sněhová vločka po úpravě Beziérovými křivkami. Obrázek převzat z [75]. zajištění zachování hmoty z rovnice 3.9. Tyto kroky opakujeme, dokud je potřeba pole upravovat. V prvním kroku se tedy musíme vypořádat s prvním činitelem rovnice 3.10 −(u.∇)u, čímž zajistíme, že malá lokální změna ovlivní i zbytek domény. Aplikací Taylorova rozvoje prvního řádu na −(u.∇)u obdržíme [14] −(u.∇)u = (u∗ − u) , ∆t kde u∗ představuje pole středních hodnot a ∆t časový krok mezi aktualizacemi. K určení Obrázek 3.19: Ukázka proudových polí. Kužely označují sílu a směr toku. Vlevo ukázka proudového pole nezachovávající hmotu (do buňky přijde tok, který vzápětí zmizí). Vpravo proudové pole po projekci zachovavající hmotu, tvoří se smyčky. Obrázek převzat z [1]. u∗ využijeme Semi-Lagrangeova přístupu [73], kde pro výpočet u∗ musíme využít zpětné integrace spolu s interpolací na pevné mřížce (odpovídající voxelovým plochám scény) s časovým krokem ∆t. Pro tento postup využijeme druhý řád interpolace metody RungeKutta [62]. Ve druhém kroku provedeme projekci pole vypočteného v prvním kroku tak, aby byl dodržen požadavek na zachování hmoty, tedy, že co přiteče do aktuálního voxelu, z něj i odteče. Ilustraci aplikace projekce můžeme vidět na obrázku 3.19. K výpočtu projekce využijeme Helmhotz-Hodgevy dekompozice, podle které lze každé vektorové pole rozdělit na dvě části tak, že w = v − ∇s 3.6. PADÁNÍ A AKUMULACE SNĚHU POMOCÍ NSE 35 kde w představuje vektorové pole bez zachování hmoty, v vektorové pole se zachováním (∇.v = 0) a ∇s gradient skalárního pole. To lze využít na náš problém pro projekci u∗ na u, tak že u = u∗ − ∇p. Výpočet tlaku pro každý voxel vyjádříme pomocí Poissonovy rovnice s Neumanovými okrajovými podmínkami. Sestavením výpočtu pro všechny voxely dostaneme lineární systém s řídkou maticí koeficientů, což lze řešit například pomocí metody sestupných gradientů. Zrychlení na výpočet v reálném čase lze dosáhnout pomocí paralelizace SOR ("successive over relaxation")[53]. Obrázek 3.20: Ukázka akaumulace sněhu a padání sněhu ovlivněné proudovým polem [1]. Pro modelování nahromaděného sněhu vycházíme převážně z metody [12]. Výpočet je opět iterační, kvůli možnosti úpravy proudového pole vlivem nahromaděného sněhu, který pole ovlivní. Znovu vytvoříme hranové skupiny pro odlišení ploch objektů, na kterých se sníh může akumulovat. Na rozdíl od [12] ale posíláme částice (sněhové vločky) z oblohy do proudového pole a hledáme průsečíky s objekty ve scéně. Částice vysíláme tak, že oblohu rozdělíme pravidelnou mřížkou a z každé buňky vyšleme velké množství částic, které dále sledujeme. Jakmile dojde ke kolizi vločky, zapamatujeme si souřadnice nárazu na daném trojúhelníku. Pokud množství sněhu na zvolené oblasti (trojúhelník sítě) nepřesáhne zvolený práh, můžeme vykreslit jednotlivé vločky pro dojem sněhového zaprášení. Množství které dopadne je ovlivněno objemem vločky, který je řízen teplotou. Po každé interaci dochází ke zjemění trojúhelníkové sítě. K tomu využijeme těžiště napadaného sněhu trojúhelníka TS a těžiště samotného trojúhelníka TT , na kterém vyšetřujeme úhel svíraný mezi přímkami TT TS a TT Vi . Nejbližší vrchol k TS vyloučíme a testujeme vrcholy Vi , tedy vzdálenější vrcholy trojúhelníka od TS . Přímka s větším úhlem poté dělí původní trojúhelník. Výška sněhové vrstvy pak odpovídá poměru objemu na trojúhelníku s obsahem trojúhelníka. Pro kontrolu stability opět využijeme AOR, AOR = 30|T + 6|−0.25 + 40, proT ≤ −8.5, 26.1418 8.5 T + 90, proT > −8.5, (3.11) kde T reprezentuje teplotu. Pro konečné vykreslení sněhové vrstvy se pokusíme vyhladit 36 KAPITOLA 3. EXISTUJÍCÍ METODY sněhovou plochu nastavením do vrcholů trojúhleníků sítě průměrnou hodnotu výšky incidujících ploch. Výsledky generované touto metodou ilustruje na obrázek 3.20. 3.7 Akumulace sněhu pro velké scény pomocí zastínění okolím Většina existujících metod pro modelování zasněžených scén je zaměřena na menší scény, kde je kamera umístěna poblíž objektů ve scéně a zaměřují se na detaily akumulace v okolí těchto objektů. Tyto postupy jsou však pro větší scény (500K trojúhelníků) časově velmi náročné. Řešením tohoto problému může být například aproximační metoda zastínění pro velké scény s kamerou umístěnou ve větší vzdálenosti [17]. Tímto postupem lze také simulovat tání naakumulovaného sněhu. Metoda předpokládá, že sněhová vrstva je v celé scéně konstantní a nezaobírá se simulací padajícího sněhu, řeší jeho akumulaci a tání vlivem slunečního žáru. Výpočet se skládá ze dvou kroků, při kterých využíváme výpočtů přímého a nepřímého osvětlení. Postup je znázorněn na obrázku 3.21. V prvním kroku využijeme výpočtu zastínění okolím ("ambient occlusion") pro výpočet tvaru a rozmístění sněhové pokrývky. Pro každý vrchol vstupní sítě (např. krajiny) určíme hodnotu zastínění okolím. K tomu lze využít implementaci na GPU [30]. Nejprve umístíme kameru do požadovaného vrcholu a směr pohledu kamery zvolíme ve směru normály v daném vrcholu. Takto nastavenou mřížku předáme ke zpracování OpenGL a dotazuARB_OCCLUSION_QUERY. Tím obdržíme počet nezakrytých fragmentů fi,j . Výslednou f hodnotu zastínění ai,j pro daný vrchol sítě (i, j) tedy určíme jako ai,j = 1 − Ni,j , kde N představuje celkový počet pixelů. Tento postup opakujeme pro každý vrchol. Hodnoty zastínění můžeme uložit do jasové textury a k výpočtům využít GPU implementaci s pomocí VBO (Vertex Buffer Object). Množství sněhu si,j , kterým daný vrchol do scény přispívá, pak určíme ze vztahu si,j = smax (τ − ai,j ) cos θ, (3.12) kde τ je uživatelem zvolený práh, smax představuje konstantní hodnotu výšky sněhu po celé scéně a θ sklon vrcholu daný jako úhel mezi normálou vrcholu a směrovým vektorem k zenitu. Hodnotu smax zvolíme úměrnou velikosti scény. Výpočet stability je uskutečněn jako v metodě [48]. Vrcholy, jejichž hodnoty zastínění ai,j přesahují práh τ , nepřispívají žádným množstvím sněhu, jak definuje rovnice 3.12. Tímto postupem určíme rozmístění a množství sněhu ve scéně. Druhý krok zahrnuje vliv Slunce na scénu a simuluje tání a sublimaci sněhu. Při tomto kroku aktualizujeme také stabilitu sněhu, jelikož dochází k jeho rozptylu. Pro simulaci Slunce obalíme scénu polokoulí a vypočteme na ni hodnoty osvětlení, které přispívají k rozptylu sněhu ve scéně, čímž simulujeme osvětlení scény oblohou. Osvětlení bodu P (θ, γ) vypočteme postupem [48] tak, že L(θ, γ) = Lz (0.91 + 10e−3γ + 0.45 cos2 γ) − (1 − e−0.32secθ) 0.274(0.91 + 10e−3γ + 0.45cos2 z0 ) (3.13) kde Lz je svítivost (luminance) zenitu, γ je úhel mezi Sluncem a bodem P , θ je úhel mezi zenitem a bodem P , z0 představuje úhel mezi zenitem a sluncem a úhel α je promítnutí γ do roviny horizontu. γ můžeme určit z z0 , θ a α tak, že γ = arccos(cos z0 cos θ + sin z0 sin θ sin α). 3.7. AKUMULACE SNĚHU PRO VELKÉ SCÉNY POMOCÍ ZASTÍNĚNÍ OKOLÍM 37 Obrázek 3.21: Časové snímky krajiny. Vlevo před zasněžením, uprostřed po výpočtu sněhové vrstvy ze zastínění okolím, vpravo po určení přímého osvětlení (Slunce září zleva). Obrázek převzat z [17]. Svítivost každého bodu vypočteme pomocí rovnice 3.13 a výslednou hodnotu daného místa určíme jako průměrnou hodnotu po uplynutí času reprezentující den, tedy po oběhnutí Slunce. Tuto hodnotu využijeme pro osvícení každého bodu na vygenerované sněhové vrstvě. Dále určíme i zastínění podle rovnice 3.12. Množství roztátého sněhu určíme jako vážený součet zastínění pro všechny pozice Slunce během dne. Práh τSlunce by měl být menší než τokoli při výpočtu zastínění z rovnice 3.12, jeho hodnoty nastavuje uživatel libovolně. Obrázek 3.22: Vliv více vzorků pozic slunce na scénu. Vlevo je využit pouze jeden vzorek, vpravo 10. Obrázek převzat z [17]. Zastínění z osvícení zprůměrovaných hodnot Slunce využijeme pro určení množství rozptýleného sněhu pro všechny vrcholy. Učiníme tak pomocí z-bufferu k určení viditelnosti vrcholů z oblohy. Pro tento účel přesuneme kameru do pozice Slunce. Vykreslíme původní síť terénu a poté vykreslíme pouze vrcholy nově vypočtené sněhové sítě. Znovu aplikujeme ARB_OCCLUSION_QUERY dotaz pro zjištění, kolik vrcholů je před sluncem zakryto. Jelikož vykreslujeme pouze vrcholy, výsledky dotazu budou nabývat pouze hodnot{0,1}. Množství sněhu je poté zmenšeno výpočtem podle rovnice 3.12. Postup s pouze jedinou po- 38 KAPITOLA 3. EXISTUJÍCÍ METODY zicí Slunce generuje ostré přechody, proto pro vyhlazení sněhových hranic můžeme využít více pozic Slunce pro určení osvětlení scény. Tento vliv je patrný na obrázku 3.22. Obrázek 3.23: Scéna generovaná pomocí výpočtu zastínění okolím. Obrázek převzat z [17]. Konečné scény generované touto metodou můžeme vidět na obrázku 3.23. Postup je vhodný pro veliké scény, skládající se z velkého počtu trojúhelníků a pro pohled z větší vzdálenosti. Pokud ale chceme podrobněji pozorovat vliv překážek na akumulaci sněhu, je vhodnější zvolit jiné metody. 3.8 Geometrický algoritmus pro rovnoměrné rozmístění sněhu ve scéně Postup zvolený v metodě [15] je založen na pozorování geometrických vlastností napadaného sněhu, nejedná se tedy fyzikální model. Je zde představen geometrický algoritmus pro realistické zobrazení statických scén pokrytých sněhem. Pro zjednodušení je uvažováno konstantní množství sněhu na celé scéně. To v nejjednodušším případě, kdy scénu tvoří pouze plocha, způsobí rovnoměrné rozložení sněhu. Charakteristických tvarů nabývá sněhová vrstva na povrchu objektu u jeho hranic, kde tvar sněhové vrstvy přibližně odpovídá křivce funkce čtvrté mocniny. Tuto hranu nazýváme jako vnější hranu ("outer edge"). Jako další zjednodušení není uvažován vliv větru na padající sněhové vločky. Rychlost vloček se skládá ze dvou částí, vertikální vvertikal a horizontální vhorizont . Pokud narazí vločka na plochu (povrch objektu) S s hranicí δS rychlost vvertikal přestáváme uvažovat. Místo dopadu vločky označíme x. Z tohoto bodu vločka muže urazit vzdálenost úměrnou velikosti vhorizont . Jestliže se tento bod x nachází poblíž hranice δS, je zde pravděpodobnost, že vločka spadne z povrchu objektu níže. Velikost sněhové vrstvy v bodě ~x závisí na velikosti oblasti uvnitř δS, jak ilustruje obrázek 3.24a). Jedná se o výpočet pravděpodobnosti vážené sumou všech vloček končících v bodě ~x. Pro přesný výpočet výšky hexact (~x) v bodě ~x tedy provádíme integraci normálního rozložení dvou proměnných se středem v ~x se souřadnicemi (x, y) přes 3.8. GEOMETRICKÝ ALGORITMUS PRO ROVNOMĚRNÉ ROZMÍSTĚNÍ SNĚHU VE SCÉNĚ39 Obrázek 3.24: Parametry ovlivňující výšku a míru zaoblení sněhové vrstvy u krajů objektů. a) Ilustrace parametrů ovlivňující výšku sněhové vrsvvy v bodě x. b) Závislost tvaru hrany sněhové vrstvy u vnější hrany na hodnotě c. Obrázek převzat z [15]. plochu S a standardní odchylkou rovné 1, dostaneme Z Z 1 −(x0 − x)2 − (y 0 − y)2 0 0 exact h (~x) = hmax e dx dy . 2n 2 S Pro velké plochy s hranicí tvořenou rovnou úsečkou záleží výška sněhové vrstvy hplocha (lvnejsi ) pouze na vzdálenosti k vnější hraně lvnejsi , čímž můžeme upravit předešlý výpočet jako hplocha (lvnejsi ) = hmax (0.5 + erf (lvnejsi )), 2 erf (lvnejsi ) = √ π Z lvnejsi 2 0 elvnejsi dlvnejsi 0 , 0 kde erf představuje chybovou funkci a hmax maximální výšku vzdálenou od hranice. Zmíněný výpočet lze také uplatnit na plochy, jejichž průměr je dostatečně velký v porovnání s vhorizont . Pro vyhnutí se náročných výpočtů integrálů lze využít aproximaci definující výšku sněhové vrstvy h(lvnejsi ) závislou na vzdálenosti od nejbližší hranice. Aproximace je určena jako h(lvnejsi ) = hmax (1 − (clvnejsi − 1)4 ), (3.14) kde lvnejsi odpovídá vzdálenosti od hranice a zároveň splňuje podmínku 0 ≤ clvnejsi ≤ 1, přičmež c představuje reálné číslo z intervalu (0; ∞) modelující strmost sněhové pokrývky poblíž hranic povrchu objektu. Vliv proměnné c na strmost hrany vrstvy je zobrazena na obrázku 3.24 b). Profil hrany vrstvy definovaný zmíněnou křivkou nemusí nutně nastat. Vytvoření takového profilu je omezeno podmínkou přímé viditelnosti plochy s oblohou, tedy že plocha není ani částečně překrytá jiným objektem a zároveň musí být plocha dostatečně veliká pro dosažení maximální hodnoty. Pokud se jedná o velmi úzkou plochu, nedošlo by k dosažení požadované výšky a nastala by ztráta části sněhových vloček. Abychom zabránili těmto ztrátám, zvolíme plochy, na kterých je možno akumulovat sníh. Plochy, jejichž normálový vektor svírá úhel α menší než 90◦ s vektorem padání sněhu f~, jsou ty, které mohou sníh 40 KAPITOLA 3. EXISTUJÍCÍ METODY akumulovat. Výšku h považujeme za horizontální výšku vrstvy, ne za tloušťku vrstvy podél plochy, proto můžeme zanedbat redukci výšky h u strmějších plošek. Dále můžeme oblastem uložení A (3.24 a)) přiřadit poloměr ri,max určující maximální vzdálenost k hranici na plošce i. Pro plochy jejichž ri,max < 1 nastavíme hi,max = ri,max a přepočteme novou vzdálenost l od hranice l0 = hi,max , čímž zajistíme dosažení hi,max alespoň v jednom bodě. Plochy, které jsou překryté, obsahují menší množství sněhu, proto musíme rozdělit překryté plochy na více segmentů, pro určení množství sněhu na části překryté překážkou, obdobným způsobem jako při výpočtu radiosity. Obrázek 3.25: Vlevo skutečná fotografie. Vpravo modelovaná scéna geometrickým algoritmem. Obrázek převzat z [15]. Pokud je dovršena maximální výška na hranicích plochy δS, necháme přebytečné množství spadnout na plochu ležící přímo pod objektem (ve směru padání vloček f~). Oblast ležící pod překážkou (objektem), která je překrytá, je aproximačně určena jako doplněk k vrstvě ležící na překážce nad plochou. Výsledek můžeme vidět na obrázku 3.25, kde si můžeme všimnout tvaru sněhových vrstev na stole a na lavičkách stolem částečně překrytých. Pokud plocha nemá pod sebou žádnou další plochu, dochází k nahromadění sněhu pod překážkou. Takové oblasti nazýváme vnitřní hranou ("inner edge"). Přírůstek množství sněhu h+ můžeme definovat jako h+ (lvnitrni ) = 1 − h(lvnitrni ), kde lvnitrni představuje vzdálenost k vnitřní hraně. Výsledná výška H(j) v bodě j je určena vztahem H(j) = h+ (lvnitrni ) + h(lvnejsi ). Pro uložení informací o nahromaděném sněhu je použita datová struktura , známá jako rozšířená výšková mapa ("height span map"). Mapa se skládá ze čtvercových buněk, ve kterých uchováváme seznam přechodů ("transition list"). Seznamy jsou řazené podle výšky ve směru f~. Přechody mohou být dvojího druhu, a to "přední", reprezentující plochu svírající úhel α menší než 90◦ a zároveň viditelné ze zdroje (oblohy) nebo zbylé označené jako "opačné"("backsided "). Pro lepší představu jsou přechody znázorněny na obrázku 3.26 . Každý přechod uchovává hodnoty výšky, ve které se nachází, výšky sněhové vrstvy, indexy 3.8. GEOMETRICKÝ ALGORITMUS PRO ROVNOMĚRNÉ ROZMÍSTĚNÍ SNĚHU VE SCÉNĚ41 osmi sousedních buněk, index plochy, hodnoty vzdáleností od nebližších vnitřních a vnějších hran. Obrázek 3.26: Ukázka struktury scény pro geometrický algoritmus. Obrázek převzat z [15]. Samotný algoritmus se skládá ze tří kroků. Za prvé musíme určit pořadí jednotlivých přechodů. Ty chceme řadit podle výšky ve směru padání vloček f~. K seřazení přechodů využijeme techniky "depth peelingu", původně určené ke správnému zobrazování průhledných materiálů. Zároveň nastavíme pohledový objem na hraniční kvádr("bounding box ") scény zarovnaný podél f~. Běžný hloubkový test nám při zobrazení určí pouze nejbližší fragmenty (plochy, či viditelné části ploch) pro jednotlivé pixely. Pokud chceme znát druhé, nebo až n-nejbližší fragmenty můžeme využít právě techniky "double peelingu", kde po n průchodech obdržíme až n-tou vrstvu fragmentů. Ukázku "depth peelingu"ilustruje obrázek 3.27 [11]. Obrázek 3.27: Ukázka jednotlivých úrovní při aplikaci depth peelingu. Obrázek převzat z [?]. 42 KAPITOLA 3. EXISTUJÍCÍ METODY Řazení "depth peelingem" vyžaduje průchod zvlášť pro přední přechody a zvlášť pro opačné. Můžeme provést jejich spojení do jednoho seznamu tak, že každý přední přechod je následován opačným přechodem téhož objektu. Pokud objekt opačnou plochu neobsahuje, zařadíme nejbližší nižší přechod. V dalším kroku seskupíme segmenty ploch do plochy, tedy množiny segmentů se společnými hranicemi δS, na kterých by mělo být stejné množství napadaného sněhu. Toho docílíme pomocí čtyř-směrového semínkového vyplňování na buňkách rozšířené výškové mapy, dokud nejsou všechny segmenty přiřazeny ploše. Maximální výškový rozdíl ∆zmax ve čtyř-směrovém sousedství na mřížce můžeme určit z maximálního povoleného natočení plochy α vůči směru padání sněhových vloček f~ tak, že ∆zmax = velikost_buňky tan α. Pokud se v tomto rozsahu objevuje více ploch, vybereme ke zpracování tu nejvyšší. Pokud při semínkovém algoritmu narazíme na souseda s vnitřní hranou přesahující rozsah ∆zmax , označíme jej pro další zpracování jako startovní pozici pro semínkové vyplnění. Plochu ležící nad takovýmto místem označíme příznakem t (obrázek 3.26) pro další zpracování. Dále spočteme vzdálenost od vnitřních a vnějších hran na ploše. K tomu opět využijeme čtyř-směrové sousedství na mřížce a pomocné transformace – oříznutí ploch, dotýkajících se aktuální hranice, a označíme je aktuální vzdáleností. První transformaci aplikujeme při určení vzdálenosti od vnější hrany, kde detekujeme kontakt s hranicí pomocí počtu nezpracovaných sousedů a označení semínkových vnitřních hran uvažujeme jako neohraničené. Transformaci pro vzdálenosti od vnitřních hran využijeme vypočtených semínek, které jsme určili při porovnání s hodnotou zmax . Pro každou plochu uložíme maximální vzdálenost od hranice. Regiony označené příznakem t nabývají takových hodnot, aby se přibližovaly profilu křivky udávající tvar u hrany. Obrázek 3.28: Porovnání původní metody [15] vlevo a rozšířené původní metody [16] vpravo. Obrázek převzat z [16]. Nakonec iterativně procházíme všechny přechody buňky rozšířené výškové mapy po jed- 3.9. PADÁNÍ A AKUMULACE SNĚHU V REALNÉM ČASE 43 notlivých pozicích na mřížce. Na dané pozici začínáme vyšetřovat přechody od nejvyššího k nejnižšímu. Pro pozici j určíme výšku sněhové pokrývky podle rovnice 3.14. Pokud je definována vzdálenost lvnitrni (nacházíme-li se poblíž vnitřní hrany) připočteme přírůstek h+ (lvnitrni ). Může nastat situace, kdy vypočtené množství sněhu přesahuje povolenou výšku, tedy že hj > hi,max(j) , poté musíme přesunout přebytečné množství na plochu ležící pod danou plochou na stejné pozici mřížky j. Tento krok opakujeme, dokud nedosáhneme poslední plochy, země. Abychom zabránili proniknutí sněhové vrstvy ležící pod objektem do objektu, musíme přidat test na výšku vrstvy v dané oblasti. Pro vyhlazení sněhové vrstvy u velmi jemné mřížky můžeme posunout výšku vrstvy v aktuální buňce k průměrné hodnotě sousedních buněk. Pro konečné vykreslení triangulujeme sněhovou vrstvu s objektem nacházejícím se pod ní. Nevýhodou metody je potřeba velmi jemného rozlišení mřížek, pokud máme ve scéně hodně úzké plochy. Pokud by bylo rozlišení hrubší, mohlo by dojít k určení vzdálenosti od vnější hrany rovné 0, tudíž by daná plocha neobsahovala žádné sněhové pokrytí. Dále metoda není schopna generovat tzv. mosty, které vznikají u úzkých mezer mezi plochami, ale nechá všechen sníh přesunout na plochu nacházející se pod touto mezerou. Přesto metoda generuje relativně věrohodné scény, ale jen pro bezvětrné podmínky. Mírným vylepšením této metody je přístup [16], který přidává možnost tvorby mostů mezi úzkými mezerami, pomocí přidávání nových sněhových pozic do struktury, pokud je mezera mezi plochami menší než zvolený práh. Další vylepšení této metody pak představuje možnost tvorby převisů (vyboulení sněhové vrstvy), které generuje na hranách ploch objektů. Pro lepší konečný vizuální vjem také bere v úvahu okolí sněhových pozic tak, že výsledná hodnota výšky akumulovaného sněhu je dána váženým průměrem okolí bodu, kde jednotlivé váhy jsou určeny Gausiánem. To je znatelné například pro překrytá místa, kde se původně odečetl pouze doplněk z předešlé vrstvy, výsledek a porovnání s původní metodou můžeme vidět na obrázku 3.28. 3.9 Padání a akumulace sněhu v realném čase Při snaze dosáhnout generování zasněžené scény v reálném čase se nabízí možnost urychlit některé opakující se výpočty, tedy paralelizace problému. Pokud zvolíme pro výpočet částic taková pravidla, při kterých se částice navzájem neovlivňují, můžeme využít k výpočtu pohybu částic procesory GPU. Tímto směrem se vydává i zde popisovaná metoda [74]. Jednotlivé částice představují sněhové vločky, určené délkou života. Výpočet zrodu a úmrtí částic se spravuje na CPU, kdežto dynamika částic a uchování jejich aktuálních pozic je přenechána na GPU. Pozice částic je uložena v neceločíselné ("floating point") textuře, kde každému barevnému kanálu přiřadíme souřadnici z dané dimenze (R→ x, G → y, B → z). Texturu využíváme jako 1D pole, kde index jednotlivých prvků přepočítáme z texturovvacích souřadnic. Toho využijeme při vytváření nových částic. Pro vykreslení je použita navíc pomocná textura pro realizaci techniky zvané "double buffering"[72], tudíž pro každý jeden atribut částice je třeba dvojice textur (v tomto případě je uvažována jen změna pozice). Zrození částice probíhá na CPU, kde máme na zásobníku uložené volné indexy do textury, tedy místa kam můžeme nové částice vložit. Úmrtí částice je určeno jejím stářím, po dosažení tohoto limitu je částice přesunuta do neviditelné části scény. Po výpočetním kroku probíhá dále kontrolní průchod přes texturu a informování CPU o volných indexech (částice mimo 44 KAPITOLA 3. EXISTUJÍCÍ METODY Obrázek 3.29: Scéna generována metodou pro simulaci padání a akumulace v reálném čase s využitím GPU. Obrázek převzat z [74]. scénu), které jsou vloženy na zásobník. Aktualizace rychlosti částice je ovlivněna silami jako například gravitace, síla větru apod. V tomto případě jsou tyto hodnoty parametrizovány konstantami v pixel shaderu. Aktuální rychlost určíme ze vztahu vi = vi−1 + a∆t, a= F , m kde F je výsledná síla působící na částici, m hmotnost částice, a zrychlení,vi−1 rychlost v předchozí pozici, vi aktuální rychlost a ∆t časový krok. Pro výpočet aktuální pozice pak vyjdeme ze vztahu pi = pi−1 + vi ∆t, kde pi představuje aktuální pozici a pi−1 pozici v předešlém kroku. Vykreslení sněhové vločky během simulace pak realizujeme pomocí bodu, trojúhelníků nebo čtyřstěnu. Pro akumulaci sněhu je využita výšková mapa. Po dopadu množství sněhových vloček překračujících práh dané buňky, zvýšíme hodnotu v této buňce. Pro zvýšení realistického dojmu poté aplikujeme test stability právě aktualizované buňky a její případnou aktualizaci a aktualizaci jejího okolí. Test stability tedy kontroluje okolní buňky, o kolik úrovní se liší oproti právě vyšetřované buňce. Pokud je úroveň okolních buněk stejná nebo o jednu nižší, zůstává akumulace bezezměn (obrázek 3.30a)). Pokud je ovšem rozdíl úrovní sousedních n buněk větší, dochází k převalení 1/n množství sněhu do těchto n buněk (obrázek 3.30 b,c ). Nevýhodou této metody je zjednodušené řešení výpočtu pohybu částic, testu stability a tím i poměrně nerealistické generování scény (obrázek 3.29). Tuto metodu lze podle článku využít pro velký počet částic (až 100K) pro vykreslování v reálném čase, čehož by jen s využitím CPU nešlo dosáhnout. 3.10. SOUHRN PŘEDSTAVENÝCH METOD 45 Obrázek 3.30: Případy, které mohou nastat při snaze o zvýšení hodnoty v buňce s ohledem na okolní buňky mapy.a) aktuální výška je na stejné úrovni nebo pod úrovní okolních buněk, b)výška je vyšší než výška všech okolních buněk, c)aktuální výška je nad úrovní nebo ve stejné úrovni se sousedícími buňkami, ale sousední buňky mají navzájem odlišnou výšku.Obrázek převzat z [74]. 3.10 Souhrn představených metod Představili jsme metody, které lze využít pro naši práci. Snažili jsme zahrnout co nejvíce různých metod pro větší možnost výběru jednotlivých postupů pro implementaci simulace padajícího sněhu a jeho následné akumulace. Jednotlivé atributy metod zobrazuje tabulka 3.1 a tabulka 3.2. Můžeme pozorovat rozsáhlé možnosti zahrnutí různých atributů do výsledné scény. V popsaných metodách můžeme najít způsob generování složitějších 3D vloček [1, 75], zahrnutí vlivu proudového pole pro simulaci větrných podmínek okolí sněhové vločky [1, 43, 65], vliv teploty na akumulaci [1, 43] nebo výpočet stability pro čerstvě napadaný sníh [1, 12, 17, 43]. Řešení simulace eroze napadaného sněhu nabízí pouze metoda [65] pomocí nastavitelné prahové hodnoty. Většina metod se zabývá pouze menšími scénami a generování větších scén je pro ně časově velmi náročné. Pro případ nutnosti generování velkých scén bez nároků na detaily je vhodné využít [17]. Problém může nastat u generování sněhového pokrytí ploch s AOR ≥ 90◦ C. Pro tento případ se nabízí řešení pomocí poloprůhledné šumivé textury [12] nebo uložení bodů kolizí vloček s plochou a vykreslení vloček na daných pozicích [1]. Simulace laviny, kdy dojde k utržení části napadaného sněhu z šikmých ploch, tedy řešení jejího vzniku, nebyla zahrnuta v žádném článku. Tvorbu převisů na hranách ploch a mosty přes úzké mezery mezi plochami můžeme řešit pomocí aplikace implicitních funkcí na tvar akumulovaného sněhu [12] nebo přidáním nové pozice určující přítomnost sněhu do mřížky [16]. Táním ledové pokrývky se zabývají metody [43] a [17]. Žádná z nich však nezahrnuje vliv vytvořené vody v průběhu tání a její znovu zamrzávání ve spodních vrstvách, čímž zvyšuje teplotu uvnitř sněhové pokrývky a vyvolává další metamorfózy, viz kapitola 2. Další aktivity jako interakce se sněhem, sledování lavin či deformace předmětů tvořených ze sněhu jsou zahrnuty v dalších člancích jako například [59], které by mohly posloužit jako rozšíření 46 KAPITOLA 3. EXISTUJÍCÍ METODY Metoda 3.1[46] 3.2[43] 3.3[12] 3.4[29] 3.5[65] 3.6[40] 3.7[17] 3.8[15] 3.9[74] Rychlost [5 FPS] pomalé pomalé pomalé v realném čase v realném čase pomalé pomalé pomalé v realném čase Fyzikálně založené ne ano ne ne ano ano ne ne ne Model vločky x 3D x 2D 2D, 3D 3D x x 3D Postup vločky x proudové pole(VF) x pevný směr proudové pole (LBE) proudové pole (NS) x x náhodně Tabulka 3.1: Tabulka metod s obecnými parametry a parametry pro simulaci padání sněhu (3.1 Modelování sněhu pomocí implicitních ploch, 3.2 Simulacce padání a tání korunového sněhu, 3.3 Simulace akumulace pomocí sledování částic z povrchu objektů, 3.4 Simulace padání sněhu pomocí spektrální syntézy obrazu, 3.5 Simulace padání sněhu a jeho akumulace pomocí diskrétní Boltmanovy rovnice (LBM), 3.6 Simulace padání sněhu a jeho akumulace pomocí Navier-Stokesovy rovnice (NS), 3.7 Simulace akumulace sněhu pro velké scény pomocí zastínění okolím, 3.8 Geoometrický algoritmus pro rovnoměrné rozmístění sněhu ve scéně, 3.9 Simulace padání a akumulace sněhu v reálném čase s využitím GPU.). pro námi simulované scény s již nakamulovaným sněhem. Tyto možnosti však v této práci neuvažujeme. Další zajímavé a ne příliš neobvyklé jevy jako utržení převisu nebo vyvolání laviny a přesunu již stabilního sněhu vlivem metamorfózy se v námi představených metodách nevyskytoval. Pro reprezentaci sněhové vrstvy ve scéně je ve vetšině případů použita výšková mapa. Může se jednat o mapu v pravidelné mřížce [65, 74] nebo o adaptivní sítě [1, 12, 17]. Pokud metody nevyužívají výškovou mapu, pak ukládájí informaci o akumulaci sněhu pomocí objemové reprezentace [43, 46]. Údaje o časových nárocích jednotlivých metod nejsou příliš dostupné nebo jsou těžko porovnatelné. Z tohoto důvodu se omezíme pouze na rozdělení metod na pracující v reálném čase [29, 65, 74] a pomalejší metody [1, 12, 15, 17, 43, 46]. Za metody pracující v reálném čase odhadneme metody, které by měly dosahovat alespoň 5-ti FPS, jedná se však o odhad, kvůli horší dostupnostu údajů o rychlosti některých metod. Na závěr nabízíme stručný přehled generovatelných aktivit kolem sněhu. • Generování 3D sněhové vločky pomocí polygonů v závislosti na teplotě vzduchu. • Zohlednění vlivu větru na padající vločky pomocí proudových polí. • Akumulace sněhu na částěčně překrytém povrchu. • Řešení stability napadaného sněhu pomocí (AOR, profilová křivka, pravděpodobnost). • Eroze nahromaděného sněhu ve scéně vlivem větrného pole. • Simulace tání sněhové vrstvy vlivem osvětlení, případně zahrnutí vyzařování tepla zasněžených objektů. 3.10. SOUHRN PŘEDSTAVENÝCH METOD Metoda 3.1[46] 3.2[43] 3.3[12] 3.4[29] 3.5[65] 3.6[40] 3.7[17] 3.8[15] 3.9[74] Datová struktura objemová reprezentace objemová reprezentace trojúhelníková síť x výškové pole trojúhelníková síť trojúhelníková síť rozšířené výškové pole výškové pole Překážky ano ano ano x ano ano ano ano ano 47 Stabilita ne ne ano x ne ano ano ano ano Tání ne ano ne x ne ne ano ne ne Eroze ne ne ne x ano ne ne ne ne Detaily možné možné ano x ne ano ne možné ne Tabulka 3.2: Tabulka metod s parametry pro akumulaci sněhu. (3.1 Modelování sněhu pomocí implicitních ploch, 3.2 Simulacce padání a tání korunového sněhu, 3.3 Simulace akumulace pomocí sledování částic z povrchu objektů, 3.4 Simulace padání sněhu pomocí spektrální syntézy obrazu, 3.5 Simulace padání sněhu a jeho akumulace pomocí diskrétní Boltmanovy rovnice (LBM), 3.6 Simulace padání sněhu a jeho akumulace pomocí Navier-Stokesovy rovnice (NS), 3.7 Simulace akumulace sněhu pro velké scény pomocí zastínění okolím, 3.8 Geoometrický algoritmus pro rovnoměrné rozmístění sněhu ve scéně, 3.9 Simulace padání a akumulace sněhu v reálném čase s využitím GPU.). • Interakce se sněhovou pokrývkou v podobě zanechaných stop nebo deformace sněhových objektů. • Simulace průběhu lavin. 48 KAPITOLA 3. EXISTUJÍCÍ METODY Kapitola 4 Analýza aplikace a návrh řešení V této části práce si představíme, které vlastnosti zmíněné v předešlé kapitole jsme vybrali pro simulování akumulace sněhu. Popíšeme vybrané části z jednotlivých metod, které se pokusíme zabudovat do jednotného celku za účelem námi požadované simulace. Uvedeme bloky, do kterých lze aplikaci rozdělit a stručný popis jejich funkcí. Detailněji se jednotlivými částmi budeme zabývat v kapitole popisující samotnou implementaci. V následující části budeme uvádět pojem částice, myšleno jako sněhovou vločku. Muže dojít ke kombinaci pojmů sněhová vločka nebo částice, ale vždy je myšlena sněhová vločka. 4.1 Požadované vlastnosti sněhu Pro reálnou 3D simulaci by bylo vhodné zahrnout metodu generování 3D vloček pomocí polygonů zmíněnou v [1]. Nenabízí se totiž jiná známá možnost, jak se pokusit generovat věrohodněji 3D vločky než pomocí hranolů či koulí. Navíc zmíněná metoda umožňuje generování suchých i vlhkých vloček podle nastavitelné teploty. Mohli bychom se pokusit využít rozšíření dané metody pro zaoblení ostrých přechodů zmíněné v [75], ale původní metoda byl měla být postačující i s ohledem na výpočetní čas. Pro průběh simulace ale není zobrazení tvaru vločky důležité a při výpočtech v simulační smyčce jej stačí aproximovat pomocí koule. Zobrazení skutečného tvaru vločky lze pak využít ke zlepšení realistického vjemu simulace. Pro věrohodné simulování pohybu sněhové vločky scénou je nutno zahrnout vliv větru na padající vločku s ohledem na objekty ve scéně. K tomu mohou posloužit metody [1] využívající výpočtu Navier-Sokesovy rovnice nebo [65] s využitím diskrétní Boltzmannovy rovnice (LBM). Metoda LBM je původně bez dalších úprav určena pro simulaci v reálném čase, a proto se nabízí jako řešení pro danou situaci. Po dopadu vločky na povrch objektu nabízí metoda [43] využití přilnavé síly k zachycení vločky na povrchu. Pokud je přilnavá síla příliš malá může se vločka po nárazu na povrchu ještě pohybovat, případně spadnout dále, než se někde usadí. Tuto sílu budeme zohledňovat také. Pro věrohodnou akumulaci sněhu ve scéně je nutné využití testu stability, aby nedocházelo k výskytu nesmyslných úkazů. Testy stability jsou představeny hned u několika popsaných metod. Pro simulaci se nabízí využít metodu založenou na výpočtu AOR popsanou v [12] 49 50 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ a upravenou v [1], která je závislá na aktuální teplotě. V našem případě jsme se rozhodli situaci řešit na úrovni jednotlivých částic s ohledem na síly působící v daném místě, což by mělo umožnit i tvorbu korunového usazení sněhu. Dále pro akumulovaný sníh můžeme zahrnout vliv eroze. Metoda popsaná v [65] nastavuje prahovou hodnotu pro sílu větru u dané částice pro možnost unesení sněhové vločky dále. V našem případě jsme se rozhodli postupovat podobně jako v případě testu stability, tedy řešením na úrovni částic, se zohledněním přilnavé síly. 4.2 Návrh a analýza řešení Interakci uživatele s aplikací realizujeme pomocí jednoduchého menu. Celou aplikaci je tak možné ovládat pomocí myši. Samozřejmě je možné využívat i klávesových zkratek. Menu rozdělíme do jednotlivých sekcí podle vybrané volby určující, které parametry chceme sledovat. Sekce se skládají ze 4 kategorií. První kategorie se zabývá tvorbou sněhových vloček, kde si můžeme prohlednout modelovanou sněhovou vločku v detailním zobrazení. Samozřejmě je nutné zohlednit vliv okolí, ve kterém vločka vzniká a možnost nastavení těchto parametrů okolí, jako je například teplota vzduchu. Druhá kategorie se zabývá analýzou proudového pole, při které můžeme sledovat vývoj proudění toku větru scénou. Sledování je realizováno pomocí tzv. proudnic, zobrazující trajektorii pohybu částice větru. Toho můžeme využít pro nastavení proudového pole před spuštěním samotné simulace akumulace sněhu ve scéně. Třetí kategorie nám umožní sledovat vlastnosti proudového pole na jednotlivých pozicích diskrétní domény pomocí řezů. Tato část slouží také ke kontrole a možnosti upravení parametrů simulační mřížky před spuštěním simulace akumulace sněhu ve scéně. Poslední kategorie se pak zabývá samotnou simulací akumulace ve scéně. Zde by mělo být možné upravovat jak prametry simulační mřížky, tak i další parametry jako je například hustota sněžení, volba časového kroku simulace a podobně. 4.3 Analýza aplikace Průběh simulace ilustruje obrázek 4.1. Nejprve je nutné načíst počáteční konfiguraci, ve které definujeme některé základní veličiny využité během simulace, volbu scény a nastavení dalších potřebných parametrů. Po uspěšném načtení sestavíme potřebné struktury využívané během simulace a program pokračuje do hlavní smyčky aplikace, kde dochází k aktualizaci scény a jejímu následnému vykreslení. Uživatel má možnost měnit některé parametry, ke zpřesnění výsledku nebo naopak k urychlení výpočtu, jako jsou změny rozlišení simulační mřížky a podobně. Načtení konfigurace Pomocí počáteční konfigurace zvolíme scénu, na které si přejeme spustit průběh simulace, definujeme počáteční hodnoty veličin využívaných při průběhu simulace a určíme hodnoty parametrů využívaných datových struktur. 4.3. ANALÝZA APLIKACE Obrázek 4.1: Ukázka chodu aplikace. 51 Obrázek 4.2: Ukázka průběhu simulační smyčky aplikace. Vytvoření struktur a generování vloček Pro výpočet průběhu simulace budeme využívat jednoduchých datových struktur. Jedná se o pravidelné (uniformní) mřížky. Využijeme je pro simulaci toku větru v proudovém poli a pak další pro hledání průsečíků s implicitními plochami. Tyto struktury mohou být dále upravovány v závislosti na volbě uživatele v průběhu běhu programu. Dále vytvoříme částice, které budeme během simulace sledovat. Pro zjednodušení při konfiguraci zavedeme pevný počet částic, který budeme do scény postupně vypouštět podle zvolené hustoty, dokud nebudou všechny částice usazené. Tvar sněhové vločky Generování tvaru sněhové vločky provedeme pomocí postupů zmíněném v [1]. Zde velikost a hustota vločky závisí na teplotě vzduchu, která ovlivňuje typ vytvářených vloček, tedy suché nebo vlhké vločky. Generování vloček probíhá pomocí soustředných koulí, které označují jednotlivé vrstvy vločky, mezi které generujeme trojúhelníky. Počet vrstev odpovídá hodnotě průměru vločky daného rovnicí 3.7. Trojúhelníky generujeme od nejnižší vrstvy po nejvyšší. Při generování trojúhelníků je nutno dbát na zachování spojitosti struktury generované pomocí trojúhelníků, to znamená, že každý vytvořený trojúhelník se alespoň dotýká nějakého již vytvořeného trojúhelníku z předchozí vrstvy. Počet trojúhelníků na jednu vrstvu je konstantní, což je v souladu s podmínkou rovnice 3.8, definující nepřímou úměru mezi průměrem vločky a její hustotou. Proudové pole Pro sestrojení proudového pole využijeme metody LBM, konkrétně konfigurace D3Q19. Pro lepší představu o této metodě a jejích jednotlivých krocích odkazujeme na přílohu A. Metoda LBM využívá výpočtu distribuční funkce, která nám udává 52 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ Obrázek 4.3: Popis generování tvaru sněhové vločky. Vlevo vidíme soustředné koule ohraničující jednotlivé vrstvy. Vpravo vidíme generované trojúhelníky do jednotlivých vrstev. Obrázek je převzat z [40]. pravděpodobnost pohybu částic reprezentující tok do předem definovaných směrů. V našem případě se jedná o 19 směrů (hodnota uvedená za písmenem Q) směřujících do nejbližších 19ti sousedů buňky (včetně sama sebe) pravidelné mřížky s manhattanskou vzdáleností d ≤ 2, což zobrazuje obrázek 4.4. Jelikož se ve scéně objevují překážky, je nutné provést detekci buněk mřížky, do kterých objekty zasahují. Tyto buňky pak odrážejí virtuální částice větru zpět, což znamená, že vracejí hodnoty distribuční funkce zpět v opačném směru. Jedná se tedy o aplikování hraniční podmínky zpětných odrazů na směry směřující k překážce. Detekci těchto buňěk provedeme pomocí jednoduché intervalové aritmetiky na osově zarovnaný hraniční kvádr (Axis Aligned Bounding Box ) buňky větrného pole a testovaného primitiva, v našem případě trojúhleníka. Buňku označíme jako zasaženou primitivem, pokud splňuje podmínku AABB(buňka).max > AABB(trojúhelník).min a zároveň AABB(buňka).min < AABB(trojúhelník).max pro všechny dimenze, tedy x, y a z. Všechny případy ukazuje obrázek 4.5. 4.4 Hlavní simulační smyčka Průběh simulace ilustruje obrázek 4.2. Průchod simulační smyčkou začíná výpočtem proudového pole. Výpočet proudového pole zajistí správné proudění větru, zohledňujícího vliv překážek ve scéně. Může tak docházet k efektu obtékání objektů nebo dokonce ke tvorbě mírných turbulencí, což ovšem závisí na rozlišení simulační mřížky. Po aktualizaci proudového pole dochází v každé iteraci k vypuštění nových částic do scény. Tento počet je závislý na parametru zvolené hustoty sněžení. Částice, které se nacházejí ve scéně, poté sledujeme při pohybu scénou. Nejprve sledujeme, zda nedošlo k nárazu částic na povrch objektu scény. Tento krok však neurčí konečnou pozici částice daného simulačního 4.4. HLAVNÍ SIMULAČNÍ SMYČKA 53 Obrázek 4.4: Ukázka sousedů buňky mřížky, do kterých metoda LBM rozesílá hodnoty distribuční funkce. Indexy buňek korespondují s označením jednotlivých směrů pro distribuční funkci f. kroku. Pokud se ve scéně již nacházejí nějaké usazené částice (tzn. již nahromaděná sněhová vrstva), je třeba ještě vyšetřit, zda nedošlo k průniku i s těmito částicemi. Pokud částice nekolidovala se žádnou z překážek, může pokračovat dále unášena proudovým polem. Pokud však došlo k nárazu částice na plochu, je třeba určit její následné chování. Aktualizace proudového pole Aktualizace proudového pole zajišťuje aktuální hodnoty sil unášející částice v proudovém poli. Aktualizaci provádíme během každé itearce. To nám zajistí zohlednění vlivu již napadané sněhové vrstvy do proudění toku větru. Díky tomu je také možné ihned reagovat na změny parametrů zvolené uživatelem. Jedna iterace algoritmu LBM se skládá ze tří kroků, a to z kolizního, transportního a výpočtu okrajových podmínek. Posloupnost těchto kroků se u různých článků odlišuje, my jsme zvolili posloupnost výpočtů takto: 1) kolize, 2) transport, 3) okrajové podmínky. V kolizním kroku přijmeme distribuční funkce přiřazené jednotlivým směrům a snažíme se minimalizovat rozdíl od hodnot nabývajícíh rovnovážného stavu. Upravené distribuční funkce pak v transportním kroku rozešleme sousedním buňkám. Při transportním kroku může dojít k situacím, kdy nám hrozí ztráta hmoty ze simulované oblasti v podobě vyslání virtuálních částic z krajní buňky mimo mřížku. Pro ošetření těchto stavů musíme specifikovat hraniční podmínky simulační mřížky. Pro definování okrajových podmínek mřížky můžeme využít základní metody popsané v A.2.4, případně jejich kombinace. V našem případě, kdy máme možnost měnit směr a intenzitu foukání větru během simulace, je nutné aktualitovat hraniční buňky a určit jejich funkci během simulace. Touto funkcí máme na mysli určení, jestli bude daná buňka zdrojová 54 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ Obrázek 4.5: Ukázka případů při detekování primitiva v buňce mřížky pomocí hraničního kvádru, zde je pro zjednodušení ukázán případ ve 2D. a) Trojúhelník zasahjue do buňky zleva, b) trojúhelník je obsažen v buňce, c) trojúhelník zasahuje do buňky zprava, d) trojúhelník je obsažen v celé buňce a zasahuje i do okolních buněk, e) trojúhelník nezasahuje do buňky. (inlet) a zda bude v každém kroku simulace přispívat novými hodnotami. Nebo může buňka plnit funkci spotřebiče (outlet) a hodnoty necháme z oblasti vypadnout, což nezpůsobí ztrátu hmoty díky zdrojovým buňkám a diskrétní doméně. Poslední možností je, že buňka neplní funkci ani zdroje, ani spotřebiče a pouze na ni aplikujeme jednoduchou hraniční podmínku, jako jsou například zpětné odrazy (viz A.2.4). Díky tomu, že máme simulační mřížku osově zarovnanou se souřadným systémem, můžeme provést test na zdrojovou buňku jednoduše pomocí zjištění znaménka jednotlivých komponent směrového vektoru proudění větru. Výsledek testu pak vztáhneme na hraniční plochy mřížky, které jsou na vyšetřovanou komponentu kolmé tak, že x-ová komponta určí vlastosti levé a pravé hraniční plochy následujícím způsobem +1, levá plocha je zdrojová, pravá spotřebičová, 0, levá ani pravá plocha není spotřebič ani zdroj, sgn(x) = −1, pravá plocha je zdrojová, levá spotřebičová, pro ostatní komponenty vektoru, postupujeme v podobném duchu (y - horní a dolní plocha, z - přední a zadní plocha). Tuto vlastnost využijeme u naší konfigurace hraničních podmínek. Otevřené hranice Otevřená hranice (Open-Boundary) je velmi podobná podmínce fixně nastavených hranic, s tím rozdílem, že zde nenastavujeme pouze spotřebičové buňky mřížky. Ve výsledku to znamená že máme ve scéně zdrojové a spotřebičové okrajové buňky. Otevřené hranice a zpětné odrazy Další možností je kombinace podmínky otevřených hranic se zpětnými odrazy. V této podmínce pevně nastavíme pouze horní a dolní plochu na zpětné odrazy. Zbylé plochy pak upravujeme podle předešlé metody. 4.4. HLAVNÍ SIMULAČNÍ SMYČKA 55 Globální a lokální mřížka Jako poslední způsob řešení hraničních podmínek jsme zvolili využití dvou simulačních mřížek. Tento postup je převzat z metody [8] a upraven pro náš problém, tedy modelování toku pomocí LBM. Využitím globální mřížky se snažíme řídit tok v menší lokální mřížce a zamezit tak velkým změnám na jejích hraničních buňkách, zároveň však lokální mřížka ovlivňuje tok globální mřížky s ohledem na možnost výskytu překážek ve scéně. Obrázek 4.6: Ukázka přenosu dat mezi lokální a globální mřížkou. a) Vidíme, které buňky lokální mřížky jsou ovlivněné buňkou globální a naopak, které buňky lokální mřížky přispívají do mřížky globální. Oblast vlivu je vymezena zeleným kvádrem. b) Zobrazuje přenos dat do lokální mřížky. Zeleně označená buňka zasahuje do hraniční oblasti lokální buňky a předává buňkám, do kterých zasahuje, svá data. Žlutá buňka nezasahuje do hraniční oblasti, a tak nedochází k přenosu dat. Ovšem v případě, kdy by do hraniční oblasti zasahovala, museli bychom vyřešit kolizi příspěvku mezi zelenou a žlutou buňkou (červeně označené buňky) pomocí váženého součtu. c) Přesun dat z lokální mřížky do globální mřížky. V globální buňce můžeme vidět složení příspěvků z lokální mřížky, červeně označené buňky přispívají do více globálních buněk. Lokální mřížka je tvořena kolem celé scény, nejedná se tedy o samostatné mřížky jednotlivých objektů. Kolem této mřížky vytvoříme jednu ještě větší globální mřížku. Při stavbě globální mřížky musíme detekovat buňky lokální mřížky, které zasahují do buněk mřížky globální. Přitom může nastat situace, kdy jedna buňka lokální mřížky zasahuje do více buňek globální mřížky a naopak. Pokud tento případ nastane, bude během jedné iterace výpočtu LBM buňka jedné mřížky ovlivňovat dění ve více buňkách mřížky druhé, tedy těch, do kterých zasahuje. Míru vlivu buňky i určíme pomocí váhy wi , která představuje vzdálenost 56 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ středů s porovnávaných buněk (lokální-globální), tak že wi = ||slok − sglob ||, kterou pak roznásobíme přispívající rychlost ui . Výslednou rychlost U v dané buňce pak spočteme pomocí váhy W jako vážený součet rychlostí do buňky přispívající tak, že U= U , W U= n X i=1 (ui ), W = n X 1 . wi i=1 Stejný postup aplikujeme jak na přesun rychlostí z globální mřížky do lokální, tak i na přesun opačný. Přesun údajů z globální mřížky do lokální mřížky je omezen pouze na hraniční oblast lokální mřížky. Tuto oblast definujeme pomocí počtu buněk od okraje mřížky, například jako dvě nejkrajnější buňky pro každou dimenzi, čímž vlastně nastavíme fixní podmínky pro lokální mřížku v dané iteraci. Po výpočtu proudění v lokální mřížce pak aktualizujeme údaje do globální mřížky, kde se však neomezujeme pouze na přenos z hraniční oblasti, ale zohledňujeme vliv všech buněk lokální mřížky, které zasahují do buňky globální mřížky. Vše ilustruje obrázek 4.6. Aktualizace počtu sledovaných částic V tomto kroku vypouštíme do scény nové částice, které budou následně sledovány. Počet nových částic přidaných do scény bude kontrolován uživatelem. V každém kroku simulace budeme tedy přidávat zvolený počet částic dokud nedojde k ustálení všech sněhových vloček. Jelikož se žádná z námi prostudovaných metod nezabývala hustotou sněžení, rozhodli jsme se tímto krokem řídit hustotu padání sněhových vloček,. Detekce kolizí vloček s objekty scény Při sledování částic se snažíme najít průsečík částice s objekty scény. Nenalezení průsečíku s objekty scény ještě nemusí znamenat, že se částice nezastaví. Pro detekci těchto kolizí využijeme známého postupu vrhání parpsku. Ve scéně se také v průběhu simulace vyskytuje sněhová vrstva, kterou musíme také testovat na průsečík se směrem pohybu částice. Detekce kolizí vloček s již napadaným sněhem Pokud máme ve scéně nějaké zachycené částice, je nutné provést test na průsečík i s nimi. Při zahrnutí vlivu sil působících na jednotlivé částice pak můžeme docílit tvarů korunového usazení. Pokud k žádné kolizi nedojde, částice může pokračovat dále ve směru, kterém ji unáší proudové pole. Hledání průsečíků částic se sněhovou vrstvou je vlastně hledání průsečíků s implicitními plochami. Jednotlivé vločky můžeme považovat za tzv. metabally, což jsou implicitní plochy reprezentováné koulemi. Jejich hustota je maximální ve středu koule a směrem k povrchu klesá podle předepsané funkce až na nulovou hodnotu, což znamená, že na povrchu koule nabývá funkce hodnoty rovné nule. Pro hledání průsečíku s implicitními plochami exituje mnoho algoritmů, jejich přehled je zmíněn například v [23] nebo v [56]. V našem případě využijeme posouvání paprsku (ray-marching). Posouvání paprsku, nebo spíše testovaného bodu, o pevně zvolený krok je velmi pomalý postup, ale lze jím získat poměrně přesné výsledky. Navíc můžeme omezit oblast zkoumání, na kterém budeme hledat 4.4. HLAVNÍ SIMULAČNÍ SMYČKA 57 Obrázek 4.7: Ukázka případů pro nalezení intervalu při posouvání parpsku. 1) Při nalezení průsečíku s objeketem můžeme zkrátit prohledávaný interval na rozmezí (o, b). Pokud dojde k nalazení nejbližšího průsečíků s koulí a, kde a < b omezíme interval na (a, b). 2) Nebyl nalezen průsečík s objeketem, ale nalezli jsme průsečík s koulí, omezíme interval na (a, c). 3) Nebyl nalezen žádný průsečík s koulí, proto nemusíme hledat ani průsečík s implicitní plochou. námi požadovanou hodnotu. Podle postupů zmíněných v [21] můžeme odhadnout počáteční bod, ze kterého začneme vyšetřovat možnost průsečíku s implicitní plochou pomocí nalezení nejbližšího průsečíku s koulí. Pokud žádný průsečík nenajdeme, nemusíme posouvání bodu vůbec aplikovat. Také můžeme nastavit maximální vzdálenost, do které hledáme požadovanou hodnotu. Tuto vzdálenost můžeme získat pomocí hodnoty časového kroku simulace, jednoduše jako dmax = ||u|| ∗ t. Vzdálenost dmax můžeme ještě zkrátit, pokud byl nalezen průsečík s objektem scény v předešlém kroku simulace. Postup pro nalezení prohledávaného intervalu a možnosti případů ilustruje obrázek 4.7. Pokud dojde k nalezení průsečíku, usadíme vločku tak, že střed vločky odpovídá nalezenému průsečíku, čímž zjistíme, že nejvetší hustota bude na povrchu objektu nebo sněhové vrstvy. Určení stavu vločky Stav částice určuje chování sněhové vločky v průběhu pohybu scénou. Jako počáteční stav je zvolen let, nebo-li padání sněhu (FALL). Během letu však může částice kolidovat s překážkami v podobě objektů či sněhové vrstvy. V tomto případě musíme vyřešit, zda dojde k zachycení částice (STOP), odrazu (BOUNCE) nebo jen posunu po ploše překážky (SHIFT). Ustálené částice, tedy již zachycené, mohou při nárustu rychlosti větru překonat svou přilnavou sílu a způsobit tak erozi. V takovém případě se částice dostane do stavu odrazu nebo posunu, v závislosti na síle a směru větru. Více si o jednotlivých stavech řekneme na následujících řádcích. 58 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ Obrázek 4.8: Výpočet síly působící na sněhovou vločku behěm letu v obecném místě buňky proudového pole. Let Pohyb sněhové vločky je ovlivněn proudovým polem. Sílu působící na částici v obecném místě mřížky určíme pomocí trilinéární interpolace vektorů rychlosti z nejbližších uzlů mřížky (vrcholů buňky). Pro trilineární interpolaci nejdříve spočteme posuny mezi uzly pro každou dimenzi jako dx = x − x0 , x0 − x1 dy = y − y0 , y0 − y1 dz = z − z0 . z 0 − z1 Poté určíme pomocí lineární interpolace hodnoty potřebné pro další interpolaci v bodech A, B, C a D tak, že ~uA = ~u0 (1 − dz ) + ~u3 dz , ~uB = ~u1 (1 − dz ) + ~u2 dz , ~uC = ~u5 (1 − dz ) + ~u6 dz , ~uD = ~u4 (1 − dz ) + ~u7 dz , kde u~i představuje rychlost ve vrcholu buňky i. Z těchto spočtených hodnot určíme hodnoty rychlosti v bodech ~u E a F ~uE = ~uA (1 − dy ) + ~uD dy , ~uF = ~uB (1 − dy ) + ~uC dy a výslednou hodnotu rychlosti v daném bodě působící na vločku pak jako ~uG = ~uE (1 − dx ) + ~uF dx . Celý postup je zobrazen na obrázku 4.8. Let je navíc ovlivněn gravitační silou působící na částici a také zohledňujeme setrvačnost, tedy započítání vlivu síly působící na částici v předchozím kroku tak, že výsledná síla v časovém kroku i je dána jako F = Fi−1 + Fi . 2 Během letu může vločka kolidovat s objekty ve scéně, těmto případům se věnuje následující část. 4.4. HLAVNÍ SIMULAČNÍ SMYČKA 59 Odraz Pokud po nárazu vločky není přilnavá síla dostatečně velká pro zachycení částice, může dojít k dalšímu pohybu vločky, jako je odraz nebo posun. Rozlišovat tyto dva stavy budeme pomocí nastaveného mezního úhlu αmax mezi dopadajícím paprskem a normálou plochy, na kterou částice dopadla (obrázek 4.10). Pokud bude úhel mezi těmito vektory větší, dojde k posunu částice po ploše, jinak nastává její odražení. Obrázek 4.9: Popis odrazu vločky od objektu a její následný průběh. Po odrazu je směr určen váženým průměrem odrazové síly ~ur a síly proudového pole ~up . Celý průběh odrazu je ilustrován na obrázku 4.9. Síla vystřelující vločky zpět do scény je rovna síle, která vločku na objekt donesla, tedy |~ui | = |~ur |. Výpočet směru odrazu je pak definován pomocí vztahu pro ideální zrcadlový odraz paprsku, který je dán jako ~ur = ~ui − 2~ui .~n ∗ ~n. Po odrazu dochází k zahrnutí vlivu směru proudění předepsaném proudovým polem. Celkový směr pohybu vločky pro daný časový krok j pak určíme jako vážený průměr mezi vektorem rychlosti odrazu ~ur a vektorem rychlosti proudového pole ~up . Výsledná síla ~uj je pak dána jako 10 ~uj = ~ur (1 − wj ) + ~up wj , wj = jk, k = , h ∗ 100 kde j představuje j-tý časový krok, wj váhový koeficient pro j-tý časový krok a h vlhkost . vločky v procentech. Celkový počet kroků j je pak dán jako j = h∗100 10 . Posun Posunem vločky po ploše objektu simulujeme valení se vločky po povrchu. K posunu dochází pokud jsou splňeny podmínky pro odraz vločky a zároveň je úhel dopadu vločky vzhledem k normále plochy větší než mezní úhel, tedy α > αmax . Popis problému ilustruje obrázek 4.10. 60 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ Obrázek 4.10: Popis sil působících na vločku během posunu po ploše objektu v každém časovém kroku. α - úhel dopadu vločky, αmax - mezní úhel pro volbu odrazu/posunu, ~nplocha - normála plochy objektu, ~nzem , ~u - vektor rychlosti proudového pole působící na vločku, ~utecna - promítnuý vektor rychlosti proudového pole do roviny plochy, β - sklon plochy vzhledem k zemi, F~R - reakční síla nakloněné roviny, F~N - normálová síla, F~G - gravitační síla, F~T - třecí síla, F~P - pohybová síla vločky, nezahrnující proudové pole. Pro určení síly která pohybuje vločkou po povrchu plochy musíme nejprve určit tečnou sílu (rychlost) v rovině plochy ~utecna . Tuto složku vypočteme pomocí vztahu ~utecna = ||~u|| ∗ (~nplocha × (~u × ~nplocha ))). Po vypočtení projekce rychlosti ~utecna určíme normálovou sílu FN (tlaková, působící na objekt), která reprezentuje adhezi jako FN = FG ∗ ~nzem .~nplocha , kde FG označuje gravitační sílu definovanou jako FG = mvlocka ∗ g, kde g představuje gravitační zrychlení. Poté vypočteme sílu FP působící na posun vločky vlivem gravitace (bez vlivu proudového pole) FP = FG − FN . Dále určíme třecí sílu, kde jako koeficient tření využijeme vlhkost vločky h FT = FN ∗ h. 4.4. HLAVNÍ SIMULAČNÍ SMYČKA 61 Nakonec výslednou sílu vypočteme jako F = FP + Ft + utecna ∗ mvlocka , dt kde dt značí délku simulačního kroku. Eroze Eroze je děj, při kterém dojde k přesunu již přichycené vločky. To může nastat vlivem nárůstu rychlosti větru proudového pole, kdy síla působící proudovým polem na vločku bude silnější než síla přilnavá. Obrázek 4.11: Popis veličin při výpočtu přilnavé síly. ~nplocha - normála plochy objektu, ~u - vektor rychlosti proudového pole působící na vločku, ~un - projekce vektoru ~u do směru normály, F~N - normálová síla, F~R - reakční síla, F~G - gravitační síla, β - sklon roviny. Výpočet adhezivní síly FA je závislý na úhlu vektoru normály povrchu, na kterém se vločka drží a směru rychlosti větru, jenž tvoří přítlačnou sílu. Samozřejmně závisí také na vlhkosti vločky. Výslednou adhezivní sílu určíme pomocí vztahu FA = (−|~u| ∗ ~u.~n) ∗ ~n + (FG ∗ cos β ∗ (1 + hvlocka )) = ~u ∗ mvlocka + F~N . Situace je zobrazena na obrázku 4.11. Jakmile dojde k překonání adhezivní síly, můžeme vločku sledovat obdobným způsobem jako u odrazů, kdy jako krokovací faktor opět využijeme vlhkost vločky. Do výsledku výpočtu přilnavé síly FA můžeme zahrnout také uživatelem nastavenou vlastnost materiálu plochy. Tímto nastaveným koeficientem roznásobíme vypočtenou sílu FA = FA ∗ k, kde k je nastavitelný parametr přilnavosti materiálu. Zastavení Posledním stavem je zachycení sněhové vločky na povrchu objektu. Vločka se zachytí, pokud bude adhezivní síla FA větší než pohybová FP , tedy že |FA | > |FP |. Po zachycení může dojít k erozi, tedy k ději popsaném v předešlé části, kdy se vločka znovu vrátí do scény a nastaví se ji stav LET. 62 KAPITOLA 4. ANALÝZA APLIKACE A NÁVRH ŘEŠENÍ Interakce se sněhem Při delší simulaci a zasněžení scény je nutné provádět výpočty adhezivní síly FA s ohledem na sněhovou vrstvu a ne s objekty scény. Dále pak nelze uvažovat pouze vlhkost vločky při posunu po sněhové vrstvě, ale měly by se zohlednit i vlastnosti sněhu, pokrývající plochu. Pro tyto potřeby se nabízí možnost vytvoření tabulky vlhkost-teplota, kde by se při aktuální teplotě vybírala vlhkost jako součinitel smykového tření pro sněhovou vrstvu. Podobný pincip by se dal uplatnit u hledání koeficientu přilnavosti k při výpočtu adhezivní síly FA . Náhodný faktor pohybu Abychom se vyhnuli stejnému pohybu částic v blízkém okolí, zahrneme do výpočtu faktor náhodnosti v podobě vychýlení částice ve směru pohybu. Toto vychýlení realizujeme pomocí Rodriguesovy rotační formule [70, 38], která je dána jako ~vnový = ~v cos θ + (~k × ~v ) sin θ + ~k(~k.~v (1 − cos θ)), kde ~vnový představuje nový směr, ~v původní vektor, ~k vektor okolo kterého rotujeme, tedy osu rotace - v našem případě se jedná o normálu plochy a θ úhel, o který chceme rotaci provést. Kapitola 5 Implementace V této části představíme prostředky využité ke tvorbě naší aplikace. Dále se zaměříme na realizaci jednotlivých bloků představených v analýze aplikace a rozebereme některé detaily týkající se implementace. 5.1 Jazyk a použité knihovny Aplikace je psaná v jazyce C++ s využitím externích knihoven. Pro tvorbu menu jsme se rozhodli využít jednoduchou grafickou knihovnu AntTweakBar, pro snadné změny parametrů a manipulaci se scénou. Pro urychlení výpočtů využíváme paralelizaci na GPU, k tomu využíváme technologii CUDA (Compute Unified Device Architecture), tedy CUDA API 5.5. K paralelním výpočtům využíváme také knihovnu Thrust, poskytující datové kontainery a algoritmy nad nimi fungující. Dále využíváme knihovny Optix pro rychlý výpočet průsečíků pohybujících se částic s objekty scény. Pro zobrazení výsledků pak využíváme grafické knihovny OpenGL, tedy konkrétně knihoven Freeglut a Glew (OpenGL Extension Wrangler Library), podorující další rozšíření OpenGL. Nakonec jsme také využil XML Loader z předmět X36ZPG pro načítání konfiguračního souboru. 5.2 Struktura aplikace Aplikaci může rozdělit do několiká tříd, u kterých můžeme říci, že se každá stará o jeden z bloků simulační smyčky. Nejedná se striktně o třídy z programátorského hlediska, tedy zapouzdřených struktur s vlastními metodami, ale spíše o blok struktur a funkcí starajících se o správu jednotlivých bloků. Je to způsobeno hlavně kvůli zapojení výpočtů na GPU. Vztahy mezi těmito jednotlivými bloky ilustruje obrázek 5.1. Z obrázku je patrné, že uživatel má velkou volnost v možnosti měnit parametry proudového pole, sněhových vloček nebo i možnost ovlivnit stav částice po nalezení průsečíku trajektorie vločky se scénou.Většinu výpočtů provádíme na GPU, ale pokud je třeba využití dynamické alokace, kvůli proměnným parametrům, necháváme výpočet proběhnout na CPU, což nastane například při stavbě globální mřížky pro proudové (větrné) pole nebo tvorbě sněhové vločky. Funkce jednotlivých bloků je z obrázku 5.1 patrná, proto je popíšeme pouze stručně. 63 64 KAPITOLA 5. IMPLEMENTACE Main Hlavní blok aplikace, který provádí počáteční nastavení a spouští a následně řídí samotnou simulaci. Stará se také o zobrazení. Obrázek 5.1: Zobrazení bloků aplikace nahrazující třídy. Propojení bloků je zobrazeno pomocí červené linky. Tyto bloky spolu během chodu aplikace komunikují a předávají si své výpočty. Vztah reprezentovaný šipkou ukazuje importování zdrojového bloku do cílového bloku (do kterého šipka směřuje). Načtení konfiguračního souboru Po spuštění aplikace dochází k načtení dat pro běh simulace, jako je samotná scéna, parametry proudového pole a další. Menu Menu zpracovává požadavky uživatele a předává je příslušným blokům. 5.2. STRUKTURA APLIKACE 65 Větrné pole Tento blok vytváří proudové pole, které bude unášet vločky, nastavuje základní parametry. Jakmile provede potřebná nastavení, volá blok LBM pro výpočet toku větru. Obrázek 5.2: Popis průběhu přidávání nových částic do scény na začátku každé iterace. LBM Blok LBM provádí metdou samotnou LBM kromě ošetření hraničních podmínek, to provádí samotný blok "Hraniční podmínky". Pokud je zvolena pro simulaci globální mřížka, provádí také potřebné přesuny dat mezi lokální a globální mřížkou. Hraniční podmínky V tomto bloku realizujeme jednu z uživatelem vybraných hraničních podmínek. Po ošetření hraničních oblastí vracíme větrné pole zpět. Částice Tento blok realizuje samotné sledování pohybu částic ve scéně, kdy jako první hledá průsečík s objekty scény a následně pak s implicitními plochami. Kromě sledování částic umožnňuje také tvorbu proudnic, pro lepší představu o produění větru ve scéně. Sledování částice Blok sledování částice nám slouží jako rozhraní pro práci s knihovnou Optix. Vytváříme zde kontext a sledujeme pohyb vloček a jejich kolize se scénou. Není zde však realizováno hledání průsečíku s implicitními plochami, o to se stará blok "Mřížka". Optix Blok funkcí využívaných při hledání průsečíků padajících vloček se scénou. Tyto funkce musejí být vždy definovány. 66 KAPITOLA 5. IMPLEMENTACE Algorithm 1 Průchod LBM s globální mřížkou 1: 2: 3: 4: 5: 6: 7: 8: procedure iterace LBM( ) kolizní_krok_globální_mřížky() transportní_krok_globální_mřížky() přenos_údajů_z_globální_mřížky_do_lokální() kolizní_krok_lokální_mřížky() transportní_krok_lokální_mřížky() přenos_údajů_z_lokální_mřížky_do_globální() výpočet_hraniční_podmínky_globální_mřížky() Mřížka V tomto bloku provádíme asi nejvíce úkonů. Hledáme zde průsečíky s již napadaným sněhem (s implicitními plochami) a také provádíme test možnosti vzniku eroze na ustálených částicích. Vločka Zde dochází ke generování samotného tvaru sněhové vločky. Tvar vločky je ovlivněn okolními podmínkami, jako je tlak nebo teplota. Funkce Blok funkcí je sada výpočetních operací používaných během výpočtů na GPU i na CPU. Struktury Blok struktur, datových a výčtových typů a konstant využívaných v průběhu celé simulace. 5.3 Realizace navržených postupů V této části si blíže představíme implementaci některých samostatných kroků, které jsme zmínili v kapitole 4. Aktualizace počtu sledovaných částic V každé iteraci simulace vypouštíme do scény nové částice z předgenerovaného pole, dokud nejsou vyčerpány. Jejich počet je možný za běhu měnit a řídit tak hustotu sněžení. Během letu mohou částice vylétnout mimo scénu, a tak by nemělo dále smysl tyto částice uvažovat. Kdybychom postupovali tak, že v každém kroku pouze rozšíříme pole sledovaných částic, přišli bychom o částice, které se ocitly mimo scénu. Proto tyto částice resetujeme a ukádáme jejich ukazatele do pomocného pole. V dalším kroku simulační mřížky pak rozšiřujeme pole sledovaných částic pouze pokud byly využity už všechny resetované částice, čímž zachováme i požadovanou hustotu. Postup je znázorněn na obrázku 5.2. Proudové pole Proudové pole reprezentujeme pomocí uniformní mřížky. Každá buňka uchovává hodnoty distribuční funkce f pro všech 19 směrů, údaj o rychlosti u a hustotě ρ, tedy veličiny využívané při výpočtu toku pomocí LBM. Hodnoty distribuční funkce uchováváme ve dvou polích stejné délky, z důvodu paralelního přístupu k hodnotám při kolizním 5.3. REALIZACE NAVRŽENÝCH POSTUPŮ 67 a následném transportním kroku. Kolizní krok spočteme nad jedním polem a transportní krok aplikujeme zápisem do druhého pole, na kterém pak aplikujeme hraniční podmínky. Pro další simulační krok pak pole prohodíme a znovu provádíme stejné výpočty, jde o tzv. techniku ping-pongu. Algorithm 2 Přenos hodnot mezi mřížkami 1: 2: 3: 4: 5: 6: 7: 8: 9: procedure přenos_údajů_z_globální_mřížky_do_lokální( ) indlok ← id_vlákna if buňka(indlok ) {hraniční buňky} then n ← |glob. buňky zasahující do lok.(indlok )| for i ← 1, n do w ← w + glob(i).w glob(i).u u ← u + glob(i).w u ← wu f (indloc ) ← vypočti_rovnovážný_stav_f(u) 10: 11: 12: 13: 14: 15: 16: 17: 18: procedure přenos_údajů_z_lokální_mřížky_do_globální( ) indglob ← id_vlákna n ← |lok. buňky zasahující do glob.(indglob )| for i ← 1, n do w ← w + lok(i).w lok(i).u u ← u + lok(i).w u ← wu f (indglob ) ← vypočti_rovnovážný_stav_f(u) Pro detekci krajních buněk využijeme jednoduchý binární kód (Přední plocha =32, zadní plocha = 16, horní plocha =8, dolní plocha = 4, pravá plocha = 2, levá plocha = 1). Díky logickým operacím tak můžeme zakódovat buňky ležících na hranách a v rozích mřížky, což využijeme při aplikaci hraničních podmínek. Pro globální mřížku také můžeme zavést kód pro hraniční oblast lokální mřížky, tedy oblast ovlivněou globální mřížkou. Na hraniční podmínku s globální mřížkou se více zaměříme v následující části. Globalní a lokální mřížka Trošku složitější postup nastává při využití globální mřížky. Při jejím využítí musíme nejprve sledovat tok v globální mřížce a předat aktuální hodnoty lokální mřížce. Poté sledujeme tok v lokální mřížce a následně pak aktualizovat parametry mřížky globální. Algoritmus 1 ukazuje průběh jedné iterace výpočetního kroku LBM s využitím globální mřížky. Průběh algoritmu nejprve provede kolizi a transport distribučních funkcí na globální mřížce a výsledek přenese do okrajové oblasti mřížky lokální. Okrajovou oblast definujeme jako oblast buněk s předem definouvanou vzdáleností n od okraje, kde n udává počet buňek od okraje, což ilustruje obrázek 4.6. Při přenosu rychlosti z globální do lokální mřížky tak přenášíme data pouze do okrajové oblasti. Postup je ukázán v algoritmu 2, ve funkci přenos_údajů_z_globální_mřížky_do_lokální. Jakmile nastavíme okrajovou oblast lokální mřížky, můžeme počítat kolizní a transportní krok na lokální mřížce. Výsledná data pak trasformujeme do globální mřížky, tentokrát ale 68 KAPITOLA 5. IMPLEMENTACE z celé mřížky, viz. přenos_údajů_z_lokální_mřížky_do_globální v algoritmu 2. Nakonec ošetříme okrajové podmínky na globální mřížce. Pro přenos mezi mřížkami využíváme informaci o rychlosti u, ze které pak vypočeteme hodnotu distribuční funkce rovnovážného stavu voláním vypočti_rovnovážný_stav_f(u). Tvorbu globální mřížky provádíme na CPU z důvodu nutnosti dynamické alokace paměti. Ta je nutná při uchování ukazatelů na buňky druhé mřížky, které vyšetřovanou buňku ovlivňují. Sestavení globální mřížky můžeme provést před spuštěním simulační smyčky, čímž nezpomalíme celkovou dobu běhu. Naopak při změně rozlišení za běhu smyčky musíme počkat na přestavění mřížky. 5.3.1 Průsečík se scénou Nově přidané, resetované a již sledované částice z předešlé iterace, které zůstali ve scéně sledujeme v nové iteraci. Pro pohybující se částice zkoumáme zda nedojde k půsečíku s něketrým objektem scény. Pro tyto účely jsme se rozhodli využít knihovny optix, kterou lze využít ke sledovaní paprsku na GPU s podporou urychlujících datových struktur, které sama sestaví nad trojúhelníkovou sítí scény. Pro ustálené částice na povrchu objektů pak aktualizujeme aktuální sílu větru na ně působící pro testování možnosti eroze. Pro knihovnu Optix musíme definovat parametry, které určují chování paprsku během jeho sledování. Jednak musíme nastavit kontext, na kterém budeme sledování realizovat, což zahrnuje načtení objektů scény a jejich vlastnosti, volby datových struktur pro urchylení sledování paprsku a nastavení proměnných, které budeme při sledování využívat. Dále musíme definovat funkce pro určení chování paprsku při průchodu scénou. Tyto funkce pak určí jaké akce je třeba vykonat při interakci se scénou. Mezi tyto funkce patří: • Počáteční nastavení pro generované paprsky. • Vytvoření hraničních obálek objektových primitiv. • Nalezení průsečíku. • Nalezení nejbližšího průsečíku. • Nenalezení průsečíku. • Ošetření chyb. Počáteční nastavení pro generované paprsky V této funkci nastavíme počáteční bod sledovaného paprsku a jeho směr. Dále nastavíme proměnné, které budeme chtít během sledování monitorovat, jako je například stav částice ( = nalezený průsečík), vzdálenost k nejbližšímu průsečíku nebo normála plochy, na které je nebližší průsečík nalezen. Tyto data přiřadíme paprsku pro možnost jejich aktualizace v průběhu sledování. Výsledná data pak v této funkci zpracujeme pro další využití během simulační smyčky aplikace, to znamená hlavně pro určení stavu částic. 5.3. REALIZACE NAVRŽENÝCH POSTUPŮ 69 Vytvoření hraničních obálek objektových primitiv Při sledování paprsku je vhodné vytvořit hraniční obálky primitiv, v našem případě trojúhelníků, pro zrychlení detekce průsečíku s objektem. V našem případě využijeme jako obálky osově zarovnaný hraniční kvádr ("Axis Aligned Bounding Box "). Algorithm 3 Rozdělení vloček do buňek mřížky 1: 2: 3: 4: 5: 6: procedure Rozděl částic ind ← id_vlákna if částice(ind).stav = ST OP then id_částic(ind) ← id částice(ind) id_buněk(ind) ← id buňky čítač(id buňky) ← čítač(id buňky)+1 Nalezení průsečíku Pokud nalezneme průsečík s hraniční obálkou, můžeme testovat možnost průsečíku paprsku (trajektorie sněhové vločky) primitivum obsažené v obálce. V našem případě tedy hledáme průsečík s trojúhelníkem. V této funkci také testujeme, zda se jedná o nejbližší průsečík, s ohledem na doposud nalezené průsečíky. Nalezení nejbližšího průsečíku Jakmile nalezneme nejbližší průsečík, můžeme uložit námi hledané informace k datům sledovaného paprsku pro pozdější vyzužití, jako například zkrácení intervalu pro hledání průsečíku s implicitní plochou. Také lze přistoupit k vlastnostem matriálu objektu a zjistit tak jeho přilnavost. Nakonec ještě uložíme normálu plochy, pro pozdější určení stavu částice ( ODRAZ, POSUN, ZASTAVENI, EROZE). Algorithm 4 Předřazení pro hledání průsečíku procedure Předřazení pro hledání průsečíku( ) rozděl_částice() 3: seřaď( id_částice, id_buněk) 4: offset ← exclusivní_prefixový_součet(čítač) 5: hledej průsečík 1: 2: Nenalezení průsečíku Pokud průsečík nebyl nalezen musíme určit, jak bude vločka dále pokračovat. V našem případě postupuje dál unášena proudovým polem, zohledníme však i vliv rychlosti z předešlého kroku, pro zahrnutí efektu setrvačnosti, pomocí prostého zprůměrování. Ošetření chyb Jestliže nastane během sledování částic chyba a je vyhozena výjimka, můžeme ji ošetřit v právě následující funkci. 5.3.2 Průsečík se sněhovou vrstvou Pokud simulace běží delší dobu, dochází k akumulaci sněhových vloček ve scéně, a tím i ke vzniku sněhové pokrývky. Jednotlivé vločky aproximujeme pomocí implicitních funkcí, 70 KAPITOLA 5. IMPLEMENTACE Obrázek 5.3: Ukázka průběhu rozřazení částic pro hledání průsečíků s implicitní plochou. tzv. metaballů. Můžeme si je představit jako koule, kterým podle předepsané funkce klesá hustota od středu, kde je maximální až k povrchu, kde je hustota nulová. Podobný princip využívala metoda [46]. Pro nalezení průsečíků částic s implicitní plochou využijeme jednodoché datové struktury, konkrétně uniformní mřížky. Velikost buňky omezíme na maximální velikost vločky, čímž si zajistíme, že vločka může zasahovat pouze do nejbližších sousedních buněk. V každém kroku simulace pak musíme roztřídít zastavené vločky, které budeme testovat na průečík s pohybujícími se vločkami. Rozdělení zastavených vloček do buňek mřížky provedeme pomocí pozic středů vloček. Algorithm 5 Předřazení pro hledání průsečíku 1: 2: 3: 4: 5: 6: 7: 8: 9: procedure hledej průsečík( ) ind_částice ← id_vlákna ind_buňky ← najdi pozici částice(částice(ind_částice) ) for all okolí buňky(ind_buňky) do for all zastavené vločky buňky okolí do if čítač(buňka okolí) > 0 then najdi průsečík s koulí() if existuje průsečík s koulí then posouvání po parpsku() K tomuto rozdělení využijeme dvě pole o velikosti počtu vloček, které se aktuálně nalézají ve scéně. Do jednoho pole budeme ukládat index vločky, do druhého index buňky, ve které se vločka nalézá. Dále využijeme další dvě pole o velkosti počtu buněk mřížky. Jedno nám poslouží jako čítač buňky zastavených vloček a druhé později využijeme jako offset při přesunu mezi buňkami. Jako první tedy určíme, které zastavené částice patří do které buňky a kolik každá buňka 5.3. REALIZACE NAVRŽENÝCH POSTUPŮ 71 obsahuje zastavených částic. Spustíme tak kernel pro testování pozic částic (algoritmus 3). Poté seřadíme částice podle indexu buněk, do kterých patří. Pro toto řazení využijeme knihovnu Thrust a její implementaci řazení podle klíče. Nad polem s údaji o počtu částic v buňkách pak spustíme exklusivní prefixový součet, což nám vytvoří pole offsetů do seřazeného pole částic. K výpočtu prefixového součtu opět využijeme implementace knihovny Thrust. Celá příprava na hledání průsečíku je pak popsána algoritmem 4. Pro lepší představu je vše zobrazeno na obrázku 5.3. Obrázek ukazuje stav struktur od prvního kroku při rozřazení částic až po jejich následné seřazení. Při testování na průsečík s implicitní plochou pak testujeme na průsečík zastavené částice ze stejné buňky a ze všech k ní přilehlých (maximálně 27 sousedů), kde při přechodu mezi buňkami používáme spočtený offset pro určení první vločky pro testování. Obrázek 5.4: Ukázka eroze částice a vlivu na čítač ovlivňujícíh částic. a) Dopadá nová vločka, čítač se nemění. b) Nová vločka se usadila, ovlivní čítač dříve usazených částic. c) Dochází k erozi, vločka se udává znovu do pohybu, musíme upravit čítač ovlivněných částic. 5.3.3 Eroze vločky Při testování možnosti výskytu eroze je nutné brát ohled na okolí vločky, u které chceme erozi provést. To znamená, že na erozi mohou být testovány pouze vločky usazené na povrchu 72 KAPITOLA 5. IMPLEMENTACE sněhové vrstvy. To můžeme detekovat pomocí čítače, který uchovává hodnotu částic, které jsou zastavené, zasahují do testované částice a zároveň napadly v dřívější iteraci. Částice na povrchu mají hodnotu čítače rovnu 0. Situaci ilustruje obrázek 5.4. Na obrázku můžeme vidět napadané částice, které sebou procházejí, ale vzájemně se neovlivňují. Tato situace může nastat ve dvou případech. První případ nastane, když se částice zachytí ve stejném iteračním kroku, protože se jejich stav změní až pro další iteraci. Druhý případ nastane, pokud nenalezneme průsečík s koulí ustálených částic, přestože se hraniční koule protínají díky velkému poloměru. Tato chyba by však neměla mít velký vliv na výsledek, jelikož je největší hustota soustředěná do středu vločky a proto je velmi pravěpodobné, že by se vločka nezachytila, případně by v další iteraci nastala eroze. Kapitola 6 Výsledky V této kapitole předvedeme výsledky naší práce a porovnáme námi dosažené výsledky s existujícími metodami a se skutečnými fotografiemi. Nejprve si ukážeme generování sněhových vloček a jak je vločka při generování ovlivněna teplotou vzduchu. Poté ukážeme proudění větru v proudovém poli a vliv překážek na toto proudění. Porovnáme i vliv různých hraničních podmínek na celkový pohyb toku ve scéně. 6.1 Sněhová vločka Pro generování sněhových vloček je nám známa pouze jediná metoda [1], kterou jsme také využili. Na obrázku 6.1 můžeme vidět porovnání s vločkami generovanými z původního článku. Srovnání vloček je složité, jelikož k obrázkům z původního článku nemáme dostupná žádná data, kromě údaju o vlhkosti vločky (suchá / mokrá), nebo o detailu přiblížení pro sledování tvaru. Navíc u generování vloček hraje také roli faktor náhodnosti, který zajišťuje, aby nebyly generované vločky se stejným poloměrem, čímž ovlivňujeme i počet vrstev pro generování trojúhleníků. Na obrázku 6.2 ještě vidíme vliv změny teploty na tvar generované vločky. Samotná teplota nemá na výsledný tvar až takový vliv, znatelnější rozdíl lze pozorovat pouze na hustotě trojúhelníků vlhkých vloček (generovány mezi 0◦ C až -2,5◦ C) oproti suchým vločkám. Menší problém nastává při teplotě 0◦ C, kdy podle původní verze roznásobujeme teplotou průměr vločky, což produkuje velmi malé vločky. To bychom mohli vyřešit přičtením zvolené konstanty pro minimální průměr. Generování sněhové vločky provádíme celé na CPU, kvůli nutnosti dynamické alokace při výpočtu počtu vrstev, u kterého využíváme náhodných čísel, tak abychom zamezili tvorbě podobných volček za jinak stejných podmínek. 6.2 Větrné pole Pro simulování proudění větru jsme využili metodu LBM s konfigurací D3Q19. Abychom mohli lépe sledovat tok větru a přesněji nastavit vlastnosti proudového pole na požadovanou scénu, máme k dispozici zobrazení řezu mřížky, na kterém si můžeme zobrazit vektory větru 73 74 KAPITOLA 6. VÝSLEDKY Obrázek 6.1: Porovnání námi generovaných vloček s rozdílnou vlhkostí s metodou [1]. Obrázek 6.2: Vliv teploty na tvar sněhové vločky. Teplota určuje vlhkost generované vločky, jak můžeme vidět, nejvlhčí vločky jsou generovány mezi teplotami 0◦ C až -2,5◦ C. a sledovat tak síly unášející tok. Tyto řezy můžeme vidět na obrázku 6.4. Další možností jak sledovat tok je sledování trajektorií částic větru, tzv. proudnic, které můžeme vidět na obrázku 6.5 nebo na obrázku 6.6. Veškeré testování toku větru realizujeme na scéně zobrazené na obrázku 6.3. Obrázek 6.3: Ukázka testovací scény pro kontrolu toku větru scénou. Důležitýcm faktorem ovlivňující proudění větru jsou hraniční podmínky. Pro naši aplikaci jsme se rozhodli implementovat 3 druhy okrajových podmínek, a to otevřené hranice, kombinaci otevřených hranic se zpětnými odrazy na horní a spodní hraniční ploše a využití globální mřížky pro řízení toku v menší (lokální) mřížce sény. Vliv hraničních podmínek proudění vzduchu můžeme vidět na obrázku 6.5. Dalším důležitým faktorem je stabilita toku. Tu můžeme zvýšit pomocí filtrace známé jako Smagorinskyho podmřížkový model (příloha A). Vliv této filtrace je patrný z obrázku 6.6, na kterém vidíme zobrazení proudnic, za stejných podmínek jako na obrázku 6.5, tentokrát ale se zapnutou filtrací pro zvýšení stability toku. Na obrázku 6.5 můžeme vidět tendenci klesání proudnic při dosažení oblasti okolo objektu, pokud filtraci nepoužíváme. Po zapnutí 6.3. SNĚHOVÉ SCÉNY 75 Obrázek 6.4: Ukázka řezů vektorů proudového pole u testovací scény. Vlevo můžeme vidět stav u hranicnčí podmínky otevřených hranic, uprostřed kombinaci zpětných odrazů a otevřených hranic a vpravo využití globální mřížky. Parametry scény jsou zvoleny následovně: Rozlišení proudového pole: 48x48x48, rychlost větru: 1 m/s, Smagorinskyho filtrace: zapnuta, rozlišení globální mřížky proudového pole: 8x8x8, velikost globální mřížky: 2x větší než lokální mřížka. Smagorinskyho filtrace můžeme vidět hladší průběh, kde proudnice u objektů klesají jen nepatrně a snaží se držet původního směru, jak dokládá obrázek 6.6. Asi nejednodušší možností jak zpřesnit výsledky simulování toku větru je zvětšení rozlišení simulační mřížky. Zvětšení mřížky však ovlivní čas, portřebný k výpočtu jedné iterace smyčky LBM, jak dokládá tabulka 6.1. Pro zajímavost také uvádíme časové nároky na sestavení této struktury. Pro simulaci nemusí být tento údaj důležitý, pokud nebudeme pravidelně měnit rozsah mřížky. Časové nároky na sestavení i na dobu průchodu jendé iterace můžeme vidět na obrázku 6.7. U zobrazení průběhu času nas setsavení zvláště vyčnívá celková doba pro tvorbu globální mřížky. To je ovlivněno potřebou využití dynamické alokace pro určení překrývajících se buňěk a sestavovaní struktury na CPU, kdežto simulační mřížky s kombinovanými hraničními podmínkami a s otevřenými hranicemi můžeme sestavit na GPU. 6.3 Sněhové scény Pro simulaci sněhových scén jsme zvolili hraniční podmínku otevřených hranic, která se nám zdála z našeho pozorování jako nejstabilnější. Rozhodli jsme se testovat vlastní jednoduché scény s částečné odkrytými objekty, jejich ukázku můžeme vidět na obrázku 6.8. V případě prostudovaných metod, které se zabývali sledováním pohybu částic podle fyzikálních vlastností, jsme nenašli mnoho konečných obrázků s otevřenými prostory, většinou se jednalo o uzavřené budovy, což by ale nemělo vadit. 76 KAPITOLA 6. VÝSLEDKY Obrázek 6.5: Ukázka průběhu toku větru ve scéně pomocí proudnic a vlivu nastavení hraničních podmínek. a) Otveřené hranice, b) kombinace zpětných odrazů od spodní a vrchní hraniční plochy, c) využití lokální a globální mřížky. Parametry scény jsou zvoleny následovně: Rozlišení proudového pole: 48x48x48, rychlost větru: 1 m/s, Smagorinskyho filtrace: vypnuta, rozlišení globální mřížky proudového pole: 8x8x8, velikost globální mřížky: 2x větší než lokální mřížka, počet sledovaných proudnic: 64. Pokud není uvedeno jinak, jsou scény testovány na větrném poli o roměrech 32x32x32 se strukturou pro hledání průsečíku s implicitními plochami s roměry 16x16x16. Spuštění simulace na scénu, kde panuje bezvětří, nám ukazuje, že dochází pouze k hromadění sněhových vloček na sebe, jak ukazuje obrázek 6.9. Při zvýšení sněhové vrstvy pak může docházek k odrazům nebo posunům po sněhové vrstvě. Při nastavení větrných podmínek pak můžeme vidět vliv překážek na výslednou akumulaci sněhových vloček. Obrázek 6.10 ukazuje scénu při nastavení foukání zleva doprava. Můžeme si všimnout postupného hromadění sněhu u levé části budovy. Detailnější pohled nám dokládá obrázek 6.11. Obrázek b) 6.11 například zobrazuje snahu vloček o tvorbu tvaru korunového sněhu na střeše budovy. Můžeme si také všimnout rozdílu v počtu ustálených vloček mezi plochou u přední části budovy budovy a oblastní u zadní části, což by mělo také znamenat správnou volbu nastavení větrného pole. Zajímavých úkazů dosahujeme u scény 6.8 a), kde se jedná o krabičku bez vrchního víka. Na obrázku 6.12 c) můžeme vidět snahu sněhové vrstvy sestavit sněhový most přes mezeru mezi stěnami. Jako poslední jsme testovali scénu s autobusovou zastávkou. Průběh simulace je zobrazen na obrázku 6.13. Můžeme zde vidět vločky, které se snaží obtékat stožár a dostat se dovnitř 6.3. SNĚHOVÉ SCÉNY 77 Obrázek 6.6: Ukázka vlivu Smagorinskyho filtrace na stabilitu toku větru. a) Otveřené hranice, b) kombinace zpětných odrazů od spodní a vrchní hraniční plochy, c) využití lokální a globální mřížky. Parametry scény jsou zvoleny následovně: Rozlišení proudového pole: 48x48x48, rychlost větru: 1 m/s, Smagorinskyho filtrace: vypnuta, rozlišení globální mřížky proudového pole: 8x8x8, velikost globální mřížky: 2x větší než lokální mřížka, počet sledovaných proudnic: 64. zastávky. Při detailnějším pohledu si můžeme všimnout snahy vloček o tvorbu převisu, jak dokládá obrázek 6.14. Pro generování obrázků je samozřejmě nutné vhodně sestavit datovou strukturu pro rychlé nalezení průsečíku s implicitní plochou. Klíčová tedy může být i doba sestavení nebo aktualizování dané struktury, jelikož ji potřebujeme v každé iteraci přestavět. Časové nároky na aktualizaci a následné hledání průsečíku můžeme zahrnují tabulka 6.2 pro scénu "antika"a 6.3 pro scénu zastávka. Jejich průběhy jsou pak graficky znázorněny na obrázku 6.15, respektive 6.16. Pro měření obou scén jsme nastavili podmínky následovně: hraniční podmínka proudového pole - otevřené hranice, zvolený práh pro implicitní plochu t = 0.02, povolená odchylka δ = 0.001, hustota sněžení - 128 částic/ snímek, zvolená interakce - Automatická (Random), celkový počet částic = 50k. Na průbězích můžeme vidět, že hledání průsčíků bylo nejnáročnější při počtu kolem 20K zastavených částic, kdy se nacházelo v obou případech ve scéně kolem 16K pohybujících se částic, tento počet částic se po delší době ustálil až do vyčerpání všech 50K vyšetřovaných částic, proto byly výpočty kolem 25K časově nejnáročnější. 78 KAPITOLA 6. VÝSLEDKY Hraniční podmínka Otevřené hr. Kombinované hr. Globální mřížka Rozlišení Stavba [ms] 16x16x16 32x32x32 64x64x64 16x16x16 32x32x32 64x64x64 16x16x16 32x32x32 64x64x64 8 24 123 24 38 111 1,96 14, 18 ∗ 103 111, 7 ∗ 103 LBM [ms] SRT SMM 3 5 22 29 175 216 16 17 25 31 176 220 7 8 31 36 233 274 Snimek [ms] SRT SMM 17 17 34 47 216 266 25 31 37 50 217 267 12 16 50 50 284 316 Tabulka 6.1: Tabulka časové náročnosti výpočtů pro sledování proudnic. U LBM měříme navíc rozdíl mezi jednoduchým SRT ("Single Relaxation Time") a filtrací SSM ("Smagorinsky Subgrid Model "). Rozlišení 8x8x8 16x16x16 32x32x32 1K Ř[ms] P[ms] 7 9 8 5 6 5 Scéna Antika 5k 10k Ř[ms] P[ms] Ř[ms] P[ms] 11 42 11 66 14 23 6 38 7 9 11 13 20K Ř[ms] P[ms] 7 110 6 28 7 16 50k Ř[ms] P[ms] 5 20 6 20 6 3 Tabulka 6.2: Tabulka časové náročnosti pro hledání průsečíku na scéně "antika". Měření bylo provedeno za následujících podmínek: hraniční podmínka proudového pole - otevřené hranice, zvolený práh pro implicitní plochu t = 0.02, povolená odchylka δ = 0.001, hustota sněžení 128 částic/ snímek, zvolená interakce - Automatická (Random), celkový počet částic = 50k.Ř představuje dobu řaszení v ms, P pak dobu hledání průsečíku v ms. Počet pohybujících se částic se pohyboval kolem 16K, dokud nedošlo k vyčerpání nastavené hodnoty (50k), což lze z tabulky vypozorovat. Rozlišení 8x8x8 16x16x16 32x32x32 1K Ř[ms] P[ms] 8 26 10 8 6 6 5k Ř[ms] 7 10 8 Scéna Zastávka 10k P[ms] Ř[ms] P[ms] 47 8 89 17 10 21 9 7 13 20K Ř[ms] P[ms] 7 152 8 42 12 13 50k Ř[ms] P[ms] 9 77 5 14 7 3 Tabulka 6.3: Tabulka časové náročnosti pro hledání průsečíku na scéně "zastávky". Měření bylo provedeno za následujících podmínek: hraniční podmínka proudového pole - otevřené hranice, zvolený práh pro implicitní plochu t = 0.02, povolená odchylka δ = 0.001, hustota sněžení - 128 částic/ snímek, zvolená interakce - Automatická (Random), celkový počet částic = 50k. Ř představuje dobu řaszení v ms, P pak dobu hledání průsečíku v ms. Počet pohybujících se částic se pohyboval kolem 15K, dokud nedošlo k vyčerpání nastavené hodnoty (50k), což lze z tabulky vypozorovat. 6.3. SNĚHOVÉ SCÉNY 79 Obrázek 6.7: Časové závislosti mřížky proudového pole na jejím rozlišení. OH SRT - otevřené hranice bez filtrování, KH SRT - kombinované hranice bez filtrování, GM SRT - globální mřížka bez filtrování, OH SSM - otevřené hranice s fitrováním, KH SSM kombinované hranice s filtrováním, GM - globální mřížka s filtrováním. Obrázek 6.8: Testované scény pro simulaci akumulace sněhu. a) Krabička bez víka, b) autobusová zastávka, c) antická budova. Pro lepší viditelnost vloček jsme zvolili červenou barvu. 80 KAPITOLA 6. VÝSLEDKY Obrázek 6.9: Ukázka zasněžené scény, ve které nefouká vítr. Sněhové vločky se na sebe hromadí. Obrázek 6.10: Ukázka zasněžené scény, ve které nastavíme vítr. Oproti scéně bez vlivu větru můžeme vidět nerovnoměrné rozložení sněhových vloček ve scéně a tvorbu jejich shluků u objektu. Obrázek 6.11: Detailnější obrázek nahromaděného sněhu na scéně s antickou budovou. a) Pohled zepředu na přivrácenou stranu ke zdroji větru. b) Pohled na zadní stranu, odvrácenou od větru. c) Pohled ze strany, zde můžeme vidět rozdíl v počtu usazených vloček. 6.3. SNĚHOVÉ SCÉNY 81 Obrázek 6.12: Ukázka zasněžené scény s krabičkou bez víka. a) Pohled na zadní stranu, tentokráte přivrácenou stranou ke zdroji foukání. b) Pohled na odvrácenou stranu. Zde vidíme vliv volby špatného rozlišení větrného pole, kde se v místě za stěnou akumulují vločky. c) Detailní pohled na vršek krabičky, zde si můžeme všimnout snahy o tvorbu sněhové střechy přes mezeru mezi hranami. Obrázek 6.13: Průběh simulace akumulace sněhu se scénou s autobusovou zastávkou. 82 KAPITOLA 6. VÝSLEDKY Obrázek 6.14: Detailnější pohled na průběh simulace akumulace sněhu se scénou s autobusovou zastávkou. Obrázek 6.15: Ukázka časových nároků na stavbu struktury pro hledání průsečíku s implicitní plochou u scény antika. Na obrázcích můžeme vidět časové závislosti vzhledem k rozlišení struktury. 6.3. SNĚHOVÉ SCÉNY 83 Obrázek 6.16: Ukázka časových nároků na stavbu struktury pro hledání průsečíku s implicitní plochou u scény zastávka. Na obrázcích můžeme vidět časové závislosti vzhledem k rozlišení struktury. 84 KAPITOLA 6. VÝSLEDKY Kapitola 7 Závěr Prouzkoumali jsme existující metody pro simulaci padání a akumulace sněhu. Podle provedené rešerše jsme vybrali postupy z různých metod pro naše potřeby a navrhli jsme postup, jakým jsme následně i realizovali výslednou implementaci simulace. Zahrnuli jsme vlastní postup pro řešení interakcí vloček se scénou. Částicovým přístupem jsme se snažili zahrnout co nejvíce jevů vyskytujících se při pozorování padání sněhu a jeho následném hromadění. Pro generování vloček zařazujeme vliv teploty na jejich vlhkost a velikost. Pro zohlednění vlivu scény na průběh sněhových vloček jsme se rozhodli zařadit proudové pole, modelované pomocí diskrétní Boltzmannovy rovnice. Pro věrohodnou akumulaci napadaného sněhu zohledňujeme vlhkost vločky na její přilnavost a zahrnujeme tak vliv adheze. Ustálené vločky poté testujeme, zda nedochází k její erozi vlivem síly proudícího větru na povrchu sněhové pokrývky. Při výpočtu velikosti vločky může nastat problém ze dvou hledisek. První je velikost vzhledem k rozřazovací mřížce v průběhu výpočtu průsečíků s implicitními plochami, omezili jsme proto velikost vločky, aby mohla zasahovat pouze do sousedních buněk o vzdálenosti 1 (přilehlé buňky). Druhý problém spočívá ve volbě velikosti s ohledem na měřítko scény. Tento problém jsme neřešili a předpokládali jednotné měřítko pro všechny scény. Implementací proudového pole větru jsme chtěli dodat scéně na větší realističnosti, avšak proudové pole je velmi závislé na rozlišení své mřížky. S rostoucím rozlišením tak roste čas na délku doby běhu simulace v důsledku aktualizace proudového pole. Jako optimální rozlišení mřížky pro testování simulace jsme zvolili rozsah 32x32x32. Pro akumulaci sněhových vloček ve scéně jsme se rozhodli využít částicového přístupu, kdy se při nalezení kolize s překážkou snažíme určit další chování vločky. K tomu jsme využili možnosti vybrané ze 4 akcí, jako jsou odraz, posun, zastavení a možnost eroze pro zastavené částice. Chtěli jsme tak zahrnout i možnost tvorby korunových tvarů, což se částečně povedlo, ale občas může dojít k artefaktům v podobě delších převisů, jako třeba u scény krabičky bez víka, kde docházelo, kde tvorbě sněhového mostu v místech, kde by se nejspíše vrstva zhroutila. Aplikaci by bylo vhodné dále rozšířit možnostmi na vznik lavin či možnosti jinak manipulovat se sněhem, jako jsou například metody pro deformace sněhových objektů, kterými se zabývá například [59]. Simulaci tání jsme nakonec neaplikovali. 85 86 KAPITOLA 7. ZÁVĚR Literatura [1] M. Aagaard and D. Lerche. Realistic modelling of falling and accumulating snow. Master’s thesis, Laboratory of Computer Vision and Media Technology, Aalborg University, Denmark, 2004. [2] I. Accolade. Winter challenge. winter-challenge/, 2. 1. 2015. http://www.gamefabrique.com/games/ [3] J. Blahůt. Vznik a druhy sněhu. http://krkonose.krnap.cz/, 23. 3. 2009. [4] S. Chapman and T. G. Cowling. The mathematical theory of non-uniform gases: an account of the kinetic theory of viscosity, thermal conduction and diffusion in gases. Cambridge university press, 1970. [5] S. Chen and G. D. Doolen. Lattice boltzmann method for fluid flows. Annual review of fluid mechanics, 30(1):329–364, 1998. [6] T. W. D. Company. Frozen. http://www.hollywoodreporter.com/thr-esq/ disneys-frozen-trailer-targeted-copyright-692267, 2. 1. 2015. [7] T. W. D. Company. Making of disney’s frozen snow simulation. http://www.cgmeetup. net/home/making-of-disneys-frozen-snow-simulation/, 2. 1. 2015. [8] Y. Dobashi, Y. Matsuda, T. Yamamoto, and T. Nishita. A fast simulation method using overlapping grids for interactions between smoke and rigid objects. In Computer Graphics Forum, volume 27, pages 477–486. Wiley Online Library, 2008. [9] L. Eidos Interactive. Tomb raider angel of darknes. http://www.gamesradar.com/ 113-games-have-got-snow-them/, 2. 1. 2015. [10] F. H. Entertaiment. The league of extraordinery gentleman. http://www.foxhome. com/lgx, 2. 1. 2015. [11] C. Everitt. Interactive order-independent transparency. White paper, nVIDIA, 2(6):7, 2001. [12] P. Fearing. Computer modelling of fallen snow. In Proceedings of the 27th annual conference on Computer graphics and interactive techniques, pages 37–46. ACM Press/Addison-Wesley Publishing Co., 2000. 87 88 LITERATURA [13] P. Fearing. Computer modelling of fallen snow. In PhD thesis, Dept. of Computer Science. Dept. of Computer Science, 2000. [14] R. Fedkiw, J. Stam, and H. W. Jensen. Visual simulation of smoke. In Proceedings of the 28th annual conference on Computer graphics and interactive techniques, pages 15–22. ACM, 2001. [15] N. v. Festenberg and S. Gumhold. A geometric algorithm for snow distribution in virtual scenes. In Eurographics Workshop on Natural Phenomena, pages 15–25. The Eurographics Association, 2009. [16] N. v. Festenberg and S. Gumhold. Diffusion-based snow cover generation. In Computer Graphics Forum, volume 30, pages 1837–1849. Wiley Online Library, 2011. [17] D. Foldes and B. Benes. Occlusion-based snow accumulation simulation. In Vriphys 2007 - 4th Workshop on Virtual Reality Interactions and Physical Simulations, pages 35–41, 2007. [18] V. Friis. Turn any outdoor scene into a realistic winter scene. http://www.pxleyes.com/tutorial/photoshop/1339/ Turn-Any-Outdoor-Scene-Into-A-Realistic-Winter-Scene.html, stav z 16. 12. 2013. [19] H. Fritshcrová. Vývoj charakteristik sněhové pokrývky a jejich stav při pádu vybraných lavin ve východních krkonoších. In Master’s thesis. Česká Zemědělská Univerzita v Praze, 2010. [20] T. Garrett, C. Fallgatter, K. Shkurko, and D. Howlett. Fallspeed measurement and high-resolution multi-angle photography of hydrometeors in freefall. Atmospheric Measurement Techniques Discussions, 5(4):4827–4850, 2012. [21] R. Geiss. Metaballs. http://www.geisswerks.com/ryan/BLOBS/blobs.html, stav z 1. 3. 2011. [22] J. HABY. Snow accumulation (influence from temperature profile). http://www. theweatherprediction.com/habyhints/204/, stav z 1. 1. 2014. [23] J. C. Hart. Ray tracing implicit surfaces. Siggraph 93 Course Notes: Design, Visualization and Animation of Implicit Surfaces, pages 1–16, 1993. [24] M. Hecht and J. Harting. Implementation of on-site velocity boundary conditions for d3q19 lattice boltzmann simulations. Journal of Statistical Mechanics: Theory and Experiment, 2010(01):P01018, 2010. [25] S. Hou, J. Sterling, S. Chen, and G. Doolen. A lattice boltzmann subgrid model for high reynolds number flows. Pattern formation and lattice gas automata, 6:151–166, 1996. [26] N. Junker. Winter weather forecasting. http://www.hpc.ncep.noaa.gov/research/snow2a/.html, stav z 17. 12. 2013. LITERATURA 89 [27] V. Kořízek. Sníh a jeho přeměna –přeměny a druhy sněhu. http://www.alpy4000.cz/, stav z 1. 1. 2014. [28] S. Kruglinski. 20 things you didn’t know about... snow. http://discovermagazine. com/2008/jan/20-things-you-didnt-know-about-snow, 12. 12. 2009. [29] M. S. Langer, L. Zhang, A. W. Klein, A. Bhatia, J. Pereira, and D. Rekhi. A spectralparticle hybrid method for rendering falling snow. Rendering techniques, 4:217–226, 2004. [30] S. Lefebvre. ch. Drops of water texture spirites. In ShaderX2: Shader Programming Tips and Tricks, pages 190–206. Wordware Publishing Inc. [31] W. Li, Z. Fan, X. Wei, and A. Kaufman. Flow simulation with complex boundaries. GPU Gems, 2:747–764, 2005. [32] K. G. Libbrecht. Snow crystals. snowcrystals/, 1. 2. 1999. http://www.its.caltech.edu/~atomic/ [33] K. G. Libbrecht. Ken Libbrecht’s field guide to snowflakes. Voyageur Press, 2006. [34] W. E. Lorensen and H. E. Cline. Marching cubes: A high resolution 3d surface construction algorithm. 21(4):163–169, 1987. [35] C. Magono and C. W. Lee. Meteorological classification of natural snow crystals. In Journal of the Faculty of Science, number 4, pages 321–335. Hokkaido University, 1966. [36] G. A. Mastin, P. A. Watterberg, and J. F. Mareda. Fourier synthesis of ocean scenes. Computer Graphics and Applications, IEEE, 7(3):16–23, 1987. [37] D. McClung and P. Schaerer. The avalanche handbook, 1993. The Mountaineers, Seattle, WA. [38] J. E. Mebius. Derivation of the euler-rodrigues formula for three-dimensional rotations from the general formula for four-dimensional rotations. arXiv preprint math/0701759, 2007. [39] R. Mei, W. Shyy, D. Yu, and L.-S. Luo. Lattice boltzmann method for 3-d flows with curved boundary. Journal of Computational Physics, 161(2):680–699, 2000. [40] T. B. Moeslund, C. B. Madsen, M. Aagaard, and D. Lerche. Modeling falling and accumulating snow. In Vision, Video and Graphics, volume 2. Heriot Watt University, Edinburgh, The Eurographics Association, 2005. [41] A. Mohamad. Lattice Boltzmann Method. Springer, 2011. [42] D. Muders. Three-Dimensional Parallel Lattice Boltzmann Hydrodynamic Simulations of Turbulent Flows in Interstellar Dark Clouds. PhD thesis, University at Bonn, 1995. [43] K. Muraoka and N. Chiba. Visual simulation of snowfall, snow cover and snowmelt. In Parallel and Distributed Systems: Workshops, Seventh International Conference on, 2000, pages 187–194. IEEE, 2000. 90 LITERATURA [44] U. Nakaya and J. Marshall. Snow crystals. American Journal of Physics, 22(8):573–573, 1954. [45] T. Nishita, Y. Dobashi, and E. Nakamae. Display of clouds taking into account multiple anisotropic scattering and sky light. In Proceedings of the 23rd annual conference on Computer graphics and interactive techniques, pages 379–386. ACM, 1996. [46] T. Nishita, H. Iwasaki, Y. Dobashi, and E. Nakamae. A modeling and rendering method for snow by using metaballs. Computer Graphics Forum, 16(3):C357–C364, 1997. [47] N. oceanic and atmospheric administration. The cryosphere is the frozen water part of the earth system. http://oceanservice.noaa.gov/facts/cryosphere.html, stav z 1. 1. 2014. [48] P. Ohlsson and S. Seipel. Real-time rendering of accumulated snow. In The Annual SIGRAD Conference : Special Theme - Environmental Visualization : November 24th and 25th, 2004, University of Gävle, Gävle, Sweden : Conference Proceeding, pages 25– 32, 2004. [49] S. Owen. Metaballs. http://www.siggraph.org/education/materials/HyperGraph/ modeling/~metaballs/metaballs.htm, 8. 7. 1999. [50] L. Rare. Banjo-kazooie. 113-games-have-got-snow-them/, 2. 1. 2015. http://www.gamesradar.com/ [51] F. Rathgeber. Simulation and visualization of fire with the lattice-boltzmann method. Technical report, Riedrich Alexander UniversitÄt Erlangen Nurnberg, Germany, May 2009. Bachelor Thesis. [52] M. Ritter. Precipitation processes. http://www.earthonlinemedia.com/ebooks/tpe_ 3e/atmospheric_moisture/precipitation.html, 1. 4. 2004. [53] I. Saltvik, A. C. Elster, and H. R. Nagel. Parallel methods for real-time visualization of snow. In Proceedings of the 8th international conference on Applied parallel computing: state of the art in scientific computing, pages 218–227. Springer-Verlag, 2006. [54] M. B. Schlaffer. Non-reflecting Boundary Conditions for the Lattice Boltzmann Method. PhD thesis, Universitätsbibliothek der TU München, 2013. [55] M. C. Serreze. Snow i: Formation, distribution, measurement, metamorphism, avalanches. http://www.colorado.edu/geography/class_homepages/geog_3511_s11/, stav z 1. 1. 2014. [56] J. M. Singh and P. Narayanan. Real-time ray tracing of implicit surfaces on the gpu. Visualization and Computer Graphics, IEEE Transactions on, 16(2):261–272, 2010. [57] L. Square Enix Holdings Co. Ris of the tomb raider. http://www.tombraider.com/ us/images/, 2. 1. 2015. [58] J. Stam. Stable fluids. In Proceedings of the 26th annual conference on Computer graphics and interactive techniques, pages 121–128. ACM Press/Addison-Wesley Publishing Co., 1999. LITERATURA 91 [59] A. Stomakhin, C. Schroeder, L. Chai, J. Teran, and A. Selle. A material point method for snow simulation. ACM Trans. Graph., 32(4):102:1–102:10, July 2013. [60] S. Succi. The Lattice-Boltzmann Equation. Oxford university press, Oxford, 2001. [61] J.-y. Takahashi, H. Takahashi, and N. Chiba. Image synthesis of flickering scenes including simulated flames. IEICE transactions on information and systems, 80(11):1102– 1108, 1997. [62] C. Teitzel, R. Grosso, and T. Ertl. Efficient and reliable integration methods for particle tracing in unsteady flows on discrete meshes. Springer, 1997. [63] G. M. Treece, R. W. Prager, and A. H. Gee. Regularised marching tetrahedra: improved iso-surface extraction. Computers & Graphics, 23(4):583–598, 1999. [64] Ubisoft. Far cry 4. 5-reasons-buy-far-cry-4, 2. 1. 2015. http://www.twinfinite.net/2014/11/05/ [65] C. Wang, Z. Wang, T. Xia, and Q. Peng. Real-time snowing simulation. The Visual Computer, 22(5):315–323, 2006. [66] A. B. Watson and A. J. Ahumada. Model of human visual-motion sensing. Optical Society of America, Journal, A: Optics and Image Science, 2:322–342, 1985. [67] Canadian avalanche association. http://www.avalanche.ca, 1. 4. 2004. [68] Charming crown snow koli. https://http://www.panoramio.com/photo/48681843, stav z 19. 12. 2013. [69] X. Wei, W. Li, K. Mueller, and A. E. Kaufman. The lattice-boltzmann method for simulating gaseous phenomena. Visualization and Computer Graphics, IEEE Transactions on, 10(2):164–176, 2004. [70] E. W. Weisstein et al. Rodrigues’ rotation formula. From MathWorld–A Wolfram Web Resource. http://mathworld. wolfram. com/RodriguesRotationFormula. html, 2006. [71] D. E. Willard. New data structures for orthogonal range queries. SIAM Journal on Computing, 14(1):232–253, 1985. [72] W. E. Wright. Single versus double buffering in constrained merging. The Computer Journal, 25(2):227–230, 1982. [73] J. Xu, D. Xiu, and G. E. Karniadakis. A semi-lagrangian method for turbulence simulations using mixed spectral discretizations. Journal of Scientific Computing, 17(14):585–597, 2002. [74] J. Zhang, X. Cai, and J. Li. Rendering snowing scene on gpu. In Intelligent Computing and Intelligent Systems (ICIS), 2010 IEEE International Conference on, volume 3, pages 199–202. IEEE, 2010. [75] C. Zou, X. Xie, and G. Zhao. Algorithm for generating snow based on gpu. In Proceedings of the Second International Conference on Internet Multimedia Computing and Service, pages 199–202. ACM, 2010. 92 LITERATURA Příloha A Proudové pole Pro reálnou simulaci unášení sněhových vloček větrem je nutné sestrojit tzv. proudové pole. Proudové pole simuluje tok částic vzduchu, unášeného větrem. Tento tok musí zohledňovat vliv překážek (objektů scény) na chování částic, tedy jejich proudění. V této kapitole představíme možnosti, jak přistoupit k výpočtu proudového pole a popíšme námi zvolený postup. A.1 Úvod Pro výpočet proudového pole lze využít více přístupů pro výpočet toku kapaliny scénou. Tyto přístupy můžeme rozdělit do tří skupin podle měřítka, a to na mikroskopické, mezoskopické a makroskopické. Toto rozdělení ilustruje obrázek A.1 Obrázek A.1: Rozdělení přístupů k výpočtu toku kapaliny z hlediska měřítka. Makroskopický přístup řeší tok kapaliny jako spojitý celek, který je následně potřeba zdiskretizovat. Mikroskopický přístup sleduje pohyb jednotlivých částic a jejich vzájemnou interakci. Mezoskopický přístup sleduje skupiny částic na základě pravděpodobnosti pohybu v diskrétní doméně. 93 94 A.1.1 PŘÍLOHA A. PROUDOVÉ POLE Mikroskopický přístup Jako nejjednodušší přístup se jeví využití mikroskopického přístupu pro simulování jednotlivých částic, tedy atomů a molekul. Jedná se o tzv. simulaci dynamiky molekul ("molecular dynamics simulation"). V tomto modelu je nutné sledovat každou částici zvlášť a sledovat jejich interakce s okolím, tedy i mezi jednotlivými částicemi, popsaných diferenciálními rovnicemi druhého Newtonova zákona (zákona síly). V každém časovém kroku je nutné u každé částice určit její aktuální polohu a rychlost. Jelikož musíme sledovat ohromné množství částic (10 cm3 vzduchu obsahuje za podmínky pokojové teploty kolem 3 x 1022 molekul)[41], jedná se o extrémně výpočetně náročný model, který je v současné době pro reálnou simulaci neupočitatelný. Navíc na této urovní nejsou definované veličiny jako viskozita, teplota, tlak a další fenomenologické vlastnosti ("phenomenological properties") ovlivňující pohyb částic [41]. A.1.2 Makroskopický přístup Makroskopický přístup se zaměřuje na sledování pohybu toku jako celku, tedy ve spojité doméně, kterou je třeba následně zdiskretizovat do mřížky, ve které pohyb sledujeme. V tomto modelu sledujeme změny parametrů jako je hmota (počet částic), moment(hybnost/síla), nebo tlak, při nutnosti zachování jejich spojitosti [41]. Pohyb celého toku je pak definován nelinárními diferenciálními rovnicemi, známé jako Navier-Stokesovy rovnice. Zjednodušeně řečeno, můžeme si tento model představit jako sledování objemu velkého množství částic (řádově až 1016 ) místo jednotlivých elementů (jako v případě mikroskopického přístupu), kde jejich pohyb je určen na základě změn zmíněných veličin, které následně musíme zdiskretizovat do jednotlivých uzlů mřížky. Tento přístup je ale výpočetně velmi náročný, kvůli nutnosti výpočtu nelineárních diferenciálních rovnic a nutnosti v každém časovém kroku zachovávat spojitost [41]. A.1.3 Mezoskopický přístup Mezoskopický přístup lze popsat jako kombinaci obou předešlých metod, ze kterých se snaží využít jejich přednosti. Dochází ke sledování pohybu skupin částic v rámci diskrétní mřížky, takže při sledování pohybu těchto skupin můžeme jednoduše zohlednit i vliv okolí, jako je například tlak nebo teplota. Vlastnosti jednotlivých skupin částic jsou popsány tzv. distribuční funkcí, která popisuje pravděpodobnost pohybu částic z daného místa do daného směru [41]. Mezi metody využívajicí tento přístup patří metoda LBM ("Lattice Boltzmann Model "), kterou jsme se rozhodli v naší aplikaci využít. V následujících kapitolách představíme metodu LBM a její vlastnosti. A.2 LBM (Lattice Boltzmann Method) Nejprve představíme metodu LBM a její principy. Popíšeme jednotlivé kroky v průběhu simulace a představíme si nejčastější konfigurace mřížky. Nakonec představíme hraniční podmínky pro chování částic na okraji mřížky. A.2. LBM (LATTICE BOLTZMANN METHOD) A.2.1 95 Úvod do LBM Metoda LBM byla vyvinuta z modelu LGA ("Lattice Gas Automata"), což je typ celulárního automatu, využívaného k simulaci toku [60]. Tyto automaty využívají diskrétní mřížky a rozpoznávání stavů v jejích uzlech. Stavy jsou určeny pomocí částic, pohybujících se v předepsaných směrech po mřížce. Informace o pohybu v dáném směru je pouze booleovská hodnota, takže buď daným směrem částice proudí nebo ne. Určení stavu jednotlivých uzlů mřížky je rozděleno do dvou kroků, kolizního ("collision") a transportního ("stream"). Při transportním kroku dochází k přesunu částice z jednoho uzlu do druhého. V tomto uzlu může následně dojít ke kolizi s částicí přicházející z dalšího sousedního uzlu. Při kolizním kroku je nutné dbát na zachování hmoty a momentu (síly/hybnosti). Chování částic při kolizi, tedy určení směru dalšího pohybu řeší tzv. kolizní operátor (např. na hexadecimální mřížce vychýlení směru o 60◦ [69]). Celý výpočet je prováděn v diskrétní doméně, což s sebou nese jistá omezení společně s určením stavů mřížky pouze pro stavy "pravda-neprvada", jako je například přítomnost statického šumu[60, 69]. Ten můžeme eliminovat nahrazením booleovské hodnoty váženou hustotou mikroskopických částic, pohybujících se v daném směru, čímž se dostáváme k LBM [5]. Pro detailnější popis LGA odkazujeme na [60]. Zmíněnou váženou hustotu si můžeme představit jako pravděpodobnost pohybu částic daným směrem, což můžeme pospat distribuční funkcí (Maxwell-Boltzmannova distribuční funkce) [39], která je základem Boltzmannovy rovnice. Navíc můžeme úpravami Boltzmannovy rovnice dosáhnout Navier-Stokesovy rovnice pro nestlačitelné kapaliny, postup je blíže popsaný například v [5, 54], čímž máme i zaručné zachování hmoty i momentu (hybnosti). Boltzmannova rovnice je dána jako ∂f p~ ∂f + .∇f + F~ = Ω, ∂t m ∂~ p kde f představuje distribuční funkci, p~ hybnost, m hmotnost, F~ externí sílu působící na tok [41]. Jelikož neuvažujeme žádnou externí sílu, můžeme rovnici zjednodušit na ∂f + ~u.∇f = Ω, ∂t p ~ kde ~u = m představuje rychlost. Jelikož budeme tok řešit na diskrétní mřížce můžeme rovnici převést do diskrétní oblasti tak, že ∂fi + u~i .∇fi = Ω, ∂t kde i představuje index pro daný směr. Jak je směr určen popíšeme v další části. A.2.2 Konfigurace mřížky a výpočet Různé konfigurace mřížky označujeme pomocí notace DmQn, kde m představuje dimenzi mřížky a n počet směrů ~e, do kterých částice z uzlu mřížky mohou proudit. Názorné zobrazení je na obrázku A.2. 96 PŘÍLOHA A. PROUDOVÉ POLE Obrázek A.2: Ilustrace nejpoužívanějších konfigurací ve 2D (D2Q9) a 3D (D3Q19). U konfigurace D3Q19 jsou barevně odděleny podmřížky (viz obrázek A.3). A.2.3 Kolize a transport částic Pro každý jeden směr ei , kde i = 0, ..., n − 1 musíme provést výpočet diskrétní Botzmanovy rovnice. Ta se skládá z kolizního a transportního kroku. Kolizní krok můžeme vyjádřit jako finova (x, t) − fi (x, t) = Ωi a transportní krok pak jako finova (x, t) = fi (x + ei , t + 1). Dosazením finova (x, t) z transportního kroku do kolizního kroku pak získáme fi (x + ei , t + 1) − fi (x, t) = Ωi . Kolizní operátor Ω je sám o sobě velmi náročný na výpočet [69], proto lze využít lineární aproximaci, známou jako Bhatnagar-Gross-Krook-Welanderova aproximace, kde Ωi = 1 eq (f − fi ) = ω(fieq − fi ). τ i Díky tomuto zjednodušení dokážeme lehce určit kolizní operátor s určitou chybou, která však není signifikantní. fieq reprezentuje hodnotu rovnovážného stavu distribuční funkce v daném směru, τ představuje relaxační čas a ω frekvenci kolizí. Výpočet rovnovážného stavu fieq souvisí s volbou konfigurace mřížky. Pro náš případ jsme zvolili konfiguraci D3Q19, popis pro výpočet rovnovážného stavu dalších konfigurací je popsán například v [41] nebo v [54]. Směry proudění částic můžeme rozložit na tzv. podmřížky, což jsou množiny směrů, rozdělených podle vzdálenosti k nejbližším sousedům, kterých může být až 26 (27 včetně sama sebe). Pro lepší představu je rozdělení znázorněno na obrázku A.3. Pro náš případ využijeme pro výpočet vztahu odvozeného v [42] tak, že fieq = ρ(A + B e~i .~u + C(~ ei .~u)2 + D~u2 ), A.2. LBM (LATTICE BOLTZMANN METHOD) 97 Obrázek A.3: Podmřížky, ze kterých je možno sestavit konečnou kofiguraci pro směry rychlostí, které budeme využívat, např. konfigurace D3Q15 se skládá z podmřížek 0, 1 a 3. Námi zvolená konfigurace D3Q19 se skládá z podmřížek 0, 1 a 2. kde e~i představuje i-tý diskrétní směr toku v mřížce, ~u nastavený směr toku, pro který chceme tok v mřížce simulovat, konstanty A, B, C a D měníme s ohledem na to, v jaké podmřížce se nachází právě vyšetřovaný směr e~i , jak uvádí tabulka A.1. Veličiny, jako je hmota, nebo-li hustota ρ a rychlost v daném uzlu mřížky ~u určíme z distribuční funkce f tak, že n−1 X ρ= fi , i=0 n−1 ~u = 1X fi ei . ρ i=0 Další důležitou veličinou je viskozita kapaliny v určující míru přitažlivých sil částic kapaliny, což můžeme chápat jako schopnost odolávat změně tvaru. Viskozitu určíme pomocí relaxačního času τ tak ,že 1 1 v = (τ − ). 3 2 98 PŘÍLOHA A. PROUDOVÉ POLE A B C D 0.podmřížka 1. podmřížka 2. podmřížka 1 3 1 18 1 6 1 4 1 − 12 1 36 1 12 1 8 1 − 24 0 0 − 12 Tabulka A.1: Tabulka hodnot koeficientů pro podmřížky ve 3D pro D3Q19. Převzato z [42]. Jelikož nesimulujeme průběh ideální kapaliny, pro kterou v nabývá nulové hodnoty, musíme zvolit relaxační čas τ > 12 . Tímto omezením ale mohou nastat potíže se stabilitou toku, pokud se relaxační čas bude blížit k 12 , bude se viskozita blížit k nule a v toku se začnou vyskytovat turbulence, které mohou bránit ustálení simulovaného toku. Ke zvýšení stability toku můžeme využít filtraci zvanou "Smagorinsky subgrid model ". Tento model mění relaxační čas τ v jednotlivých uzlech tak, aby byly co nejvíce zohledněné lokální vlastnosti daného uzlu mřížky do celkového toku, čímž ovlivňuje i viskozitu kapaliny v daném místě. Výsledkem je přičtení vířivé viskozity ke kinetické smykové (shear ) viskozitě. Pro výpočet musíme nejprve určit smykový tenzor nerovnovážného stavu Πα,β X Πα,β = eiα eiβ (fi − fieq ), i kde α a β představují jednotlivé dimenze prostoru a i index pro směrový vektor rychlosti mřížky. Druhou odchylku ("Second variance") tenzoru Q pak určíme jako Q = Πα,β Πα,β , z čehož můžeme určit intenzitu lokálního smykového tenzoru S jako q p 1 2 + 18C 2 Q − v), v ( S= 6C 2 kde C představuje Smagorinskyho konstantu. Výsledný upravený relaxační čas pro daný uzel mřížky τu určíme jako 1 τu = 3(v + C 2 S) + . 2 Díky kladné hodnotě S dojde ke zvýšení relaxačního času a tím odsunutí od kritické hranice 1 2 [51]. Pro detailnější popis a odvození výpočtu odkazujeme na [25]. Ke zvýšení stability toku se dá využít také MRT - vícenásobného relaxačního času ("Multiple Relaxation Time"), při kterém rozložíme kolizní operátor na matici momentů s níž pracujeme při výpočtu Boltzmannovy rovnice, detailnější popis postupu je možné nalézt například zde [41]. A.2.4 Hraniční podmínky LBM Posledním důležitým krokem pro průběh simulační smyčky LBM je po výpočtu kolizního a transportního kroku definovat chování částic na okrajích mřížky, tedy stanovit tzv. okrajové podmínky. V uzlech ležících na okraji mřížky se vyskytují nedefinované distibuce přicházející z oblasti mimo mřížku, které musíme nějak definovat. Tyto distribuce zobrazuje obrázek A.4. A.2. LBM (LATTICE BOLTZMANN METHOD) 99 Obrázek A.4: Ukázka aplikace hraničních podmínek na mřížku. První obrázek zobrazuje problémové distribuce, přicházející z oblasti mimo mřížku, u kterých neznáme jejich hodnotu. Další obrázek představuje podmínku zpětného odrazu, kdy se distribuce mířící ven z domény vrátí do protisměru. Symetrické podmínky si můžeme představit jako překlopení distribucí, směřujících mimo, na distribuce směřující dovnitř. Periodická podmínka přesouvá distribuci, která vypadla na jednom okraji na druhý okraj s tím, že distribuci posílá do buňky s ohledem na směr vypadnuvší distribuce. Poslední podmínka je nastavení vnější vrstvy na pevnou hodnotu. Zpětné odrazy Nejjednoduší hraniční podmínkou je aplikování zpětných odrazů ("Bounce Back "). V tomto případě distribuci fi směřující mimo oblast mřížky přiřadíme opačnému směru fi , jak zobrazuje obrázek A.4. Tuto metodu rozšiřuje do 3D oblasti například postup uvedený v [24], který se zaměřuje na simulaci toku nezarovnaného se směrem s hlavními osami. Symetrické hranice Podobný postup jako u zpětných odrazů můžeme aplikovat na podmínku symetrických hranic. Při tomto postupu kopírujeme distribuce zrcadlově a ne do protisměru, jako při zpětném odrazu. Můžeme si to představit jako překlopení distribucí směřující mimo mřížku na distribuce směřující do mřížky. Případ symetrických okrajových podmínek zobrazuje obrázek A.4. Cyklické hranice Dalším způsobem jak zpracovat distribuce směřující do oblasti mřížky je využití tzv. cyklických hranic ("Periodic boundary"). V této metodě se distribuce fi vycházející mimo 100 PŘÍLOHA A. PROUDOVÉ POLE mřížku přesune do uzlu na druhé straně mřížky ve směru e~i . Tuto situaci ilustruje obrázek A.4. Ve 3D je pak nutno dát pozor na zpracování distribucí na hranách a rozích mřížky. Pevně nastavené hranice Dalším možným způsobem je pevné nastavení distribucí na krajích mřížky, případně aplikovat nastavenou vnější vrstvu mřížky s požadovanými distribucemi, čímž vždy dostaneme jasně definované distribuce přicházející do simulační mřížky. Pro náš účel využijeme kombinaci více hraničních podmínek, jeklikož nebudeme simulovat pouze tok kapaliny, ale proudícího větru ve scéně s objekty a zemí. Podrobnější popis uvedeme v návrhu aplikace a implementační části. A.2.5 Vliv překážek Pro reálné simulace je nutné do celkového toku zahrnout také vliv objektů ve scéně. Toho můžeme docílit pomocí již popsané techniky se zpětnými odrazy ("Bounce Back "). To znamená, že jakmile narazíme na buňku mřížky obsahující objekt, přičteme danou distribuci do opačného směru. Pro tuto metodu je potřeba najít buňky simulační mřížky, do kterých objekt zasahuje, což je možné pro statické scény udělat během preprocesingu. Existují také vylepšené techniky zpětného odrazu, zohledňující tvar objektu a vzdálenost odrazu distribuce od objektu [39]. Pro dynamické scény je třeba aktualizovat informace o buňkách, do kterých objekt zasahuje. Jednou možností jak toho efektivně docílit je využití techniky "depth-peelingu"z pohledu na scénu ve směru hlavních os [31]. V tomto případě lze k výpočtům zpětných odrazů opět využít postupů z [39]. A.2.6 Souhrn LBM patří mezi metody simulující tok v mezoskopickém měřítku, kde využívá předností jak z mikroskopického tak makroskopického přístupu. Narozdíl od makroskopického přístupu, kde musíme řešit nelineární Navier-Stokesovy rovnice a provádět následnou diskretizaci výpočtů, u LBM provádíme výpočet nad lineárními Boltzmannovými rovnicemi v diskrétní doméně. Díky výpočtům nad jednotlivými uzly mřížky, které jsou prováděny celé lokálně, je LBM snadno paralelizovatelná úloha. Navíc lze LBM snadno využít pro dynamické scény s pohybujícími se objekty a s objekty měnící svůj tvar. LBM lze snadno využít k simulaci toků, jako je například vítr [65], oheň[51], nebo i kouř [69]. Příloha B Uživatelská příručka V této kapitole představíme požadavky na spuštění aplikace a ukážeme si jak aplikaci ovládat. Seznámíme se tak s uživatelským rozhraním a možností řídit simulaci podle našich požadavků. B.1 Instalace aplikace Pro spuštění aplikace je třeba mít grafickou kartu podporující výpočty na grafických procesorech pomocí technologi CUDA. Navíc je nutné, aby karta měla schopnost vykonávat výpočty ("compute capabality") alespoň verze 1.1 pro využití atomických operací. Pro možnosti ladění aplikace a otevření projektového souboru Visual Studia (.proj) je nutné mít nainstalovaný ovladač pro CUDA v5.5. Tato verze je pak kompatibilní i s knihovnou Optix 3.5.1. Žádné další omezení na chod aplikace nejsou. Není ani nutné aplikaci instalovat, všechny potřebné knihovny jsou již u aplikace přiloženy. Aplikaci tak stačí pouze spustit přes soubor "Snow.exe". Pro počáteční nastavení dále máme možnost upravit konfigurační soubor pro základní nastavení parametrů proudového pole simulujícího vítr, počet sněhových vloček a rozmístění objektů po scéně. Více si o struktuře konfiguračního souboru řekneme v příloze C. B.2 Ovládání aplikace Aplikace může zobrazit 4 různé scény. První scéna je statická a ukazuje pouze tvar generované vločky. Druhá scéna nám slouží ke sledování pohybu částic větru pomocí proudnic. Třetí scéna se zabývá celkovou simulcí, je to tedy hlavní scéna aplikace. Ve čtvrté scéně si můžeme zobrazit řezy proudového pole pro zobrazení silových vektorů v jednotlivých buňkách. Stálé volby I když máme možnost přepínat mezi jednotlivými scénami, kde se mění parametry, které chceme sledovat nebo editovat, bude se na každé scéně objevovat záložka pro možnost manipulace se scénou "Scene". V této záložce máme možnost pomocí trackbalu rotovat se scénou ("Object rotation"), přiblížit scénu ("Zoom") nebo pomocí roletového menu 101 102 PŘÍLOHA B. UŽIVATELSKÁ PŘÍRUČKA Obrázek B.1: Scéna se sněhovou vločkou. přepnout na jinou scénu ("Scene Type"), třeba na sledování proudnic toku větru. Záložku můžeme vidět například na obrázku B.1 Sněhová vločka - Snowflake Při zobrazení sněhové vločky máme možnost pouze ovládat teplotu ("Temperature") na záložce ("Parameters"), při které bude vločka generována. Na záložce "Snowflake"pak můžeme sledovat generované parametry dané vločky jako jsou její průměr("Diameter "), počet vrstev("Layers") a vlhkost ("Humidity"). Ukázka scény je zobrazena na obrázku B.1. Sledování proudnic - Streamlines V této scéně se objevuje v záložce "Parameters" objevuje navíc možnost volby časového kroku simulace, čehož využijeme při sledování částic. Dále je zde záložka pro parametry větru ("Wind "). Tato záložka se ve stejné podobě objevuje i v následujících scénách a umožňuje nám měnit vlastnosti větru, jako jsou jeho směr ("Wind direction"), rychlost ("Speed ") a možnost využití Smagorinskyho filtru. Nakonec tu máme záložku věnující se parametrům proudového pole větru. Zde máme možnost zobrazení mřížky, ve které vítr simulujeme ("Show Grid "), zvolit počáteční pozice proudnic na vybrané rovině ("Plane"), určení souřadnic vybrané roviny ("X coord "), ("Y coord "), počet sledovaných proudnic ("Streamlines"), rozlišení mřížky proudového pole ("Loc B.2. OVLÁDÁNÍ APLIKACE 103 Obrázek B.2: Scéna sledování proudnic. X-res, Loc Z-res, Loc Z-res") a zvolení hraniční podmínky pro mřížku proudového pole. Pokud je jako hraniční podmínka zvolena globální mřížka Global Grid, objeví se ještě paramety pro globální mřížku, které mají stejný význam jako pro mřížku globální. Navíc je tu jen volba velikosti globální mřížky ve smyslu násobku velikosti mřížky lokální "Glob size", což je délka v každé dimenzi. Nejedná se o počet buněk, ale o celkovou délku. Scéna je zobrazena na obrázku B.2. Zobrazení řezu proudového pole - Wind vector V této scéně máme možnost pozorovat vliv jednotlivých buněk na tok větru scénou. Pomocí výběru řezné roviny pak můžeme vidět, jak se vítr ve vybraných oblastech chová. Volbu řezné roviny provedeme pomocí roletového menu "Plane". Posun roviny pak provádíme pomocí změny souřadnice "X coord ", "Y coord "nebo "Z coord "v závislosti na vybrané rovině. ostatní parametry jsou stejné jako v předchozím případě. Ukázka scény je zobrazena na B.3. Simulace sněhové scény - Snow scene Při simuluvání sněhové scény se nám zobrazí pouze jedna nová volba, kterou najdeme v záložce "Snowflake", konkrétně roletové menu "Interaction". Zde máme možnost nastavit jakou interakci sněhové vločky chceme přednostně vidět. Máme na výběr z těchto možností: 104 PŘÍLOHA B. UŽIVATELSKÁ PŘÍRUČKA Obrázek B.3: Scéna sledování vektorů větru. Automatická (Random) Tato volba zajišťu samostatnou detekci interakce na základě výpočtů adhezivní síly a okolních podmínek vločky, jako jsou aktuální rychlost, hmotnost atd. Posun (Shift) Zvolením posunu vnutíme programu aplikovat akci posunutí při nalezení průsečíku se scénou. Posunutí se aplikuje pouze pokud to vločce dovolí adhezivní síla. Odraz (Bounce) Volba odrazu se snaží při nalezení průsečíku vyslat částici dále do scény ve směru ideálního odrazu paprsku. Opět závisí na přilnavé síle, zda dovolí částici se odrazit. Zastavení (Stop) Tato volba zaručuje částici zastavení v bodě aktuálního nalezeného průsečíku. Pokud nastane změna povětrnostních podmínek může dojít k erozi vločky a jejímu dalšímu následnému pohybu scénou. B.2. OVLÁDÁNÍ APLIKACE Obrázek B.4: Scéna sledování simulace sněhové scény. 105 106 PŘÍLOHA B. UŽIVATELSKÁ PŘÍRUČKA Příloha C Konfigurační soubor Pro tvorbu konfiguračního souboru využijeme jazyka XML. Do konfiguračního souboru zadáváme vlastnosti větru a proudového pole, parametry částic a definujeme zde i objekty scény. <configuration> Hlavní parametry konfigurace uzavíráme do toho párového tagu. Zde nalezneme všechny parametry, které je možné nastavit <windfield> Zde nastavíme počáteční parametry proudového pole. Proudové pole má následující atributy: min_x, min_y, min_z Atributy popisující minimální souřadnici proudového pole. max_x, max_y, max_z Atributy popisující maximální souřadnici proudového pole. res_x, res_y, res_z Atributy popisující rozlišení proudového pole. dir_x, dir_y, dir_z Atributy popisující počáteční směr foukání větru. speed Atribut popisující rychlost foukání větru. <particle> Základní parametry pro sledování proudnic a částic nastavujeme pomocí atributů: number Atribut popisující celkový počet částic. streamlines Atribut popisující počáteční počet proudnic. stream_length proudnic. Atribut popisující maximální délku simulačních kroků pro sledování 107 108 PŘÍLOHA C. KONFIGURAČNÍ SOUBOR <snowgrid> Nastavení struktury, ve které budeme hledat průsečíky s imlicitními plochami ralizujeme pomocí atributů: resolution treshold (rozsah 0-1). delta Atribut popisující rozlišení mřížky. Tento údaj platí pro každou dimenzi. Atribut popisující hustotu kterou hledáme při průsečíku s implicitní plochou Atribut popisující povolenou odchylku od zvolené prahové hodnoty treshold. <object number> Určuje počet objektů ve scéně. number Atribut popisující počet objektů scény <object> Slouží pro definováníí objektu. id_object type Atribut popisující identifikator objektu. Atribut popisující druh objektu, zatím existuje pouze typ "block". min_x, min_y, min_z max_x, max_y, max_z Atributy popisující minimální souřadnici objektu. Atributy popisující maximální souřadnici objektu. Příloha D Testování interakcí částic s překážkami Úkolem této práce také bylo určit chování sněhové vločky při kolizy se scénou. Scénou teď myslíme jak jednotlivé objekty, tak i samotnou již ustálenou sněhovou vrstvu. Mezi tyto interakce řadíme následující akce: odrazy, posuny, zastavení a eroze. Pro testování jednotlivých akcí jsme zvolili jednoduchou scénu s velkou vločkou, na které jsme testovali i interakce s implicitní plochou. Obrázek D.1: Ukázka testu zastavení částice při kolizi se scénou. Zastavení Zastavení je případ, kdy přilnavá síla nepovolí částici (sněhové vločce) dále postupovat. Částice se usadí na místě vypočteného průsečíku a již dále nepostupuje scénou, jak ukazuje obrázek D.1. Pokud nastanou vhodné okolnosti, usazené částice se mohou dát znovu do pohybu, tento jev se nazývá eroze. Eroze Pokud se změní podmínky v okolí ustálené částice, může se zastavená vločka dát opět do pohybu. Může se tak stát vlivem změny větrných podmínek, jako je síla foukání větru, nebo může stačit změna směru větru, pro zmírněné adhezivní síly. Navíc lze erozi provést 109 110 PŘÍLOHA D. TESTOVÁNÍ INTERAKCÍ ČÁSTIC S PŘEKÁŽKAMI Obrázek D.2: Test eroze zastavených částic. Můžeme vidět, jak zleva přicházejí do scény resetované částice po vydanutí ze scény. pouze na horních vločkách sněhové vrstvy, aby nedocházelo k odfoukávání již zasypaných vloček. Průběh eroze můžeme vidět na obrázku D.2. Erozi vykonáme posunem nebo odrazem v závislosti na úhlu rychlosti větru v daném místě s normálou povrchu, na kterém je vločka usazena. Posuny Pokud není přilnavá síla dostatečné velká pro zastavení, dochází ke změně pohybu částice. Jednou z těchto změn je posun po povrchu. Pro posun vypočteme projekci vektoru rychlosti částice při nárazu a posouváme částici, dokud není přilnavá síla dostatečně velká pro zastavení. Průběh ukazuje obrázek D.3. Obrázek D.3: Ukázka testu posouvání částice při kolizi se scénou. Odrazy Poslední možnou akcí částice je odražení od povrchu objektu ve směru zrcadlového odrazu. Nejdená se však o přesný směr zrcadlového odrazu, jelikož jsme zahrnuli možnost vychýlení směru z rozsahu ±20◦ . Výsledky testů odrazů si můžeme prohlédnout na obrázku D.4. 111 Obrázek D.4: Ukázka testu zastavení částice při kolizi se scénou. Mimo oblast Jako zváštní druh interakce pak můžeme vzít v úvahu vyletění částice mimo simulovanou oblast, v takovém případě dojde k resetování jejich parametrů a následnému přidání do scény. 112 PŘÍLOHA D. TESTOVÁNÍ INTERAKCÍ ČÁSTIC S PŘEKÁŽKAMI Příloha E Obsah přiloženého CD Struktura CD je zobrazena na obrázku E.1. V hlavní složce "Snih"se nachezejií tři složky, a to složka "projekt"se zdrojovými kódy a projektovým soubory Visual Stuida. Najdeme zde také potřebné knihovy využívané během implementace. Další složka "spustitelná verze"obsahuje zkompilovaný spustitelny soubor s potřebnými přeloženými knihovnami ke spuštění aplikace. Poslední složka "zpráva"pak obsahuje zdrojové soubory pro sázecí systém latex a výslednou zprávu ve formátu pdf. Obrázek E.1: Struktura CD. 113 114 PŘÍLOHA E. OBSAH PŘILOŽENÉHO CD Příloha F Testovací sestava Měření rychlosti vykreslení jednotlivých obrázků polární záře bylo realizováno na PC sestavě s následujícími parametry: • CPU : IntelCore2 Duo CPU E6750 2,66GHZ, • Grafická karta : NVIDIA GeForce GT 8800, 512MB, • Paměť RAM : 2x Kingston DDR2, 2GB, 333MHz • Základní deska : ASUS P5K, Dual-channel 1066/800/667MHz, Intel P35/G33/G31, 82801B (ICH9) 115
Podobné dokumenty
Blender v.2.45
Modelování podle obrázku v pozadí: vložíme bmp na pozadí, obtáhneme potřebné tvary
v tzv. blueprintu v nárysu, půdorysu, bokorysu. Vlastnosti obr. na pozadí se nastavují
v Background Image panelu z...
1 Základy 2 Výroková logika 3 Formáln´ı axiomatický systém logiky
Logické spojky a pomocné symboly jsou definovány stejně jako ve výrokové logice.
Kvantifikátory označujı́ platnost pro všechny objekty oboru, popř. existenci požadovaného objektu (v dal...
Gromacs - Pokročilé vzdělávání ve výzkumu a aplikacích
Flexible – velké možnosti simulačních podmínek,
volby silových polí a potenciálů (i bez
programování), úprav topologie, úprav čitelného
a dobře zdokumentovaného kódu
Gromacs, Olomouc 2011
7. Dosažené výsledky - DCGI - České vysoké učení technické v Praze
České vysoké učení technické v Praze
Fakulta elektrotechnická
šablona zprávy
Tato příručka nenahrazuje technickou normu nebo technické podmínky. Lze ji chápat jako jejich
doplnění a rozšíření, a to zejména v případech, které jsou mimořádně vhodné pro aplikaci mikroskopickýc...
modelování turbulentního proudění - České vysoké učení technické
modely, které jsou nejvhodnější pro simulace procesů v míchané nádobě.
Klíčová slova
Modely turbulence, RANS, LES, Stěnové funkce, FLUENT
Studijní text - Personalizace výuky prostřednictvím e
CD-ROM s doplňkovými animacemi vybraných částí kapitol
harmonogram průběhu semestru a rozvrh prezenční části
rozdělení studentů do skupin k jednotlivým tutorům a kontakty na tutory
kontakt na studi...