Techniky simulace tekutin



Podobné dokumenty
INOVACE ODBORNÉHO VZDĚLÁVÁNÍ NA STŘEDNÍCH ŠKOLÁCH ZAMĚŘENÉ NA VYUŽÍVÁNÍ ENERGETICKÝCH ZDROJŮ PRO 21. STOLETÍ A NA JEJICH DOPAD NA ŽIVOTNÍ PROSTŘEDÍ

Počítačová dynamika tekutin (CFD) Základní rovnice. - laminární tok -

11 Zobrazování objektů 3D grafiky

BIOMECHANIKA DYNAMIKA NEWTONOVY POHYBOVÉ ZÁKONY, VNITŘNÍ A VNĚJŠÍ SÍLY ČASOVÝ A DRÁHOVÝ ÚČINEK SÍLY

Dynamika tekutin popisuje kinematiku (pohyb částice v času a prostoru) a silové působení v tekutině.

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

Mechanika tekutin. Hydrostatika Hydrodynamika

Počítačová dynamika tekutin (CFD) Turbulence

Počítačová dynamika tekutin (CFD) - úvod -

Proudění vzduchu v chladícím kanálu ventilátoru lokomotivy

BIOMECHANIKA. Studijní program, obor: Tělesná výchovy a sport Vyučující: PhDr. Martin Škopek, Ph.D.

FLUENT přednášky. Metoda konečných objemů (MKO)

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

KAPALINY. Mgr. Jan Ptáčník - GJVJ - Fyzika - Sekunda

Numerické modelování interakce proudění a pružného tělesa v lidském vokálním traktu

VY_32_INOVACE_INF.19. Inkscape, GIMP, Blender

Příspěvek do konference STČ 2008: Numerické modelování obtékání profilu NACA 0012 dvěma nemísitelnými tekutinami

Dynamika vázaných soustav těles

MECHANIKA KAPALIN A PLYNŮ. Mgr. Jan Ptáčník - GJVJ - Fyzika - Mechanika - 1. ročník

Propojení matematiky, fyziky a počítačů

Mechanika kontinua. Mechanika elastických těles Mechanika kapalin

ČVUT v Praze Fakulta stavební Katedra Technických zařízení budov. Modelování termohydraulických jevů 3.hodina. Hydraulika. Ing. Michal Kabrhel, Ph.D.

Modelování zdravotně významných částic v ovzduší v podmínkách městské zástavby

Potenciální proudění

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

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

Proudění viskózní tekutiny. Renata Holubova Viskózní tok, turbulentní proudění, Poiseuillův zákon, Reynoldsovo číslo.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ PRŮVODCE GB01-P02 DYNAMIKA HMOTNÉHO BODU

Buněčné automaty a mřížkové buněčné automaty pro plyny. Larysa Ocheretna

1 Rozdělení mechaniky a její náplň

Mechanika tekutin. Tekutiny = plyny a kapaliny

Seriál II.II Vektory. Výfučtení: Vektory

4. Kolmou tlakovou sílu působící v kapalině na libovolně orientovanou plochu S vyjádříme jako

5b MĚŘENÍ VISKOZITY KAPALIN POMOCÍ PADAJÍCÍ KULIČKY

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

Výsledný tvar obecné B rce je ve žlutém rámečku

Defektoskopie. 1 Teoretický úvod. Cíl cvičení: Detekce měřicího stavu a lokalizace objektu

Obr. 141: První tři Bernsteinovy iontové módy. Na vodorovné ose je bezrozměrný vlnový vektor a na svislé ose reálná část bezrozměrné frekvence.

Skalární a vektorový popis silového pole

6. Mechanika kapalin a plynů

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

Počítačová grafika RHINOCEROS

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

5. Stanovení tíhového zrychlení reverzním kyvadlem a studium gravitačního pole

7. MECHANIKA TEKUTIN - statika

MATEMATIKA V MEDICÍNĚ

Experimentální realizace Buquoyovy úlohy

Simulace mechaniky tuhých těles v reálném čase

Středoškolská technika 2017 PROGRAMY PRO PROSTOROVÉ ZOBRAZOVÁNÍ NĚKTERÝCH TĚLES

Programátorská dokumentace

Měření tíhového zrychlení matematickým a reverzním kyvadlem

Fyzikální vzdělávání. 1. ročník. Učební obor: Kuchař číšník Kadeřník. Implementace ICT do výuky č. CZ.1.07/1.1.02/ GG OP VK

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

3D Vizualizace muzea vojenské výzbroje

Co je grafický akcelerátor

Jana Dannhoferová Ústav informatiky, PEF MZLU

Obsah. Proč právě Flash? 17 Systémové požadavky 17. Jak používat tuto knihu 18 Doprovodný CD-ROM 19

Typy geometrie v. Rhinu. Body

Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/ Vlnění

( LEVEL 2 něco málo o matematickém popisu, tvorbě simulačního modelu a práci s ním. )

Počítačová grafika III Úvod

StatSoft Jak poznat vliv faktorů vizuálně

zdroj světla). Z metod transformace obrázku uvedeme warping a morfing, které se

VISKOZITA A POVRCHOVÉ NAPĚTÍ

vztažný systém obecné napětí předchozí OBSAH další

NUMERICKÝ MODEL NESTACIONÁRNÍHO PŘENOSU TEPLA V PALIVOVÉ TYČI JADERNÉHO REAKTORU VVER 1000 SVOČ FST 2014

4. Napjatost v bodě tělesa

Studentská tvůrčí činnost 2009

Colloquium FLUID DYNAMICS 2007 Institute of Thermomechanics AS CR, v. v. i., Prague, October 24-26, 2007 p.1

Implementace systémů HIPS: historie a současnost. Martin Dráb

Animace a geoprostor. První etapa: Animace 2. přednáško-cvičení. Jaromír Landa. jaromir.landa@mendelu.cz Ústav informatiky PEF MENDELU v Brně

Tvorba 3D výukových aplikací pomocí technologie

APLIKACE SIMULAČNÍHO PROGRAMU ANSYS PRO VÝUKU MIKROELEKTROTECHNICKÝCH TECHNOLOGIÍ

Měření průtoku kapaliny s využitím digitální kamery

STRUKTURA A VLASTNOSTI KAPALIN

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 38 KONTROLA A POHONY]

Webové stránky. 16. Obrázky na webových stránkách, optimalizace GIF. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

Měření závislosti indexu lomu kapalin na vlnové délce

Počítačová dynamika tekutin užitečný nástroj pro inženýry

SPŠ NA PROSEKU. Počítačová 3D grafika. Daniel Beznoskov IT A

VÝUKOVÝ SOFTWARE PRO ANALÝZU A VIZUALIZACI INTERFERENČNÍCH JEVŮ

Stanovení nejistot při výpočtu kontaminace zasaženého území

ZŠ ÚnO, Bratří Čapků 1332

Realtime zobrazování vodní hladiny na dnešních GPU. Jan Horáček

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

Počítačová dynamika tekutin (CFD) Řešení rovnic. - metoda konečných objemů -

Studentská tvůrčí činnost D modelování vírových struktur v rozváděcí turbínové lopatkové mříži. David Jícha

Automatické rozpoznávání dopravních značek

13 Barvy a úpravy rastrového

Název DUM: VY_32_INOVACE_2B_16_ Tvorba_grafů_v_MS_Excel_2007

Termika. Nauka o teple se zabývá měřením teploty, tepla a tepelnými ději.

Fyzika kapalin. Hydrostatický tlak. ρ. (6.1) Kapaliny zachovávají stálý objem, nemají stálý tvar, jsou velmi málo stlačitelné.

Vlastnosti kapalin. Povrchová vrstva kapaliny

Stacionární 2D výpočet účinnosti turbínového jeden a půl stupně

Počítačové zobrazování fraktálních množin. J. Bednář*, J. Fábera**, B. Fürstová*** *Gymnázium Děčín **SPŠ Hronov ***Gymnázium Plasy

Od kvantové mechaniky k chemii

12. VISKOZITA A POVRCHOVÉ NAPĚTÍ

Transportní jevy v plynech Reálné plyny Fázové přechody Kapaliny

2 Tokové chování polymerních tavenin reologické modely

Hydromechanické procesy Obtékání těles

Transkript:

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 Navier- Stokesova, 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, kaustika 1 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ů. 1 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). 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 tekutin 2, 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. 2 Ve fyzice je dynamika tekutin poddisciplínou mechaniky tekutin, která se zabývá pohybem (tokem) kapalin a plynů. 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í pluginy 3 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 x j, o své rychlosti u j 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 Navier Stokesovou rovnicí (soustava parciálních diferenciálních rovnic). Rovnice je obyčejně zapsána jako [6]: u t + u u + 1 p = g + v u, ρ u = 0. (2.1) (2.2) Kde je operátor gradientu 4, 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: u... rychlost proudění tekutiny ρ... hustota tekutiny (pro vodu přibližně 1 000 kg/m 3, pro vzduch přibližně 1.3 kg/m 3 ) p... tlak (síla plošné jednotky, která působí na okolí) g... gravitační zrychlení (obyčejně (0.0, -9.81, 0.0) m/s 2, za předpokladu, že osa Y směřuje vertikálně nahoru) v... 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 x a rychlosti u, 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 P j má danou svoji pozici v prostoru x j 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: k A(X) = m A j j W( X x ρ j, h), j j (2.3) kde ρ j je hustota částice, mj je hmotnost částice a h je poloměr vyhlazovacího jádra. Pro každou částici P j 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 P j 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 Q- spline [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 (PxRigid- Static) 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 contactoffset restparticledistance (pouze pro částicový systém tekutin) 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). 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. 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 dynamicfriction staticfriction damping externalacceleration particlemass Stiffness (pouze pro částicový systém tekutin) Viscosity (pouze pro částicový systém tekutin) PxParticleBaseFlag:: eenabled PxParticleBaseFlag:: eproject_to_plane Udává restituci pro kolizi částic. Dynamické tření částic. Statické tření částic. Konstanta tlumení rychlosti částic, která působí na každou částici (určuje, jak snadno se částice pohybuje prostorem). 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. Hmotnost částic použita pro obousměrnou interakci s pevnými tělesy. Určuje tuhost/pružnost tekutiny. Pro nízké hodnoty je tekutina více stlačitelná. Určuje viskozitu tekutiny. Příznak povolující/zakazující simulaci částic. Pomocí tohoto příznaku lze omezit pohyb částic pouze v jedné rovině (2D). 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