MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Techniky simulace tekutin BAKALÁŘSKÁ PRÁCE
Karel Motlík
Brno, podzim 2014
Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Karel Motlík
Vedoucí práce: doc. Ing. Jiří Sochor, CSc.
i
Shrnutí V bakalářské práci se zabývám simulací tekutin ve virtuálním prostředí. Popisuji metody výpočtu dynamiky tekutin a možnosti dostupných technologií pro její simulaci. Zaměřuji se na fyzikální engine NVIDIA PhysX, který k simulaci využívá částicový systém a metodu zvanou Smoothed Particle Hydrodynamics. Pomocí tohoto enginu jsem vytvořil ukázkovou aplikaci demonstrující interakci kapaliny a kouře s okolním prostředím.
ii
Klíčová slova fyzikální simulace, simulace tekutin, dynamika tekutin, fyzikální engine, NVIDIA PhysX, částicový systém, Smoothed Particle Hydrodynamics
iii
Poděkování Rád bych poděkoval Mgr. Jiřímu Chmelíkovi, Ph.D. za pomoc při výběru tématu práce, Mgr. Janu Juráňovi za poskytnutí informací ohledně enginu PhysX a vykreslování kapalin a doc. Ing. Jiřímu Sochorovi, CSc. za odborné vedení a cenné rady při psaní bakalářské práce.
iv
Obsah Úvod ...................................................................................................................................... 1 1. Fyzikální simulace ve virtuálním prostředí ................................................................. 2 1.1 Simulace tekutin ........................................................................................................ 2 1.1.1 Vizuální jevy tekutin ....................................................................................... 3 1.2 Prostředky pro fyzikální simulace .......................................................................... 4 1.2.1 Fyzikální engine ................................................................................................. 4 1.2.2 Přehled dostupných real-time fyzikálních enginů ........................................ 5 1.2.3 Částicové systémy ............................................................................................. 6 1.2.4 Emitor částic ....................................................................................................... 7 2. Teoretické základy simulace tekutin ............................................................................ 8 2.1 Rovnice chování tekutiny ........................................................................................ 8 2.2 Metody výpočtu simulace tekutiny ........................................................................ 9 2.2.1 Lagrangeho metoda......................................................................................... 10 2.2.2 Eulerova metoda .............................................................................................. 11 2.3 Smoothed particle hydrodynamics (SPH) ........................................................... 12 2.3.1 Výpočet SPH..................................................................................................... 12 3. NVIDIA PhysX .............................................................................................................. 14 3.1 PhysX SDK ............................................................................................................... 14 3.2 Vlastnosti PhysX SDK ............................................................................................ 15 3.2.1 Materiály ........................................................................................................... 16 3.2.2 Parametry částicového systému .................................................................... 16 3.3 Postup při simulace tekutin ................................................................................... 19 4. Simulování tekutin pomocí NVIDIA PhysX.............................................................. 22 4.1 Simulace kapaliny ................................................................................................... 22 4.1.1 Emitor kapaliny ............................................................................................... 22 4.1.2 Vizualizace kapaliny ....................................................................................... 23 4.1.3 Tvorba povrchu kapaliny ............................................................................... 23 4.1.4 Funkcionalita v demonstrační aplikaci ......................................................... 24 4.2 Simulace kouře ........................................................................................................ 26 4.2.1 Emitory kouře .................................................................................................. 26 4.2.2 Vizualizace kouře ............................................................................................ 27 4.2.3 Funkcionalita v demonstrační aplikaci ......................................................... 29 Závěr ................................................................................................................................... 31 Literatura ............................................................................................................................ 32 Přílohy................................................................................................................................. 34
v
Úvod Základní kameny výpočtů dynamiky tekutin (Computational Fluid Dynamics, CFD) položili Claude Navier kolem roku 1821 a George Stokes kolem roku 1845, když nezávisle na sobě formulovali rovnici popisující dynamiku tekutin (rovnice je známá jako NavierStokesova, dále ji zmiňuji v druhé kapitole). Jakmile se objevila možnost numerických výpočtů na počítačích, začaly se rozvíjet speciální techniky pro simulaci tekutin. V roce 1983 představil T. Reeves koncept částicového systému jako techniku pro modelování objektů těžko popsatelných, nebo příliš členitých. Od té doby jsou tekutiny simulovány dvěma způsoby (Lagrangeho a Eulerovým), které v textu vysvětluji a pro simulaci využívám. Cílem práce bylo prostudovat oblast simulace tekutin, zvláště pak jejich řešení s využitím existujících technologií (NVIDIA PhysX, Bullet, Havok), popsat metody a jejich principy a vytvořit ukázkovou aplikaci demonstrující využití tohoto přístupu ve virtuálním prostředí. V první části popisuji důvody, proč je oblast fyzikálních simulací resp. simulace tekutin v počítačové grafice důležitá a jakými prostředky dosahujeme požadovaných výsledků. Uvádím charakteristiky dostupných technologií a jejich možnosti pro simulaci tekutin. Další část je shrnutím teoretických základů pro simulaci. Popisuji zde vlastnosti tekutin, rovnici jejich pohybu a výpočetní metody pro simulaci. V práci se zaměřuji na Lagrangeho přístup k problematice, s nímž pracuji ve čtvrté kapitole. Třetí část se zabývá popisem fyzikálního enginu NVIDIA PhysX, který jsem si zvolil jako nástroj pro vývoj demonstrační aplikace. Zmiňuji vývojové prostředí a použité nástroje, dále pak způsob, jakým se s PhysX SDK pracuje, a zaměřuji se především na možnosti simulace tekutin pomocí integrovaného částicového systému. V poslední části píši o vývoji a funkcionalitě demonstrační aplikace. Vysvětluji použité metody, které souvisí se simulací tekutin, a okrajově se dotýkám způsobu jejich vizualizace.
1
Kapitola 1
Fyzikální simulace ve virtuálním prostředí Cílem virtuálního prostředí [1] (virtuální reality) je vyvolat v uživateli dojem, že se nachází a pohybuje v umělém světě. Toto prostředí je nejčastěji vytvořeno počítačem a působením na lidské smysly dociluje u uživatele co možná nejautentičtějšího zážitku – jakoby na virtuálním místě doopravdy byl. Této iluze se dosahuje pomocí speciálních zařízení (stereoskopická helma, haptické rukavice), nejčastěji je ale ovlivňován zrak a sluch, k čemuž stačí obrazovka počítače a reproduktory. Důležitým aspektem věrohodnosti virtuálního prostředí je přirozené chování jednotlivých součástí systému. To znamená, že by měly být v souladu fyzikální zákonitosti (např. gravitace), na které jsme z reality zvyklí. Nevyžadujeme ovšem přesnou fyzikální simulaci, nýbrž stačí přiblížení se reálnému chování a to z důvodu omezené výpočetní rychlosti. Je totiž nutné, aby vykreslování scény a interakce s uživatelem probíhala zároveň a nedocházelo k velké časové prodlevě.
1.1 Simulace tekutin Tekutiny nás obklopují a hrají důležitou roli v každodenním životě. Přirozeně bychom s jevy jako je vítr, déšť, loď houpající se na vlnách oceánu, plnění sklenice vodou, plápolající oheň, stoupající kouř atd. rádi přicházeli do styku i ve virtuálním prostředí. Realisticky animované tekutiny totiž umí výrazně podpořit autentičnost interaktivních aplikací, zvláště pak v oblasti počítačových her, kde nelpíme na velké přesnosti simulace. Tyto úkazy známé ze skutečného světa jsou pro nás běžné, ale při jejich komplexnosti je simulace tekutin velmi náročná.
2
1. Fyzikální simulace ve virtuálním prostředí
Ačkoli jsou výpočty dynamiky tekutin oblastí výzkumu s dlouhou historií, stále zůstává velké množství nevyřešených problémů. Důvodem složitosti chování tekutin je celková souhra rozličných jevů, jako je proudění, rozptyl, turbulence a povrchové napětí [2].
1.1.1 Vizuální jevy tekutin Všechny jevy, ve kterých hrají roli tekutiny, mají společný znak a tím je proudění částic. Se simulací kapalin souvisí i simulování kouře či ohně, kde se částice pohybují daným způsobem ve vzduchu (proudění částic v plynu). Voda Nejčastěji simulovaná kapalina je voda vytvářející velkou množinu jevů, které chceme přenést do virtuálního prostředí. Šplouchání, cákání, vlnění, zrcadlení okolního prostředí od hladiny, kaustika1 a interakce s okolím, jako je např. plavání lehkých předmětu na hladině nebo změna barvy povrchu objektu vlivem vlhkosti. Pro všechny tyto jevy má smysl se zabývat prouděním částic v tekutině, aby jejich simulace vypadala přirozeně. Kouř Na kouř může být nahlíženo buď jako na zplodinu hoření, kdy se zbytkové částice uvolňují do vzduchu, nebo obecně jako na viditelný plyn, jehož částice se ve vzduchu rozptylují do všech směrů. V průběhu rozptylování klesá koncentrace kouře a my vidíme, jak postupně mizí. Jeho chování se liší v závislosti na teplotě a hmotnosti částic. Kouř ohně má ve vzduchu tendenci stoupat směrem vzhůru, kdežto např. při sublimaci suchého ledu za pokojové teploty se pohybuje směrem dolů.
Známý optický jev, ke kterému dochází při zakřivení paprsků světla procházejících kapalinou. Jedná se o jasnou oblast světla, která vzniká ve stínu kapaliny (např. na dně bazénu nebo za sklenicí osvícenou sluncem). 1
3
1. Fyzikální simulace ve virtuálním prostředí
Oheň Při vysokých teplotách dochází k jevu zvanému oheň. Je charakterizován plameny, jež jsou zdrojem světla a tepla. Jedná se o plynové oblasti, které v příznivých podmínkách (přítomnost paliva, přístup kyslíku) hoří. Na rozdíl od kouře, u něhož se částice rozptylují do všech stran, částice hoření se sbíhají k místu s vyšší teplotou, což má za následek kuželovitý tvar plamenu (hořící svíčka), a s postupným ochlazováním částice zcela mizí, resp. přecházejí v kouř.
1.2 Prostředky pro fyzikální simulace 1.2.1 Fyzikální engine Počítačové nástroje pro simulaci fyziky, také nazývané jako fyzikální enginy, v dnešní době dokáží napodobovat chování pevných předmětů (rigid body dynamics), jejich deformace, destrukce a detekci kolizí. Dále chování tkanin – oblečení, vlajek a provazů (soft body dynamics) a dokáží napodobovat i kouř, plameny a kapaliny (obecně dynamiku tekutin2, fluid dynamics). Hlavní využití fyzikálních enginů je v oblasti počítačových her resp. při vědeckých simulacích. Nástroje jsou dvojího typu: •
real-time (simulace v reálném čase)
•
high-precision (simulace s vysokou přesností)
Kvůli zmíněným požadavkům na rychlost interakce virtuálního prostředí s uživatelem se budu zabývat pouze real-time fyzikálními enginy.
Ve fyzice je dynamika tekutin poddisciplínou mechaniky tekutin, která se zabývá pohybem (tokem) kapalin a plynů. 2
4
1. Fyzikální simulace ve virtuálním prostředí
Real-time engine Real-time fyzikální enginy jsou nejčastěji používány v interaktivních aplikacích (především počítačových hrách), kde k výpočtu simulace dochází v průběhu animace. Jelikož je u tohoto typu systému mnohem důležitější rychlost, spokojíme se s aproximovaným výpočtem, kdy nám zkreslení nevadí, dokud výsledek vypadá přirozeně. High-precision engine High-precision fyzikální enginy se využívají především pro vědecké a průmyslové simulace, např. při testech hydrodynamiky a aerodynamiky. Dále mají enginy využití ve filmovém průmyslu pro tvorbu speciálních efektů a animovaných filmů. Pro všechny tyto účely je potřeba vyšší výpočetní rychlost a usiluje se o maximální přesnost, nehledě na délku času pro výpočet, neboť i malé odchylky můžou drasticky ovlivnit předpovídaný výsledek.
1.2.2 Přehled dostupných real-time fyzikálních enginů •
Havok
•
Bullet Physics Library
•
NVIDIA PhysX
•
Open Dynamic Engine (ODE)
•
Vortex
Havok Jedním z nejrychlejších a nejrobustnějších enginů je Havok, který poskytuje především kompletní řešení herní fyziky a to pro všechny herní
platformy (Microsoft Windows,
Microsoft Xbox, Sony
Playstation, Nintendo Wii atd.). Je složen z několika modulů, které umožňují simulovat kolize objektů, dynamiku pevných těles, dynamiku tkanin, destrukce a deformace objektů [3]. Dále také nabízí pluginy3 pro 3D animační software (Maya, 3D Studio Max).
3
nástroje rozšiřující funkcionalitu
5
1. Fyzikální simulace ve virtuálním prostředí
Co se týče možností pro simulaci tekutin, nabízí pouze standardní částicový systém, což znamená, že dynamiku tekutin by při využití tohoto enginu bylo potřeba doimplementovat. Bullet Physics Library Konkurujícím enginem je Bullet, který nabízí stejné možnosti při fyzikálních simulacích jako Havok, nicméně více než pro počítačové hry se využívá právě jako plugin (např. pro Blender nebo Cinema 4D) a při tvorbě speciálních efektů ve filmech (Hancock, Shrek 4, Sherlock Holmes a další). Pro real-time simulaci tekutin se Bullet, stejně jako Havok, nehodí. NVIDIA PhysX PhysX je škálovatelný fyzikální engine podporující široké spektrum zařízení, od smartphonů po high-end vícejádrové procesory a grafické karty. Poskytuje v reálném čase detekci kolizí a simulace pevných těles, tkanin, tekutin, částicových systémů a také pohyb lidské postavy či vozidla [4]. Pomocí speciálního částicového systému dokáže PhysX simulovat chování tekutin bez potřeby přidávat jakoukoli funkcionalitu. Proto se dále v práci budu zabývat podrobněji právě tímto enginem.
1.2.3 Částicové systémy „Silnou modelovací a zobrazovací technikou jsou systémy částic (particle systems), které se používají zejména k modelování objektů, jejichž tvar je natolik členitý, nebo se mění takovým způsobem, že ho není možno reprezentovat jako povrch. Takovými objekty jsou hejna ptáků či ryb, padající sníh, déšť, oheň, mlha, dým, tráva, les atp." [1]
6
1. Fyzikální simulace ve virtuálním prostředí
Částicový systém P je uskupení konečného počtu k částic, které jsou během svého života (tedy po dobu od vytvoření po jejich odstranění) popsány několika parametry. Každá částice má svůj index j z intervalu [0; k - 1] a nese informaci o své poloze v prostoru 𝑥𝑗 , o své rychlosti ⃗⃗⃗ ⃗⃗⃗ 𝑢𝑗 a případně o dalších vlastnostech, jako je např. délka života, barva či velikost. Při užití částicového systému dosahujeme požadovaného vizuálního výsledku definováním pohybu charakteristického pro určitý druh objektu a vykreslením konkrétního objektu resp. textury na pozici jednotlivých částic. Např. pro padající sníh stačí napodobit poletování vloček ve vzduchu a na pozici částic vykreslovat texturu vloček nebo jen bílé body. V některých případech je ale potřeba počítat i s interakcí mezi jednotlivými částicemi. Vzájemné narážení sněhových vloček nás tolik netrápí, jako spíš kouř nebo kapalina, u kterých očekáváme, že mezi sebou budou částice interagovat podle aerodynamických popř. hydrodynamických zákonů.
1.2.4 Emitor částic Emitor je ve virtuálním prostředí speciální typ objektu, který produkuje částice. Typickými vlastnostmi emitoru jsou rychlost produkování částic (kolik částic je vytvořeno za jednotku času), výchozí rychlostní vektor (udává směr pohybu částic po jejich vytvoření), délka života (po jaké době dojde k propuštění částice ze scény), objem (velikost oblasti, ve které se budou částice tvořit) a další. Představit si můžeme např. jiskry odlétávající z jednoho místa do všech směrů nebo sopku, ze které stoupá dým.
7
Kapitola 2
Teoretické základy simulace tekutin Tekutina je z fyzikálního hlediska látka, která se neustále deformuje (teče) pod vlivem smykového (tečného) napětí a nedokáže udržet svůj stálý tvar. Zahrnuje kapaliny, plyny a do jisté míry i pevná tělesa z materiálu, který se může roztékat (plast, sklo atd.) resp. sypké látky (např. písek) taktéž splňující podmínku tekutosti. Viskozita Speciální vlastností tekutin je viskozita, což je veličina charakterizující vnitřní tření a závisí především na přitažlivých silách mezi částicemi. Tato vlastnost se projevuje pouze tehdy, pokud není tekutina v klidu. Tekutiny s větší přitažlivou silou mají větší viskozitu, tedy větší brzdění pohybu samotné tekutiny nebo těles v tekutině [5]. Např. med je více viskózní než voda.
2.1 Rovnice chování tekutiny Ve většině případů je tok částic tekutiny řízen tzv. nestlačitelnou NavierStokesovou rovnicí (soustava parciálních diferenciálních rovnic). Rovnice je obyčejně zapsána jako [6]: ⃗ 𝜕𝑢 𝜕𝑡
+𝑢 ⃗ ∙ ∇𝑢 ⃗⃗⃗ +
1 ∇𝑝 𝜌
= 𝑔 + 𝑣∇ ∙ ∇𝑢 ⃗ ,
∇ ∙ 𝑢 ⃗ = 0.
(2.1) (2.2)
Kde ∇ je operátor gradientu4, ∇ ∙ je diferenciální operátor divergence a ∇ ∙ ∇ je Laplaceův operátor, který je definovaný jako divergence gradientu daného skalárního pole. Výsledkem divergence je funkce popisující rychlost růstu. Je-li např. zkoumaným polem gradient teploty (vektory udávají rychlost vedení tepla), potom kladná divergence v daném bodě znamená, že v tomto bodě vzniká teplo, záporná naopak, že v daném místě teplo zaniká [7]. 4
Gradient znamená obecně směr růstu.
8
2. Teoretické základy simulace tekutin
Popis proměnných:
𝑢 ⃗ ... rychlost proudění tekutiny
𝜌 ... hustota tekutiny (pro vodu přibližně 1 000 kg/m3, pro vzduch přibližně 1.3 kg/m3)
𝑝 ... tlak (síla plošné jednotky, která působí na okolí)
𝑔 ... gravitační zrychlení (obyčejně (0.0, -9.81, 0.0) m/s2,
za předpokladu, že osa Y směřuje vertikálně nahoru) 𝑣 ... kinematická viskozita První diferenciální rovnice (2.1) se nazývá rovnice hybnosti a
charakterizuje chování tekutiny při působení gravitace bez dalšího omezení. Pro interakci s okolním prostředím (chceme např. tekutinou naplnit sklenici nebo do klidné tekutiny vhodit pevný předmět) je třeba přidat vnější silové působení (viz Obrázek 2.1).
Obrázek 2.1: Příklad vnější síly působící na tekutinu.
Druhou diferenciální rovnicí (2.2) je podmínka nestlačitelnosti, která zajišťuje zachování objemu jednotlivých částic a simuluje tak nestlačitelnost skutečné tekutiny.
2.2 Metody výpočtu simulace tekutiny Vhodným prostředkem k simulování tekutin ve virtuálním prostředí je částicový systém již zmíněný v první kapitole. Vstupními daty výpočtu jsou částice (viz Obrázek 2.2) reprezentující malé dílky tekutiny, které mají svoje počáteční parametry (např. rychlost), na jejichž základě se počítá stav částic v dalším kroku animace.
9
2. Teoretické základy simulace tekutin
Když pro simulaci chování tekutiny použijeme částicový systém, můžeme sledovat a měřit její pohyb dvěma způsoby.
Obrázek 2.2: Částice tekutiny znázorněny ve 2D prostoru.
2.2.1 Lagrangeho metoda Lagrangeho přístup, pojmenovaný podle známého francouzského matematika (Joseph-Louis Lagrange), na jehož základě se soustředíme na částice tekutiny (particle-based), je častý způsob napodobení chování tekutin. Částice nesou údaje o své pozici v prostoru 𝑥 a rychlosti 𝑢 ⃗ , kterou se pohybují (viz Obrázek 2.3).
Obrázek 2.3: Užití Lagrangeho metody ve 2D prostoru.
10
2. Teoretické základy simulace tekutin
2.2.2 Eulerova metoda Druhým
způsobem
je
Eulerův
přístup,
podle
švýcarského
matematika (Leonhard Euler), kdy se namísto sledování jednotlivých částic soustředíme na specifické body v prostoru resp. mřížku složenou z těchto bodů, přes které se tekutina pohybuje (grid-based). V těchto bodech měříme veličiny jako je hustota, tlak, teplota atd. a pozorujeme, jak se veličiny mění v čase (viz Obrázek 2.4). Hodnotu veličin mezi jednotlivými body můžeme zjistit aproximací.
Obrázek 2.4: Užití Eulerovy metody ve 2D prostoru.
Rozdílnost těchto dvou přístupů si lze představit jako měření počasí. Podle Lagrangeho jsme unášení větrem v horkovzdušném balónu, ze kterého měříme tlak, teplotu, vlhkost atd. v okolí. Podle Eulera stejné měření provádíme ze zemského povrchu. Ač obě měření počasí provádíme v odpovídajícím prostředí, podoba vzniklých grafů změn veličin v závislosti na čase bude naprosto odlišná a to právě kvůli rozdílnému způsobu měření [6]. Lagrangeho metoda (particle-based) se může zdát oproti Eulerově (grid-based) jednodušší, neboť je přirozenější – lze její pomocí snadno popsat rychlost a zrychlení částic, nicméně je mnohem těžší stanovit hustotu, tlak a teplotu tekutiny, což je naopak snadné při využití Eulerovy metody [8]. V bakalářské práci se nadále budu zabývat particle-based metodou, jelikož se navzdory své
11
2. Teoretické základy simulace tekutin
složitosti využívá v real-time aplikacích častěji. Důvodem je rychlejší výpočet simulace.
2.3 Smoothed particle hydrodynamics (SPH) Metoda SPH, kterou detailně popisuje J. J. Monaghan [9], byla vyvinuta za účelem simulace astrofyzikálních problémů, své využití má však obecně pro simulaci všech druhů tekutin. SPH je způsob implementace nestlačitelné Navier-Stokesovy rovnice tekutiny z Lagrangeho (particle-based) pohledu. Metoda pracuje na principu konvolučního filtrování, kdy bereme v potaz parametry jednotlivých částic a pomocí vyhlazovacích jader (smoothing kernel) interpolujeme veličiny, které je při sledování částic těžké určit.
2.3.1 Výpočet SPH Cílem je získání aproximované hodnoty skalární veličiny, kterou nám particle-based metoda přímo neposkytuje. Skaláry, které chceme znát, jsou hustota, tlak a teplota v každém místě tekutiny. Abychom tyto hodnoty pro konkrétní bod získali, vypočítáme vážený průměr z parametrů částic v okolí tohoto bodu. Předpokládáme existenci částicového systému P definovaného v první kapitole, jehož každá částice 𝑃𝑗 má danou svoji pozici v prostoru ⃗⃗⃗ 𝑥𝑗 a skalární veličinu Aj. Potom je možné pro libovolný bod v prostoru X [x, y, z] tuto veličinu interpolovat pomocí několika nejbližších částic užitím vyhlazovacího jádra W takto: 𝑘
𝐴(𝑋) = ∑ 𝑚𝑗 𝑗
𝐴𝑗 𝑊(|𝑋 − 𝑥𝑗 |, ℎ) , 𝜌𝑗
(2.3)
kde 𝜌𝑗 je hustota částice, mj je hmotnost částice a h je poloměr vyhlazovacího jádra. Pro každou částici 𝑃𝑗 vypočítáme její vzdálenost od bodu X (viz Obrázek 2.5). Když je vzdálenost menší než poloměr h, můžeme spočíst váhu částice 𝑃𝑗 pomocí vyhlazovacího jádra W
12
2. Teoretické základy simulace tekutin
(viz Obrázek 2.6). Pokud je vzdálenost větší, váha je nula [10]. Mezi nejčastěji používané vyhlazovací jádra patří Gaussian, B-Spline a Qspline [8].
Obrázek 2.5: Zjištění vzdáleností okolních částic od bodu X.
Obrázek 2.6: Výpočet váhy částice pomocí vyhlazovacího jádra W.
Je ale důležité si uvědomit, že SPH metoda má několik zásadních problémů. Při odvození rovnice tekutiny pro částice není zaručeno dodržení některých fyzikálních zákonitostí jako třeba souměrnost sil (symmetry of forces) nebo zachování hybnosti [2]. Výpočtem SPH se budu dále zabývat ve 3. kapitole v rámci simulace tekutiny pomocí fyzikálního enginu NVIDIA PhysX, který této metody využívá.
13
Kapitola 3
NVIDIA PhysX Při průzkumu funkcionality dostupných fyzikálních enginů jsem dospěl k závěru, že nejvhodnějším enginem pro simulaci tekutin je NVIDIA PhysX, neboť nabízí možnost výpočtu simulace v reálném čase prostřednictvím speciálního částicového systému.
3.1 PhysX SDK Middleware PhysX SDK (Software development kit), nyní ve verzi 3.x, je volně dostupný nástroj pro nekomerční i komerční účely s podporou pro tyto platformy: •
Microsoft Windows
•
Linux
•
Mac OS X
•
Android
•
Playstation
•
Microsoft Xbox Výpočty všech fyzikálních simulací obstarává CPU. Pokud je
ale zařízení vybaveno grafickou kartou NVIDIA GeForce, výpočet složitějších jevů (fluid dynamics, soft body dynamics) značně urychluje GPU akcelerace. S PhysX SDK je na platformě Microsoft Windows možné pracovat pouze prostřednictvím vývojového prostředí Microsoft Visual Studio (VS) 2008 nebo 2010 [11] se znalostí programovacího jazyka C++. Já jsem k práci použil verzi VS 2010 a k vykreslování grafického výstupu jsem zvolil knihovnu OpenGL. Použití samotné knihovny PhysX je poměrně složité, jelikož nastavení projektu ve VS 2010 vyžaduje přesné linkování knihovních souborů. I když SDK obsahuje uživatelskou příručku s odkazy na příklady použití jednotlivých částí funkcionality, způsob jak vytvořit
14
3. NVIDIA PhysX
nový projekt v ní popsán není. V začátcích mi velmi pomohl článek Getting started on PhysX 3.2.1 & OpenGL [12], který popisuje, jak knihovnu PhysX správně inicializovat a projekt nastavit. Nutno dodat, že tutoriál je napsaný pro verzi PhysX SDK 3.2.1, nicméně už ve verzi 3.3.0 jsou provedeny takové změny, že tutoriál není kompatibilní a nelze jej bez patřičných úprav použít. Práce s touto sadou nástrojů zahrnuje dvě části, které je potřeba udržovat konzistentní, aby se simulovaná fyzika a objekty vykreslované ve scéně chovaly správně. Knihovna OpenGL obstarává pouze vykreslení objektů. K fyzikální simulaci je potřeba mít jednak nastavené globální parametry (např. gravitace) a dále je třeba, aby každý vykreslovaný objekt měl definovaný svůj tvar (geometrii), materiál, váhu atp. Bez toho by se při spuštění animace mohlo např. stát, že kostka, na kterou působí gravitace, propadne skrz podlahu, čehož není vůbec těžké dosáhnout. V každé iteraci, kdy grafická knihovna renderuje další snímek pro zobrazení na obrazovku, dochází k výpočtu nové pozice objektů.
3.2 Vlastnosti PhysX SDK Základními objekty fyzikální simulace jsou scéna (PxScene) reprezentující fyzikální svět a tzv. aktéři (PxActor), což jsou prvky v tomto světě. Scéna je popsána několika parametry specifikovanými ve struktuře PxSceneDesc. Základním parametrem struktury je vektor gravitace (sceneDesc.gravity), dále pak objekt CpuDispatcher mapující jednotlivé simulační úkoly na procesní vlákna a objekt GpuDispatcher, který na platformě Windows slouží pro CUDA
akcelerované funkce. Gravitace je síla působící globálně v celé PhysX scéně. Aproximace reálné gravitace odpovídá vektoru (0.0, -9.81, 0.0).
15
3. NVIDIA PhysX
3.2.1 Materiály Všechny fyzikální objekty mají stanovený svůj materiál, který určují parametry tření (friction) a restituce (restitution). Ten je použit při kolizích objektů. Jednotliví aktéři ve scéně mohou být následujícího typu: •
pevná tělesa (PxRigidActor)
•
tkaniny (PxCloth)
•
částice (PxParticleBase)
Třída PxRigidActor PhysX nabízí dva typy pevných těles – statická tělesa (PxRigidStatic) a dynamická tělesa (PxRigidDynamic). Se statickými aktéry
se při simulaci nepracuje, jejich parametry zadané při vytváření zůstávají stejné, kdežto dynamičtí aktéři se v průběhu pohybují, ať už přičiněním uživatele, který uvádí aktéry do pohybu, nebo při automatické simulaci Newtonovské fyziky (zákon akce a reakce). Třída PxParticleBase Částicové systémy poskytují rozhraní pro manipulaci s částicemi a funkcionalitu při kolizích s okolím. Dělí se na obecný částicový systém
(PxParticleSystem)
a
částicový
systém
tekutin
(PxParticleFluid).
3.2.2 Parametry částicového systému Existují tři skupiny parametrů určující vlastnosti částicového systému: 1) neměnné parametry, ty je třeba definovat při vytváření a částicového systému. maxParticles
Maximální počet částic, které může systém obsahovat (čím je hodnota menší, tím menší má částicový systém nároky na paměť).
16
3. NVIDIA PhysX
PxParticleBaseFlag:: ePER_PARTICLE_REST_OFFSET
Příznak povolující/zakazující posun klidu po částicích.
2) měnitelné vlastnosti, ty je možné měnit pouze tehdy, když systém není součástí scény. maxMotionDistance
Maximální vzdálenost, kterou může částice urazit během jednoho kroku simulace (omezuje rychlost částice).
restOffset
Určuje nejmenší vzdálenost mezi částicemi a povrchem pevných těles, která je udržována kolizním systémem (ke kolizi částice s pevným tělesem dochází pro vzdálenosti menší, než jaká je tato hodnota).
contactOffset
Určuje vzdálenost, při které dochází ke kontaktu mezi částicemi a pevnými tělesy. Tento kontakt je interně používán k předcházení chvění a ulpívání částic. Je potřeba, aby vzdálenost byla větší než hodnota restOffset.
restParticleDistance (pouze pro částicový systém tekutin)
Určuje rozlišení (velikost) částice tekutiny (pokud je tekutina v klidu, částice mezi sebou mají právě tuto vzdálenost).
PxParticleBaseFlag::eGPU
Příznak povolující/zakazující GPU akceleraci.
PxParticleBaseFlag:: eCOLLISION_TWOWAY
Příznak povolující/zakazující obousměrnou interakci mezi části-cemi a pevnými tělesy.
17
3. NVIDIA PhysX
3) měnitelné vlastnosti, ty lze měnit kdykoli v průběhu simulace. restitution
Udává restituci pro kolizi částic.
dynamicFriction
Dynamické tření částic.
staticFriction
Statické tření částic.
damping
Konstanta tlumení rychlosti částic, která působí na každou částici (určuje, jak snadno se částice pohybuje prostorem).
externalAcceleration
Vektor zrychlení aplikovaného na každou částici. Podle výchozího nastavení se do tohoto vektoru započítává i vektor globální gravitace, což lze pro daný částicový systém zakázat příznakem PxActorFlag:: eDISABLE_GRAVITY.
particleMass
Hmotnost částic použita pro obousměrnou interakci s pevnými tělesy.
Stiffness (pouze pro částicový systém tekutin)
Určuje tuhost/pružnost tekutiny. Pro nízké hodnoty je tekutina více stlačitelná.
Viscosity (pouze pro částicový systém tekutin) PxParticleBaseFlag:: eENABLED
Určuje viskozitu tekutiny.
PxParticleBaseFlag:: ePROJECT_TO_PLANE
Pomocí tohoto příznaku lze omezit pohyb částic pouze v jedné rovině (2D).
Příznak povolující/zakazující simulaci částic.
Hodnoty jednotlivých parametrů použitých v demonstrační aplikaci zmiňuji v příloze bakalářské práce.
18
3. NVIDIA PhysX
Po nastavení parametrů a vytvoření aktéra částicového systému zbývá začít do scény přidávat částice. Jelikož ale PhysX SDK nemá vestavěný žádný emitor a nabízí pouze jednoduché rozhraní pro vytváření částic [11], implementoval jsem v rámci vývoje demonstrační aplikace emitory vlastní.
3.3 Postup při simulace tekutin Knihovna PhysX k výpočtu využívá SPH metodu, kterou jsem popsal v 2. kapitole, a simulaci provádí ve třech fázích [13]. 1) Jak ukazuje Obrázek 3.1, nejprve se ověří, jestli nedochází ke kolizi částic s okolním statickým prostředím a v případě nutnosti se přesunou částice mimo pevná tělesa.
Obrázek 3.1: Detekce kolizí se statickým okolím. Inspirováno článkem [13].
2) Zatímco první krok je totožný s chováním obecného částicového systému, v druhé fázi se odehrává hlavní SPH práce. Cílem je přivést částice k požadované hustotě, v níž jsou částice v klidu – nadále jen klidová hustota (rest density). Nicméně nejprve musíme definovat, co myslíme hustotou, a poté ji spočítat pro každou částici systému. Chceme, aby hustota každé částice byla ovlivňována počtem sousedních částic v určité vzdálenosti. Čím blíž je částice svým sousedům, tím větší chceme naměřit hustotu a také bychom rádi, aby se hustota hladce měnila během pohybu částic. Výpočet hustoty SPH metodou (viz Obrázek 3.2) si lze představit jako umísťování Gaussovy křivky na pozici každé
19
3. NVIDIA PhysX
částice a sčítání hodnot jednotlivých hodnot křivek. Následující graf ukazuje, jak výpočet vypadá v 1D prostoru. Osa X reprezentuje vzdálenost od počátku a osa Y hustotu.
Obrázek 3.2: Vypočet hustoty v jednorozměrném prostoru. Inspirováno článkem [13].
3) Jakmile známe hustotu všech částic, vypočte se v každé částici tlak. Ten PhysX počítá jako rozdíl hustoty a klidové hustoty (rest density). Po té dojde k aplikování sil k přemístění částic z oblasti s vysokým tlakem do oblasti, kde je tlak nízký, jak ukazuje obrázek 3.3.
Obrázek 3.3: Přesun částic z oblasti s vysokým tlakem, do oblasti, kde je tlak nízký. Inspirováno článkem [13].
20
3. NVIDIA PhysX
Výpočet se opakuje do té doby, než dojde k ustálení všech částic, tedy k uklidnění kapaliny (viz Obrázek 3.4). Výsledkem tohoto chování je věrohodné napodobení nestlačitelnosti kapaliny.
Obrázek 3.4: Ustálení částic. Inspirováno článkem [13].
21
Kapitola 4
Simulování tekutin pomocí NVIDIA PhysX 4.1 Simulace kapaliny Pro simulaci kapaliny jsem vytvořil jednoduchou scénu obsahující skleněnou nádobu, do které je možné kapalinu prostřednictvím emitoru nalévat a interagovat v ní s pevnými tělesy resp. vnějšími silami (míchání, naklánění nádoby, vlnění).
4.1.1 Emitor kapaliny Pro rychlejší práci s přidáváním částic kapaliny do scény jsem implementoval třídu LiquidEmitter. Při vytváření její instance stačí předat několik parametrů a pro spuštění emitoru pak už jen volat funkci LiquidEmitter::createParticles() někde ve vykreslovací smyčce OpenGL. Parametry emitoru kapaliny •
ukazatel na již existující částicový systém
•
maximální počet částic
•
pozice v prostoru, kde bude emitor ve scéně umístěn
•
vektor výchozí rychlosti částic
•
objem přitékající tekutiny (udává počet částic, které se při jednom zavolání LiquidEmitter::createParticles() do scény přidají)
•
tempo, s jakým budou částice vytvářeny
Poznámka: Částice se do scény nepřidávají při každém zavolání funkce LiquidEmitter::createParticles(), neboť by mohlo docházet ke kolizím
mezi částicemi vytvářejícími se velkou rychlostí na jednom místě (vzdálenost mezi nově vytvářenými částicemi by byla menší, než restParticleDistance). Aby se zabránilo nežádoucímu efektu, kdy se nové částice rozletí do všech směrů, obsahuje třída čítač, který zajišťuje vytvoření nových částic každé N-té zavolání zmíněné funkce (hodnotu N udává parametr tempa).
22
4. Simulování tekutin pomocí NVIDIA PhysX
4.1.2 Vizualizace kapaliny Abychom po spuštění simulace viděli, jak se částice ve scéně chovají, nejprve musíme stanovit způsob jejich vizualizace. Nejjednodušším způsobem zobrazení je vykreslení bodů na pozici jednotlivých částic systému. Další možností je vykreslovat na pozici částic kuličky, které budou mít poloměr roven velikosti částice restParticleDistance (popř. o trochu větší), což vizuálně dodá skupině částic objem. Vytvoření věrné vizualizace kapaliny je ale mnohem složitější, neboť potřebujeme z částic vytvořit souvislý povrch (hladinu), což není triviální a v implementaci se tím dále nezabývám. Pouze nastíním metody, které tento problém řeší.
4.1.3 Tvorba povrchu kapaliny Marching Cubes Prvním postupem je známý algoritmus Marching Cubes (metoda pochodující kostky). Algoritmus funguje na principu řezání krychle, která se pohybuje v 3D mřížce v prostoru, kde se vyskytují částice. Řezáním krychle na základě hustoty rozmístění částic v prostoru se vytváří trojúhelníková síť, která po skončení algoritmu vytvoří povrch okolo každého shluku částic. Princip algoritmu je zobrazen dvourozměrně na obrázku 4.1, kde dochází k řezání čtverce.
Obrázek 4.1: 2D znázorněný postup při algoritmu Marching Cubes.
23
4. Simulování tekutin pomocí NVIDIA PhysX
Nevýhodou algoritmu je jeho výpočetní náročnost, zvláště pak v případě, kdy se na obrazovce zobrazuje jenom část povrchu, který algoritmus počítá. Screen Space Fluid Rendering Rychlejším způsobem je metoda Screen Space Fluid Rendering, která pracuje pouze v oblasti zobrazené na obrazovce a tvoří jen povrch, který je nejblíž kameře (zadní plochy stejně nejsou vidět). Princip tvorby hladiny tekutiny je vidět na obrázku 4.2. Detailně je algoritmus popsán v článku Screen Space Meshes [14].
Obrázek 4.2: Znázornění principu metody Screen Space Fluid Rendering.
4.1.4 Funkcionalita v demonstrační aplikaci Tvorba částic kapaliny Demonstrační aplikace simuluje nalévání kapaliny do průhledné nádoby ve tvaru krychle. Obsahuje přepínač, který zapíná/vypíná emitor částic a je možné libovolně částice přidávat až do dosažení maximálního počtu částic. Interakce s pevnými tělesy Do scény lze přidávat pevná tělesa, konkrétně jsou to krychličky těžší než kapalina, takže po vhození do kapaliny zůstávají na dně.
24
4. Simulování tekutin pomocí NVIDIA PhysX
Simulace míchání Aplikace obsahuje přepínač pro zapnutí/vypnutí simulace odstředivé síly při míchání krouživým pohybem s nádobou. Simulace vlnění Pomocí příslušného přepínače je možné zapnout/vypnout pohyb jedné ze stěn nádoby, ve které se částice kapaliny nachází. Stěna kmitá v jedné ose a kolize s kapalinou simulují tvorbu vln. Mód vykreslování Implementovány jsou dva módy vykreslování. Buď je možné částice vykreslovat jako body, které jsou zbarvené podle směru, v němž se pohybují (šedé, pokud se nehýbou), což je vidět na obrázku 4.3. Nebo jsou částice zobrazeny jako kuličky v odstínech modré barvy v závislosti na rychlosti pohybu částice (viz Obrázek 4.4). Pro přepínání módů slouží vlastní přepínač.
Obrázek 4.3: Částice jsou vykreslovány jako body.
25
4. Simulování tekutin pomocí NVIDIA PhysX
Obrázek 4.4: Částice jsou vykreslovány jako kuličky.
4.2 Simulace kouře Hlavní rozdíl oproti simulaci kapaliny je ten, že plynové částice přidávané do scény by se pro dosažení věrohodného pohybu v prostoru měly rozptylovat ve vzduchu. Tedy mezi částicemi, které nejsou vidět. Jelikož je nemožné simulovat veškerý vzduch ve scéně, jsou dvě možnosti, jak docílit dostatečně věrohodného a zároveň výpočetně nenáročného výsledku. Pro obě možnosti jsem implementoval vlastní emitory.
4.2.1 Emitory kouře Podobně jako pro kapalinu jsem implementoval pro simulaci kouře tyto dvě třídy:
AirSmokeEmitter VacuumSmokeEmitter
AirSmokeEmitter V prvním případě určíme ve scéně oblast (definovanou pěti plochami – podlaha a čtyři stěny), ve které budeme pracovat a tu vyplníme částicemi vzduchu. Je třeba definovat speciální parametr pro jednotlivé částice a to temperature (teplotu).
26
4. Simulování tekutin pomocí NVIDIA PhysX
Všechny vzduchové částice budou mít hodnotu 0.0, kdežto nové částice budou mít teplotu nastavenu na 1.0 a postupně se budou při rozptylování do okolí "ochlazovat", až se jejich hodnota ustálí na nule. Z hlediska vykreslování pak jednoduše určíme, že viditelné budou pouze ty částice, které mají teplotu vyšší jak 0.0. Jak budou částice vypadat v průběhu klesání teploty, už záleží na tom, jaký výsledek očekáváme (v případě kouře se může např. lineárně zvyšovat průhlednost částice resp. její textury). VacuumSmokeEmitter V druhém případě můžeme vzduchové částice zanedbat a simulaci provádět pouze s částicemi, které jsou vidět. Zavedením parametru lifespan (délka života), který nahrazuje teplotu, se výrazně sníží
nároky na paměť, neboť částice, které naplní svoji délku života, jsou z částicového systému propuštěny. Obdobně jako v prvním případě se částice vytvořené emitorem rozptylují v prostoru a mění se s narůstající délkou života podle toho, jak určíme. Tento způsob je sice rychlejší, ale simulace je tím zkreslená a může docházet k nepřiro-zenému chování kouře. Parametry emitoru kouře Parametry emitoru jsou stejné jako u emitoru kapaliny s tím rozdílem, že VacuumSmokeEmitter má navíc parametr určující maximální délku života částic.
4.2.2 Vizualizace kouře Existuje hned několik metod, pomocí kterých lze vykreslovat věrohodný kouř. Já jsem pro demonstraci zvolil střední cestu, ta není náročná na výpočet a výsledek vypadá dostatečně věrohodně. Použil jsem 2D texturu (viz Obrázek 4.5) společně s billboardingem a alphablendingem.
27
4. Simulování tekutin pomocí NVIDIA PhysX
Obrázek 4.5: Pro vykreslování kouře jsem použil texturu Perlinova šumu s postupným přechodem do černé barvy při okrajích.
Billboarding je technika, při které na 2D ploše zobrazujeme texturu, přičemž je tato plocha vždy natočená směrem ke kameře (viz Obrázek 4.6). Tím v 3D prostoru tvoří iluzi, že vypadá ze všech úhlů stejně. Tato technika se dříve používala např. pro vykreslování stromů, kvůli zjednodušení jejich členitosti.
Obrázek 4.6: Znázornění principu billboardingu.
28
4. Simulování tekutin pomocí NVIDIA PhysX
Alpha-blending je způsob, jak dosáhnout průhlednosti textury, což je v případě kouře vhodné ke zjemnění okrajů textury. Při
použití
textury
na
obrázku
4.5
a
nastavením
glBlendFunc(GL_ONE, GL_ONE); dosáhneme toho, že černé pozadí
se stane průhledným a zůstane pouze bílý obláček. Když poté na pozici každé částice vykreslíme v rozumné velikosti plochu s texturou, dosáhneme při překrývání obláčků požadovaného výsledku. Uskupení částic pohybujících se prostorem poté vypadá jako kouř resp. vodní pára. Výsledek je vidět na obrázku 4.7. Mezi další vizualizační techniky patří např. volumetrický kouř, který působí velmi reálně a jeho použití je vhodné především tehdy, když se kamerou přibližujeme k částicím, nebo dokonce prolétáváme skrz kouř. Tato technika je sice výpočetně náročnější, při výkonech dnešních grafických karet se ale v real-time interaktivních aplikacích běžně používá.
4.2.3 Funkcionalita v demonstrační aplikaci Tvorba částic kouře Demonstrační aplikace simuluje vznik kouře v daném místě ve scéně. Obsahuje přepínač, který zapíná/vypíná emitor, díky čemuž lze libovolně částice přidávat. Během života částic jejich viditelnost postupně slábne, až jsou ze scény zcela odstraněny (v případě nepřetržitě zapnutého emitoru nahrazeny částicemi novými). Interakce s pevnými tělesy Je možné do scény přidávat pevná tělesa, které interagují s částicemi kouře resp. vzduchu a rozptylují tak částice ve svém směru pohybu. Mód vykreslování V případě kouře jsou implementovány dva módy vykreslování. Buď lze částice zobrazovat jednoduše jako body, nebo je na pozicích částic zobrazena textura způsobem popsaným výše – pomocí billboardingu a alpha-blendingu (viz Obrázek 4.7). Pro přepínání mezi jednotlivými módy slouží vlastní přepínač.
29
4. Simulování tekutin pomocí NVIDIA PhysX
Obrázek 4.7: Vykreslování bodů ve srovnání s použitím textury.
30
Závěr Bakalářská práce se zabývá real-time simulací tekutin ve virtuální prostředí. Vysvětluje základní principy a metody, jak dosahovat věrohodných výsledků, a poskytuje řešení pomocí fyzikálního enginu NVIDIA PhysX a grafické knihovny OpenGL. Výsledkem je demonstrační aplikace napsaná v programovacím jazyce C++, která ukazuje real-time simulaci kapaliny resp. kouře a jejich interakci s pevnými tělesy a okolním prostředím. Demonstrační aplikace nejenom že ukazuje základní práci s objekty ve scéně a jejich fyzikou, ale také rozšiřuje funkcionalitu samotného fyzikálního enginu o emitory (třídy, které jsou implementovány a v práci popsány). Díky tomu je přidávání částic do částicového systému a celková správa částic mnohem jednodušší. Zdrojový kód aplikace by mohl sloužit jako podhoubí např. pro zásuvný modul do systému VRECKO vyvíjeného HCI laboratoří na FI MU, který by rozšiřoval funkcionalitu systému o možnost tvorby tekutin.
31
Literatura [1]
ŽÁRA, J.; BENEŠ, B.; SOCHOR, J.; FELKEL, P. Moderní počítačová grafika. Vyd. 2. Brno: Computer Press, a.s., © 2010. ISBN 80-251-0454-0.
[2]
MÜLLER, M.; CHARYPAR, D.; GROSS, M. Particle-Based Simulation for Interactive Applications. Switherland: Department of Computer Science, Federal Institute of Technology Zürich, © 2003.
[3]
Havok Physics [online], [cit. 13. 12. 2014], Havok.com Inc, Dostupné z:
.
[4]
PhysX SDK [online], [cit. 8. 12. 2014], NVIDIA Developer Zone, Dostupné z: .
[5]
Viscosity [online], [cit. 8. 12. 2014], Encyclopædia Britannica, Inc.,
Dostupné
z:
EBchecked/topic/630428/viscosity>. [6]
BRIDSON, R. Fluid Simulation for Computer Graphics. Wellesley: A K Peters Ltd., © 2008, ISBN 978-1-56881-326-4.
[7]
Divergence [online], [cit. 12. 12. 2014], Wikipedia®, Dostupné z: .
[8]
ERLEBEN,
K.;
DOHLMANN, H.
SPORRING, Physics-based
J.;
HENRIKSEN,
Animation.
K.;
Hingham,
Massachusetts: Charles River Media, INC., © 2005, ISBN 1-58450-380-7 [9]
MONAGHAN, J. Smoothed Particle Hydrodynamics. Annual Review of Astronomy and Astrophysics, 30:543-574, 1992.
[10] WANG, W.; JIANG, Z.; QIU, H.; Li, W. Real-Time Simulation of Fluid Scenes by Smoothed Particle Hydrodynamics and Marching Cubes. In Mathematical Problems in Engineering; Hindawi Publishing Corporation: Beijing, China, © 2012. [11] NVIDIA Corporation. NVIDIA PhysX SDK Documentation. Santa Clara, CA 95050 U.S.A., © 2013 [cit. 8. 12. 2014].
32
[12] Getting
started
on
[cit. 8. 12. 2014],
PhysX
3.2.1
&
devKast,
OpenGL
[online],
Dostupné
z:
. [13] Fluid
Simulation
[cit. 8. 12. 2014],
in
Alice:
NVIDIA
Madness
Developer
Returns
Zone,
[online],
Dostupné
z:
. [14] MÜLER, M.; SCHIRM, S.; DUTHALER, S. Screen Space Meshes; In Eurographics/ACM SIGGRAPH Symposium on Cumputer Animation; Metaxas,D; Popovic, J., Eds.; Association for Computing Machienery, Inc: San Diego, California, USA, © 2007.
33
Přílohy Zip archiv s přílohou obsahuje:
Instrukce pro použití demonstrační aplikace
Výpis hodnot parametrů částicových systémů použitých pro jednotlivé simulace
Zdrojový projekt VS 2010
Video ukazující funkcionalitu demonstrační aplikace
Snímky z demonstrační aplikace
34