Professional Documents
Culture Documents
Tomáš BERGL
Obsah
1 Úvod 2
1.1 Zadánı́ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Práce do budoucna 5
3.1 Využitı́ SIMD, SSE instrukčnı́ch sad . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Počı́tat jen určité pixely, adaptivnı́ počı́tánı́ pixelů . . . . . . . . . . . . . . . . . . . . 5
3.3 Segmentový zdroj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4 Předpočı́tánı́ pozic kamery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Lightcuts - hierarchie světel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.6 Dalšı́ nápady a vylepšenı́ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Závěr 8
6 Obrázková přı́loha 10
1
1 Úvod
Tento dokument bych pojal jako report pracı́, které jsem za tento semestr dokázal dokončit. V prvnı́
části bych popsal co a jak jsem dělal a jaké problémy se při tom vyskytly, v dalšı́ch částech bych se
pak pokusil zhodnotit vývoj do budoucna a popsal bych zlepšenı́, které mě doposud napadly.
1.1 Zadánı́
Simulace a vizualizace přı́rodnı́ch jevů patřı́ mezi nejdůležitějšı́ oblasti počı́tačové grafiky. Jednı́m ze
zajı́mavých přı́rodnı́ch jevů jsou blesky. Prostudujte dostupnou literaturu pojednávajı́cı́ o metodách
generovánı́ a zobrazovánı́ blesků. Na základě zı́skaných znalostı́ vytvořte interaktivnı́ aplikaci, která
umožnı́ generovat scény s různými typy a tvary blesků. Aplikace bude tyto scény také zobrazovat a
všechny objekty ve scéně budou osvětleny světlem, které vyzařujı́ blesky. Funkčnost aplikace demon-
strujte alespoň na třech různých scénách.
Napřed jsem si z natočenı́ kamery zjistil směr pohledu kamery. Ze směru pohledu kamery jsem
si spočı́tal bod uprostřed obrazovky a vektor směrujı́cı́ nahoru. Z vektorů nahoru a kamery jsem
spočı́tal vektor doprava. Nynı́ pomocı́ těchto vektorů (up a right) a bodu uprostřed obrazovky můžeme
spočı́tat směrový vektor pro libovolný pixel. Konkrétněji jsem si spočı́tal souřadnice levého dolnı́ho
rohu (pixelu) a deltaX, deltaY. To jest o kolik se musı́m posunout ve směru x resp. y, abych se
posunul na dalšı́ sloupec resp. řádek.
Dále jsem potřeboval zjistit vzorec pro fázovou funkci
(ta je nutná k výpočtu integrálu - rovnice 2). Použil jsem zjednodušený vzorec(rovnice 1) pro vzduch:
3
fair (θ) = (1 + cos2 θ)
16π
2
(1)
Potřeboval jsem zjistit, jak má být velká tabulka, aby osvětlenı́ bylo realistické. Jak spočı́tat
numericky tento integrál...
Zvolil jsem tabulku jako Dobashi 128 x 128 o reálném rozměru 400m x 400m. Pro numerický
výpočet jsem zvolil lichoběžnı́kovou metodu. Až na konci semestru (při své prezentaci) jsem se
dozvěděl, že výzkumy této problematiky pokročilý a tento integrál lze spočı́tat analyticky.
Musel jsem nalézt či si domyslet následujı́cı́ parametry:
2. Extinction coefficient:
V článku[5] jsem nalezl tento vzorec pro jasný, suchý vzduch:
kde
3
Obrázek 3: Textura pro billboard.
Výsledek je na obrázku 3.
Naprogramoval jsem blending billboardů a natáčenı́ billboardů k pozici kamery.
Jedna z nejdůležitějšı́ch částı́, co jsem naimplementoval je tzv. ”Splatting method”:
Toto vše uděláme pro každý bodový zdroj na blesku (cca 50x) a pro každý bodový zdroj to
uděláme 6x - pro každou obrazovku virtuálnı́ krychle, do které umı́stı́me každý bodový zdroj.
Zprovoznil jsem tedy splatting metodu, ale na mých náhodně generovaných metaballech nedávala
dobré(pěkné) výsledky. Po konzultaci se zadavatelem jsem se rozhodl využı́t diplomové práce Michala
Poneše zabývajı́cı́ se renderovánı́m mraků. Vyskytlo se poměrně dost problémů s zprovozněnı́m této
práce (kombinace VS2005 a staršı́ch knihoven libci.lib ..). Nakonec jsem jeho práci přepsal (vy-
hodil vše závislé na starých knihovnách) a zprovoznil. Pochopil jsem a zpracoval buněčný automat
generujı́cı́ mraky a zapracoval ho do své práce.
Měl jsem tedy hotové osvětlenı́ mraků. Začal jsem pracovat principu LOD. Zde se ukázalo, že
kvalita obrázku a rychlost velice záležı́ na parametrech. Povedlo se mi myslı́m nalézt vhodnou kom-
binaci parametru a vygenerovat pěkné obrázky.
4
Zkombinoval jsem prvnı́ část práce (záře) s touto - umı́stil jsem na každý segment bodový zdroj
světla. To samozřejmě zpomalı́ výpočet počet-bodů krát. Pokud ovšem budeme předpokládat, že jsou
mraky po dobu osvětlenı́ bleskem neměnné můžeme osvětlenı́ spočı́tat pouze 1x.
3 Práce do budoucna
Během pracı́ mě napadlo několik zlepšenı́, které bych zde chtěl rozebrat. Také, když jsem zprávu
předváděl širšı́mu publiku, upozornili mě někteřı́ lidé na možné zlepšenı́.
Proto si myslı́m, že pro tento přı́pad je ideálnı́ využı́t instrukčnı́ sady SSE. A počı́tat vektory
naráz. Tı́m by mohlo dojı́t k 4-násobnému zrychlenı́.
Přı́klad výpočtu násobenı́ dvou vektoru:
__m128 k = _mm_mul_ps(j,i);//sub,add,div,and...
5
3.3 Segmentový zdroj
Pro většı́ realističnost záře blesku bych nahradil bodové zdroje segmentovými. Ty bychom dostali
vhodných roztaženı́m bodového zdroje podél segmentu. Známe polohu bodového zdroje (uprostřed
segmentu) a polohu dvou krajnı́ch bodů segmentu, mohli bychom spočı́tat nataženı́ záře podél vektoru
definovaného rozdı́lem jednoho krajnı́ho bodu segmentu a bodového zdroje - tj. středu segmentu.
Otázkou je, zda bychom neubrali na fyzikálnı́ věrnosti.
• ..
6
4 Datová struktury octree, princip LOD a jejich přı́nos
V této sekci nejprve popı́šu aplikaci LOD v mé práci, a pak se pokusı́m popsat přı́nos - zrychlenı́,
kterého jsem dosáhl.
Ik (α)e−τ (r)
Ikj (α) =
r2
(4)
kde
• r je vzdálenost mraku
Je vidět, že intenzita světla, které dosáhne metaballu, je úměrná kvadrátu vzdálenosti. Z toho
vyplývá, že intenzita je velmi malá ve vzdálených oblastech a téměř uniformnı́. Proto můžeme ve většı́
vzdálenosti aproximovat shluk menšı́ch metaballů většı́ma metaballama. Výběr správné metabally
(velikosti) záležı́ na vzdálenosti.
Postavı́me tedy nad 3D mřı́žkou strukturu octree - viz obrázek 4.
kde
7
Výběr správného metaballu záležı́ na následujı́cı́ rovnici:
kde
• r je vzdálenost mraku
• je uživatelem nastavitelná (! velice důkežitá) hodnota tolerance. Čı́m většı́, tı́m většı́ma mata-
ballama nahrazuji.
(a) 6 krát (pro každou stranu virtualnı́ krychle umı́stěné na pozici bodového zdroje)
i. Seřad metabally podle vzdálenosti od bodového zdroje.
ii. Vyřad’ ty, které nejsou vidět.
iii. Aplikuj Splatting metodu na LOD metabally
5 Závěr
Myslı́m, že se mi nakonec povedlo naimplementovat tento semestr vše, co jsem si naplánoval. Základnı́
kostra aplikace je již hotová. Nynı́ mám ještě celý semestr na implementaci zlepšenı́ a optimalizaci
aplikace.
8
Reference
[1] Michálek, M.:
Modelovánı́ a vizualizace blesků.
Semestrálnı́ práce, 2004
9
6 Obrázková přı́loha
Obrázek 5: 2 zdroje.
Obrázek 6: 2 zdroje.
10
Obrázek 7: Rozptyl v atmosféře.
11
Obrázek 8: Rozptyl v atmosféře.
12
Obrázek 9: Rozptyl v atmosféře a mracı́ch.
13
Obrázek 10: Rozptyl v atmosféře a mracı́ch.
14