Realistisk simulering och visualisering av uider



Relevanta dokument
Inledning. Kapitel Bakgrund. 1.2 Syfte

Simulering och visualisering av en Eulerisk fluid på grafikkortet

SF1626 Flervariabelanalys Tentamen Tisdagen den 7 juni 2016

SF1626 Flervariabelanalys Lösningsförslag till tentamen DEL A

FFM234, Datoruppgift 2: Värmeledning

Gel esimulering 22 mars 2008

Integraler av vektorfalt. Exempel: En partikel ror sig langs en kurva r( ) under inverkan av en kraft F(r). Vi vill

Elektromagnetiska falt och Maxwells ekavtioner

23 Konservativa fält i R 3 och rotation

TANA17 Matematiska beräkningar med Matlab

Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism. Inledning. Fysikalisk bakgrund

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Poissons ekvation och potentialteori Mats Persson

Vectorer, spannet av vektorer, lösningsmängd av ett ekvationssystem.

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara

SF1626 Flervariabelanalys Tentamen Måndagen den 21 mars 2016

FFM232, Klassisk fysik och vektorfält - Veckans tal

MMA132: Laboration 2 Matriser i MATLAB

SF1626 Flervariabelanalys Tentamen Tisdagen den 12 januari 2016

Tentamen i Beräkningsvetenskap I (nya versionen), 5.0 hp, Del A

z = 4 + 3t P R = (5 + 2t, 4 + 2t, 4 + 3t) (1, 1, 3) = (4 + 2t, 3 + 2t, 1 + 3t)

ANDREAS REJBRAND Elektromagnetism Coulombs lag och Maxwells första ekvation

TMA226 datorlaboration

Linjär Algebra, Föreläsning 8

Integraler av vektorfält Mats Persson

Mer om analytisk geometri

1 x. SF1626 Flervariabelanalys Lösningsförslag till tentamen DEL A

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht Block 5, översikt

δx 1, (1) u 1 + u ) x 1 där den andra termen är hastighetsförändringen längs elementet.

SF1626 Flervariabelanalys Bedömningskriterier till tentamen Tisdagen den 7 juni 2016

1. (Dugga 1.1) (a) Bestäm v (3v 2u) om v = . (1p) and u =

FFM234, Klassisk fysik och vektorfält - Föreläsningsanteckningar

TERMODYNAMIK? materialteknik, bioteknik, biologi, meteorologi, astronomi,... Ch. 1-2 Termodynamik C. Norberg, LTH

Flervariabelanalys och Matlab Kapitel 4

FFM232, Klassisk fysik och vektorfält - Föreläsningsanteckningar

Linjär Algebra, Föreläsning 2

Tentamen i Beräkningsvetenskap II, 5.0 hp, Del A

y + 1 y + x 1 = 2x 1 z 1 dy = ln z 1 = x 2 + c z 1 = e x2 +c z 1 = Ce x2 z = Ce x Bestäm den allmänna lösningen till differentialekvationen

Obligatoriska uppgifter i MATLAB

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Hydrodynamik Mats Persson

1 Materiell derivata. i beräkningen och så att säga följa med elementet: φ δy + δz. (1) φ y Den materiella derivatan av φ definierar vi som.

u av funktionen u = u(x, y, z) = xyz i punkten M o = (x o, y o, z o ) = (1, 1, 1) i riktningen mot punkten M 1 = (x 1, y 1, z 1 ) = (2, 3, 1)

1 Vektorer och tensorer

SKRIVNING I VEKTORGEOMETRI

Lösningsskiss för tentamen Vektorfält och klassisk fysik (FFM232)

Allmant behover vi tre parametrar u 1 u 2 u 3 for att beskriva engodtycklig punkt i rummet. Vi kan

Repetitionsfrågor: 5DV154 Tema 4: Förbränningsstrategier för raketer modellerade som begynnelsevärdesproblem

SF1626 Flervariabelanalys

Absolutstabilitet. Bakåt Euler Framåt Euler

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Kroklinjiga koordinater och räkning med vektoroperatorer. Henrik Johanneson/(Mats Persson)

0.31 = f(x 2 ) = b 1 + b 2 (x 3 x 1 ) + b 3 (x 3 x 1 )(x 3 x 2 ) = ( ) + b 3 ( )(

Institutionen för matematik SF1626 Flervariabelanalys. Lösningsförslag till tentamen Måndagen den 5 juni 2017 DEL A

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

Tentamen i Teknisk-Vetenskapliga Beräkningar

2. Lös ekvationen z i = 2 z + 1 och ge i det komplexa talplanet en illustration av lösningsmängden.

Ordinära differentialekvationer,

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Torsdagen den 4 juni 2015

Byggnationen av Cheopspyramiden - ett visualiseringsprojekt. Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson

Numeriska metoder för ODE: Teori

Stora bilden av Linjära algebran. Vektorrum, linjära transformationer, matriser (sammanfattning av begrepp)

Föreläsningsanteckningar Linjär Algebra II Lärarlyftet

Vektorgeometri för gymnasister

FFM234, Klassisk fysik och vektorfält - Föreläsningsanteckningar

Subtraktion. Räkneregler

Dagens ämnen. Linjära ekvationssystem: Successiv elimination Vektorer Definitionen Grundläggande räkneoperationer Bas och koordinater Ortsvektorer

Inlämningsuppgift 4 NUM131

Linjära ekvationer med tillämpningar

Vinjetter TDDC91 Datastrukturer och algoritmer

2+t = 4+s t = 2+s 2 t = s

17.10 Hydrodynamik: vattenflöden

LEONARDO DA VINCI ( )

MULTIPLIKATION AV MATRISER, BASER I RUMMET SAMT FÖRSTA MÖTET MED MATRISINVERSER = = =

Tentamen i matematik. f(x) = ln(ln(x)),

TMV166 Linjär algebra för M. Datorlaboration 2: Matrisalgebra och en mekanisk tillämpning

Tentamen i TATA43 Flervariabelanalys

SF1626 Flervariabelanalys Tentamen Torsdagen den 18 augusti 2016

Reglerteori. Föreläsning 11. Torkel Glad

= 0. Båda skärningsvinklarna är således π/2 (ortogonala riktningsvektorer).

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Där a = (1, 2,0), b = (1, 1,2) och c = (0,3, 1) Problem 10. Vilket är det enda värdet hos x för vilket det finns a och b så att

Oändligtdimensionella vektorrum

Laboration 4. Numerisk behandling av integraler och begynnelsevärdesproblem

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

Numeriska metoder för ODE: Teori

Uppgift 1. Minimeringsproblemet löses med en Monte Carlo algoritm:

Föreläsning 14: Exempel på randvärdesproblem. LU-faktorisering för att lösa linjära ekvationssystem.

SF1626 Flervariabelanalys Tentamen 14 mars 2011,

Geometriska vektorer

FFM234, Klassisk fysik och vektorfält - Föreläsningsanteckningar

Provet består av Del I, Del II, Del III samt en muntlig del och ger totalt 76 poäng varav 28 E-, 24 C- och 24 A-poäng.

Linjär algebra på några minuter

Jordbävningar en enkel modell

Kvalificeringstävling den 30 september 2008

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

14. Minsta kvadratmetoden

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Banach-Tarskis paradox

Transkript:

Realistisk simulering och visualisering av uider Linköpings Universitet 9-- ITN, VT9 TNM85 Modelleringsprojekt Mihai Aldén, Lam Chan, Marcus Olsson & Max Popescu mihal95@student.liu.se, yuech476@student.liu.se, marol456@student.liu.se & maxpo45@student.liu.se

Sammanfattning I dagens Hollywood-produktioner används ofta vattensimuleringar då det är svårt att hantera riktigt vatten under inspelning. Framförallt är det inte kontrollerbart. I många fall är det helt enkelt omöjligt att få vatten att uppföra sig som manus kräver. Under projektets gång har vi har lyckats göra en realistisk simulering av vatten med hjälp av Navier-Stokes-ekvationerna, level set-metoden, voxelklassiciering och implicita ytor för att denera uidvolymen. För att visualisera uidvolymens yta används en metod som heter Marching Cubes. Metoden triangulerar mellan uidvoxlar för att generera punkter som denerar de polygoner som bygger upp ytan. Sedan exporteras den geometriska ytan, för varje tidssteg i simulationen, till objekt ler (.obj) för vidare behandling i Autodesk D Studio Max.

Förord Detta är ett projekt i kursen TNM85 Modelleringsprojekt som pågått under sju veckor. Civilingenjörsprogrammet i Medieteknik, tredje året, Linköpings Universitet. Vi vill tacka Ola Nilsson (LiU Graphics Group) för utmärkt handledning, tålamod och en perfekt beskrivning av både Navier-Stokes ekvationerna och level set metoden i sin helhet.

Innehållsförteckning Inledning. Syfte...................................... Metod. Beteckningar.................................. Voxlar och voxelrymden............................ Fluidvolymen..................................4 Tidssteget................................... Navier-Stokes-ekvationerna 4. Yttre krafter.................................. 4. Advektion................................... 5. Diusion.................................... 6.4 Projektion................................... 6.5 Dirichlet gränsvillkor............................. 9 4 Level set-metoder 4. Implicita ytor................................. 4. Logiska operatorer.............................. 4. Advektion................................... 4.4 Utvidgning av hastighetsfältet........................ 4.5 Dissipation.................................. 5 Implementering 4 5. Simuleringen.................................. 4 5. Export..................................... 4 5. Postproduktion................................ 4 6 Resultat 5 7 Diskussion 6 7. Förbättringar................................. 6 Litteraturförteckning 7 A Simuleringsprogrammet 8

Figurer. Voxlar och voxelrymden............................ Illustration av advektionssteget........................ 5. Illustration av öde mellan voxlar....................... 7. Illustration av öde vid solida voxlar..................... 8.4 Innan applikation av Dirichlet gränsvillkor.................. 9.5 Applikation av Dirichlets gränsvillkor..................... 9 4. Explicit representation av en cirkel...................... 4. Implicit representation av en cirkel...................... 4. Logiska operatorer............................... 5. Simulering till lm............................... 4 6. Vatten i glastank................................ 5 A. DFluidSim.................................. 8

Kapitel Inledning Fluidsimuleringar är ett område som det har lagts mycket tid och energi på att förstå och visualisera på ett visuellt tillfredsställande sätt. Trots det nns det många problem som fortfarande saknar bra lösningar. I det här projektet undersöker vi de mest grundläggande koncepten för visualisering av uidsimuleringar och vilka problem som existerar. Att modellera vattenpartiklar för hand är i princip omöjligt pågrund av komplexiteten av ett vattenöde. Det behövs alltså en metod för att simulera vatten på ett trovärdigt och eektfullt sätt, som samtidigt är kontrollerbart till en väldigt hög grad.. Syfte Detta arbete ger en inblick i hur man representerar en verklighetstrogen vätska med hjälp av fysikaliska samband och modeller tillsammans med dagens visualiseringstekniker.

Kapitel Metod. Beteckningar I rapporten betecknas vektorer i fetstil, vektorfält med versaler och fetstil och skalärer med gemener.. Voxlar och voxelrymden För att kunna representera diskreta värden i tre dimensioner måste vi först deniera ett rum som vi kan använda i vår simulering. Ett tredimensionellt rutnät hjälper oss att diskretisera rummet genom att dela upp rummet i lika stora volymelement. Volymelementen kallar vi för voxlar och det hela diskretiserade rummet för voxelrymd, se gur.. DimY En voxel DimZ DimX y Voxelrymd z x Figur.: Voxlar och voxelrymden Beroende på hur vi denierar voxelrymden är det möjligt att ge voxlarna olika sidlängder. I vår simulering räknar vi på voxlar som kuber med sidlängden, ( x = y = z = ).

En högre voxelrymdsupplösning resulterar i en mer detaljerad simulering men det ökar även antalet beräkningar.. Fluidvolymen I vår voxelrymd denierar vi uidvolymen med level set-metoden (se kapitel ). Fluidvolymen deformeras och rör sig enligt hastighetsfältet V som beräknas vid diskreta tidpunkter t i voxelrymden med Navier-Stokes-ekvationer (se kapitel ). Hastighetsfältet uppdateras enligt följande steg, som förklaras i detalj i senare kapitel externa krafter advektion V V utvidgning av hastigheter V 5 V V t. diffusion V dirichlet villkor projektion V 4 V 4 dirichlet villkor.4 Tidssteget Många partiella dierentialekvationer (PDE) löses explicit i vår metod, därför är de inte stabila för alla tidssteg. På grund av detta måste vi räkna ut ett stabilt tidssteg t enligt Courant Friedrichs Lewy-villkoret (CFL). CFL säger att t ska vara tillräckligt liten för att den största föryttningen i hastighetsfältet ska vara mindre än sidlängden av en voxel, enligt ekvation (.). t = C x max V (.) där C är en konstant som skalar om CFL-tidssteget för att simulera mindre förändringar. I vår simulering har vi funnit att ett bra värde på C ligger mellan.5 och.7. t kommer att minska för stora hastigheter vilket resulterar i att vi inte missar små förändringar i hastighetsfältet.

Kapitel Navier-Stokes-ekvationerna Målet med vår simulering är att få en fysikaliskt korrekt modell av hur en uid rör sig och interagerar med andra solida objekt eller andra uider. Den allmänt vedertagna metoden för att simulera uider är med hjälp av Navier-Stokes-ekvationerna (.) som beskriver uidens hastighetsfält för godtyckliga tidpunkter. V t = (V ) V p ρ + v V + F (.) I ekvation (.) är V ett vektorfält som representerar hastighetsfältet för vår uid, p är ett skalärfält som representerar trycket, koecienten υ är uidens viskositet och F är ett vektorfält som representerar de externa krafter som verkar på uiden. är nablaoperatorn som är denierat enligt = (δ/δx, δ/δy, δ/δz) och Laplaceoperatorn = = (δ /δx, δ /δy, δ /δz ). Vi förenklar problemet genom att anta att vår vätskevolym är inkompressibel, det vill säga att den har en konstant densitet genom hela simuleringen. I verkligheten är inte detta riktigt sant eftersom alla uider (även vatten) ändrar sin volym. Annars skulle vi till exempel inte kunna höra under vatten. Men eftersom dessa förändringar sker på ett mikroskopiskt nivå, kommer det inte att resultera i någon visuell märkbar förändring. För att uppfylla detta krav måste vi komplettera Navier-Stokes-ekvationerna med villkoret (.). V = (.) Ekvation (.) säger att hastighetsfältets divergens måste vara noll. För uidvolymen betyder detta att förändringen i volym alltid är noll. För att bättre förstå hur Navier-Stokes-ekvationerna fungerar delar vi upp systemet i mindre delar och tittar på varje del för sig. För en mer detaljerad genomgång av Navier- Stokes-ekvationerna refererar vi till [].. Yttre krafter Vi börjar med den enklaste delen av Navier-Stokes-ekvationen, yttre krafter. Vi skalar ett fält F, innehållandes de externa krafterna, med ett tidssteg och adderar fältet på vårt 4

hastighetsfält V enligt ekvation (.). V n+ = V n + t F (.). Advektion Den första termen i ekvationen (.) kallas för advektionen. Advektion kan lättast beskrivas som det sätt en vätska föryttar sig själv. Denna term är nödvändig för att behålla uidens rörelse, se ekvation (.4). V n+ t = (V n ) V n (.4) Detta steg skulle kunna lösas genom en explicit Euler-integration. Problemet med att integrera explicit är att metoden blir instabil vid stora tidssteg. För att undvika instabilitet går det istället att beräkna var den nuvarande partikeln befann sig i förra tidssteget. Denna metod kallas för implicit Euler-integration och kommer vara villkorslöst stabil för godtyckliga tidssteg. Vi kan formulera ekvationen (.5) där x är den nuvarande partikelns position och t är tiden. V (x, t + δt) = V (x V (x, t) t, t) (.5) När man räknat ut vart partikeln befann sig förut är det sällan den ligger exakt på en punkt i rutnätet. Därför måste man interpolera fram en ny hastighet från de närliggande cellerna. Då vi förutsätter att läsaren har redan har kunskap om interpolation, kommer vi inte ta upp det i vår rapport. För en bra introduktion av interpolation i tre dimensioner rekommenderas []. Figur.: Illustration av advektionssteget. 5

. Diusion I alla uider nns det en inre friktion som påverkar hur trögytande uiden blir. Denna friktion kallas för viskositet och motverkar ödet i uiden, vilket medför att hastigheten i uidens öde utjämnas till medelvärdet i omgivningen. Ju högre viskositet desto mer trögytande blir uiden. Sirap är mer trögytande än vatten, det vill säga sirap har högre viskositet än vatten. Den tredje termen i Navier-Stokes-ekvationen är den del av ekvationen som får vår uid att bete sig efter detta fysiska fenomen. Denna term i Navier- Stokes-ekvation bestämmer hur trögytande uiden blir och kallas för viskositetstermen eller diusionstermen, se ekvation (.6). V t = υ V (.6) I ekvation (.6) är det koecienten υ som bestämmer hur trögytande uiden blir. Viskositeten i en uid blir mer trögytande om υ har ett högre värde. Det nns många olika numeriska metoder som löser denna ekvation. Foster och Metaxas [] använde sig av ett explicit Eulersteg efter att först ha diskretiserat Laplaceoperatorn. Denna metod är dock instabil för hög viskositet. I Stam [4] beskrivs en stabil metod för diusion av densitet. Metoden går ut på att, efter diusion, kunna återgå till den densitet man hade från början då diusion sker bakåt i tiden istället. Den sökta densiteten bildar ett linjärt ekvationssystem som går att lösa genom att hitta matrisinversen till systemet. Istället används en iterativ metod, Gauss-Seidels relaxationsalgoritm, till att invertera matrisen..4 Projektion Sista steget i Navier-Stokes-algoritmen är projektionen. För att bevara uidens volym måste ekvation (.) upprätthållas, den säger att uiden är inkompressibel, det vill säga att hastighetsfältet måste vara divergensfritt. För att lösa detta använder vi Helmholtz- Hodge-dekompositionsteorem [5] som säger att ett vektorfält kan delas upp i två delar, en virvelfri del, q, som har divergens och en divergensfri del, u. Vi vill lösa ut den virvelfria delen q från hastighetsfältet V genom: V = u + p (.7) V = u + q (.8) V = p (.9) Ekvation (.9) är en Poisson-ekvation som ger den virvelfria delen q av hastighetsfältet. För att lösa ekvationen måste vi diskretisera ekvationen. Vi börjar med divergensen i vänsterledet, ekvation (.). V i,j,k = u i+,j,k u i,j,k x + u i,j+,k u i,j,k y + u i,j,k+ u i,j,k+ z (.) där u, v, och w är hastighetskomponenterna i, x-, y- och z-led eftersom våra voxlar är 6

likformiga ( x = y = z) kan vi skriva om ekvationen enligt ekvation (.). V i,j,k = x (u i+,j,k u i,j,k + u i,j+,k u i,j,k + u i,j,k+ u i,j,k+ ) (.) I högerledet har vi Laplaceoperatorn som är applicerat på ett skalärfält q, där q kan ses som trycket i varje voxel. Ekvationen kan tolkas som divergensen av skalärfältets gradient och beskriver utbytet av öde mellan voxlarna där mängden som utbyts bestäms av divergensen i fältet q (se gur.). i,j+,k i-,j,k i,j,k i+,j,k i,j-,k Index Flöde Figur.: Illustration av öde mellan voxlar. Vi diskretiserar Laplaceoperatorn enligt följande: q i,j,k = ( x) (q i+,j,k + q i,j,k + q i,j+,k q i,j,k + q i,j,k+ + q i,j,k+ 6q i,j,k ) (.) Efter diskretiseringen kan ekvation (.9) skrivas om till ett linjärt ekvationssystem som har en lösning för varje voxel. Ax = b (.) där A-matrisen är Laplaceoperatorn, x = q och b = hastighetsfältets gradient. A-matrisen innehåller en rad och en kolumn för varje uidvoxel, detta resulterar i en gigantisk matris. Tack vare av diskretiseringen kommer dock varje rad i A maximalt innehålla 7 element skilda från noll. Ett element för varje intilliggande voxel i x-, y- och z-led plus ett som representerar den voxel man bener sig i. Detta går att utnyttja när man räknar fram inversen med conjugate-gradient-metoden [6]. A-matrisen är den diskreta representationen av Laplaceoperatorn. För att lösa ekvationsystemet måste vi bygga upp A-matrisen på ett speciellt sätt för att öden mellan uidvoxlar och solida voxlar inte ska tillåtas. Detta för att uiden inte ska öda in i solida voxlar. Vi skriver om ekvation (.) på vektorform för att enklare se hur en 7

Luft voxlar Fluidvoxlar i,j-,k i,j,k i,j-,k Solida voxlar Figur.: Illustration av öde vid solida voxlar. rad i A-matrisen ser ut då alla intilliggande voxlar är uidvoxlar, se ekvation (.4). q i+,j,k q i,j,k q i,j,k = [ ] q i,j+,k 6 ( x) q i,j,k (.4) q i,j,k q i,j,k+ q i,j,k Här nns det inga solida voxlar i närheten och utbyte av öde tillåts med alla intilliggande voxlar. Men om vi benner oss i en voxel X i,j,k (se gur.) som har solida voxlar runt sig, måste vi se till att uiden inte ödar in i de voxlarna. Eftersom voxel X i,j,k och X i,j,k är solida, stoppar vi ödet dit genom att ta bort de komponenter i Laplaceoperatorn som står för ödet i de riktningarna. Vi gör det genom att sätta q i,j,k q i,j,k = och q i,j,k q i,j,k =, vilket resulterar i följande rad i A- matrisen, ekvation (.5). q i,j,k = [ ] 4 ( x) q i+,j,k q i,j,k q i,j+,k q i,j,k q i,j,k q i,j,k+ q i,j,k (.5) Då summan av alla komponenter på en rad måste vara noll ändrar vi 6 till 4. Om vi benner oss intill en luftvoxel måste vi tillåta att uiden ödar i den riktningen därför gör vi ingenting med Laplaceoperatorns komponenter för den riktningen. 8

.5 Dirichlet gränsvillkor Dirichlet gränsvillkor är en operation som ser till att det inte nns några vektorer i hastighetsfältet som pekar mot en intilliggande solid voxel. Operationen körs både före och efter anropet till projektionen, detta för att se till att eventuella vektorer med riktningskomponenter som pekar i icke tillåtna riktningar justeras. Dirichlet gränsvillkor uppfyller ekvation (.6). V n = (.6) där n är normal till den yta som ligger emot voxeln vi benner oss i. För att uppfylla villkoret går vi igenom varje uidvoxel och kontrollerar om någon av de intilliggande voxlarna är en solid. Om detta är sant tar vi bort den hastighetskomponent som pekar i den riktningen, se gur.4. och.5. Fluidvoxlar Solida voxlar Figur.4: Innan applikation av Dirichlet gränsvillkor. Fluidvoxlar Solida voxlar Figur.5: Applikation av Dirichlets gränsvillkor. 9

Kapitel 4 Level set-metoder En level set-metod representerar en implicit yta som går att deformera på olika sätt genom att lösa en uppsättning partiella dierentialekvationer. Anledningarna till att man väljer att representera geometriska objekt implicit är många. En implicit yta är väldigt lätt att använda när man utför datorsimuleringar då den ger en sorts fysikalisk garanti att ytan kan skapas. Implicita ytor kan ses som en sluten volym som inte kan överlappa sig själv, vilket är en bra egenskap för uidsimuleringar. För en grundlig genomgång av level set-metoden rekommenderas [7]. 4. Implicita ytor Representationen av implicita ytor kan ses som ett indirekt sätt att representera ytor på. Till skillnad från explicita ytor, där till exempel polygoner eller vertex denierar själva ytan, denieras en implicit yta istället av ett skalärfält som representerar avståndet till ytan. För att enklare förstå skillnaden tar vi och tittar på en hur en cirkel med radien R representeras analytiskt, först explicit (4.) och sedan implicit (4.). x = ± R y (4.) Det vi kan se i 4. är att för varje värde på y, där y tillhör intervallet [ R, R], kommer ekvationens x-värden att medföra att punkterna [x, y] och [ x, y] alltid ligger på cirkel. Som vi ser i gur 4. kan vi ta reda på var cirkeln är men vi kan inte säga något om en godtycklig punkt i planet. Det nns ingen matematisk koppling som beskriver om punkten är innanför eller utanför cirkeln.

y?? x Figur 4.: Explicit representation av en cirkel. Om vi istället kollar på den implicita beskrivningen av samma cirkel, ser det ut som ekvation 4.: φ(x, y) = x + y (4.) där funktionen φ(x, y) placerar ut variabler x och y i ett skalärfält. Det vill säga att den tilldelar en skalär till varje punkt i (x, y)-planet. För att kunna hitta vår cirkel måste vi kolla på ett specikt isometrisk värde h i skalärfältet. Genom att välja alla värden i skalärfältet där φ(x, y) = h kan vi skära ut en delmängd S av hela (x, y)-planet. Denna delmängd kallas för ett level set av den implicita funktionen φ(x, y, R) och kan då denieras enligt 4.: S = { x, y R : φ(x, y) = h } (4.) Isometriska värdet h representerar alltså den implicita ytans yta. Oftast vill man sätta ytans värde till (h = ). Detta för att enkelt kunna deniera vilka punkter som är innanför eller utanför den implicita ytan. Vi kan nu enkelt klassicera en godtycklig punkt x(t) vid tidpunkten t som innanför eller utanför den implicita ytan med hjälp av (4.4) och (4.5) S inne = { x(t) R : φ(x(t)) <= } (4.4) S ute = { x(t) R : φ(x(t)) > } (4.5) Man kan också se det som att den implicita ytan är ett gränssnitt som separerar vårt skalärfält i två regioner, en utsida och en insida där varje skalärvärde representerar avståndet till närmaste punkt på cirkeln, se gur 4..

y - - - - - - - - - - - - - - - - - - - - x Figur 4.: Implicit representation av en cirkel. 4. Logiska operatorer För att konstruera mer komplicerade geometriska objekt används logiska operatorer för att kombinera era implicita ytor. Dessa kan klassiceras som tre huvudtyper: union, snitt och dierens. I gur 4. har vi illustrerat två implicita cirklar A och B, som deformeras med de logiska operatorerna. Union Differens (A-B) A B + - Snitt Figur 4.: Logiska operatorer. 4. Advektion För att få den implicita ytan att röra sig, måste vi tillämpa ett advektionssteg. Teorin är densamma som hos advektion för hastighetsfältet men istället för att förytta hastigheter i ett vektorfält, ändrar vi värden i ett skalärfält. Ekvation (4.6) svarar för denna transport. δφ δt = V φ (4.6) där φ är en kontinuerlig implicit funktion och V är ett hastighetsfält. Det som skiljer det här advektionssteget från advektionen i Navier-Stokes-ekvationen (.) är diskretiseringen. När man diskretiserar ekvation (4.6) måste man ta hänsyn till hastighetsfältets

riktning vid deriveringen, detta för att inte derivera med avseende på punkter som uiden inte har rört än. Ekvationssystemet (4.7) visar hur diskretiseringen ser ut för x-komponenten. För att beräkna gradienten φ i+,j,k måste varje dimensions komponent x, y och z deriveras på samma sätt. δφ δx = { φ + x = (φ i+,j,k φ i,j,k )/ x om V x < φ x = (φ i,j,k φ i,j,k )/ x om V x > (4.7) Efter att man har räknat ut gradienten φ i,j,k för en voxel i den implicita ytan, måste förändringshastigheten beräknas genom att beräkna skalärprodukten av hastighetsvektorn V i,j,k och gradienten φ i,j,k.till sist kan en explicit Euler-integration (4.8) användas för att ytta den implicita ytan. δφ δt φn+ φ n t (4.8) 4.4 Utvidgning av hastighetsfältet Eftersom hastighetsfältet V endast är denierat i uidvoxlarna som är klassicerade som de voxlar som nns inuti den implicita ytan, kommer den implicita ytan att stå stilla. Detta för att det inte nns några hastigheter utanför ytan som den kan förytta sig längs med. För att lösa detta måste vi utvidga hastigheterna precis innanför ytan till voxlarna utanför. Utvidgningen av hastigheterna sker i riktningen av ytans normal och ser till att det alltid nns en hastighet precis utanför ytan, vi löser detta med ekvation (4.9). δv δt = N V (4.9) där N är ett vektorfält som innehåller alla ytnormaler. Diskretiseringen sker enligt samma principer som level set advektionen. 4.5 Dissipation Som ett resultat av alla approximationer som används vid de olika diskretiseringsstegen kommer uiden att förlora en del volym. Det nns många olika lösningar för att lösa detta. En metod som löser dissipationen nästan helt är 'hybridmetoden' som använder level set-metoden i kombination med ett partikel system, se [] för mer information. Vi löste problemet med ett enklare sätt. Vid initieringen beräknar vi istället initialvolymen för uiden och räknar sedan ut den resterande volymen efter varje steg. Därefter kan man återinföra lite volym överallt i uiden för att bevara den totala volymen. För att återinföra volym i uiden kan man manipulera Poisson ekvationen (.9) genom att minska divergensen V. Detta medför att det ödar ut mer ur varje cell.

Kapitel 5 Implementering 5. Simuleringen Simuleringsprogrammet är skrivet i C++. För visualisering har använder vi ramverken OpenGL och GLUT för att koden ska vara plattformsoberoende. Vi kompilerar programmet för Apple OSX och Microsoft Windows. 5. Export För att visualisera den implicita volymens yta använder vi en metod som heter cubes, marching se [8, 9]. Metoden triangulerar mellan uidvoxlar för att generera punkter som de nierar de polygoner som bygger upp ytan. Sedan exporterar vi ut den geometriska ytan för varje tidssteg i simuleringen till objekt ler (.obj). 5. Postproduktion För att få en mer realistisk visualisering väljer vi att använda Autodesk D Studio Max. Ds Max innehåller avancerade metoder för ljussättning, material och rendering som ger ett realistisk resultat. Till Ds max importerar vi de objekt ler som simuleringsprogrammet exporterar för att rendera ut realistiska lmer och bilder. Figur 5. visar alla produktionssteg. D FLUID SIMULATION Menu Start simulation OFF Export image OFF Export objects ON OBJ Mihai Aldén, Lam Chan, Marcus Olsson & Max Popescu bildruta bildruta DFluidSim. OBJ. Simulering Autodesk Ds Max. Objekt filer 4. Rendering Figur 5.: Simulering till lm. 4 Publicering

Kapitel 6 Resultat Efter simulering, export och efterbehandling i D-program är resultatet en realistisk uid, i vårt fall vatten i en glastank, se gur A.. Ray-tracing, ambient occlusion samt subscattering surfaces används i bildbehandlingen. Figur 6.: Vatten i glastank. 5

Kapitel 7 Diskussion Innan projektet hade vi bara ögon på hur vi skulle få Navier-Stokes-ekvationerna att fungera. Det fanns mycket information om just uidsimuleringar i artiklar och uidsimuleringen var därmed relativt smärtfri att genomföra. När vi sedan skulle ta steget från en fungerande visualisering av hastighetsfältet till en vattenrepresentation med hjälp av level set-metoden, insåg vi att det var mycket mer omfattande än vad vi ursprungligen räknat med. Teorin bakom level set-metoden är väldokumenterad men det var betydligt mer komplicerat att implementera metoden. Vi började med att tillämpa Stams [, 4] metod men den visade sig snart vara olämplig för vår vätskesimulering. Metoden vi använde oss av istället, var betydligt mer komplicerad då den krävde att vi implementerade Navier-Stokes och level set parallellt. Vårt simuleringsprogram kan användas till att simulera olika situationer. Vår uid kan initieras vid olika höjder och falla under påverkan av gravitationen. Solida objekt kan denieras som vår uid kan interagera med. 7. Förbättringar I vår simulering har vi löst problemet med volymförlusten genom att öka ödet ur voxlarna. Detta är egentligen en ologisk lösning och ansträngningar välkomnas att lösa det på ett bättre sätt. Fedkiw [] presenterade en hybridmetod där man hittar ytan med hjälp av både level set och en partikelbaserad lösning. Metoden löser dock inte volymförlusten helt och hållet men minskar den avsevärt. Inte nog med att vi förlorar volym, vi förlorar även energi i vår simulering. Så kallad "vorticity connementlöser detta genom att lägga till den förlorade energin tillbaka i ödet. Resultatet blir en bättre bevaring av virvlar. I den nuvarande simuleringen görs beräkningar över hela rymden som kan eektiviseras genom att implementera en datastruktur som delar upp beräkningarna mer lokalt. Octrees och KD-trees är exempel på sådana lösningar. Beräkningstiden hade också kunnat sänkas drastiskt om tunga beräkningar hade gjorts på datorns GPU istället. För att implementera Navier-Stokes på GPU rekommenderas []. 6

Litteraturförteckning [] Gunnar Johansson, Ola Nillson och Andreas Söderström. Modeling and Animation TNM79, Lab 6: Fluid simulation. Linköpings universitet; 9. [] Wikipedia. Trilinear interpolation. Wikipedia [www]; 9. http://en.wikipedia. org/wiki/trilinear_interpolation. Senast hämtad: 9--. [] Nick Foster och Dimitri Metaxas NF. Realistic Animation of Liquids. Artikel, Stanford University; 996. http://www.cbim.rutgers.edu/papers/gmip96\ %Foster.pdf. Senast hämtad: 9--. [4] Stam J. Real-Time Fluid Dynamics for Games. Artikel, University of Toronto;. http://www.dgp.toronto.edu/people/stam/reality/research/ pdf/gdc.pdf. Senast hämtad: 9--. [5] Wikipedia. Helmholtz decomposition. [www]; 9. http://en.wikipedia.org/ wiki/helmholtz_decomposition. Senast hämtad: 9--. [6] Wikipedia. Conjugate gradient method. Wikipedia [www]; 9. http://en. wikipedia.org/wiki/conjugate_gradient. Senast hämtad: 9--. [7] Gunnar Johansson ONoAS. Modeling and Animation TNM79, Lab 5: Level set methods. Linköpings universitet; 9. [8] Wikipedia. Marching cubes. [www]; 9. http://en.wikipedia.org/wiki/ Marching_cubes. Senast hämtad: 9--. [9] Bourke P. Polygonising A Scalar Field. [www]; 994. http://local.wasp.uwa.edu. au/~pbourke/geometry/polygonise/. Senast hämtad: 9--. [] Stam J. Stable Fluids. Artikel, University of Toronto; 999. http://www.dgp. toronto.edu/people/stam/reality/research/pdf/ns.pdf. Senast hämtad: 9- -. [] Nick Foster och Ronald Fedkiw. Practical Animation of Liquids. Artikel, Stanford University;. http://physbam.stanford.edu/~fedkiw/papers/ stanford-.pdf. Senast hämtad: 9--. [] Fast Fluid Dynamics Simulation on the GPU. Artikel, University of North Carolina at Chapel Hill; 4. http://http.developer.nvidia.com/gpugems/gpugems_ ch8.html. Senast hämtad: 9--. 7

Bilaga A Simuleringsprogrammet Figur A.: DFluidSim Körinstruktioner. Börja med att välja en simulering. Tryck F6 för att simulera en uid som faller i en glastank. Tryck F7 för att simulera hur en uid interagerar med en solid och sedan en annan uid.. Välj visualisering och export metod. Tryck F för att visa hastighetsfältet. Tryck F4 för att exportera bilder för varje simulationssteg. Tryck F5 för att exportera geometrin till.obj ler.. Starta/Stoppa simualtionen med F. 4. Under simuleringen. Tryck för att lägga till en uidsfär Tryck för att starta en sänka (tömmer vattentanken). Tryck för att aktivera den horisontella vinden. Använd piltangenterna för att ändra vindens riktning. 4. Avsluta programmet med F.