Simulace akumulace sn¥hu - DCGI - České vysoké učení technické

Transkript

Simulace akumulace sn¥hu - DCGI - České vysoké učení technické
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

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...

Více

1 Základy 2 Výroková logika 3 Formáln´ı axiomatický systém logiky

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...

Více

Gromacs - Pokročilé vzdělávání ve výzkumu a aplikacích

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

Více

7. Dosažené výsledky - DCGI - České vysoké učení technické v Praze

7. Dosažené výsledky - DCGI - České vysoké učení technické v Praze České vysoké učení technické v Praze Fakulta elektrotechnická

Více

šablona zprávy

š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...

Více

modelování turbulentního proudění - České vysoké učení technické

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

Více

Studijní text - Personalizace výuky prostřednictvím e

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...

Více