Fluid Animation Christopher Batty November 17, 2011 What distinguishes fluids? What distinguishes fluids? • • • • No “preferred” shape Always flows when force is applied Deforms to fit its container Internal forces depend on velocities, not displacements Watch fluid simulation clips Basic Theory Eulerian vs. Lagrangian Lagrangian: Point of reference moves with the material. Eulerian: Point of reference is stationary. e.g. Weather balloon (Lagrangian) vs. weather station on the ground (Eulerian) Eulerian vs. Lagrangian Consider an evolving temperature field. • Lagrangian: Set of moving particles, each with a temperature value. Eulerian vs. Lagrangian Consider an evolving temperature field. • Eulerian: A fixed grid of temperature values, that temperature flows through. Relating Eulerian and Lagrangian Consider the temperature ๐(๐ฅ, ๐ก) at a point following a given path, ๐ฅ(๐ก). ๐ฅ(๐ก1 ) ๐ฅ(๐ก๐๐๐ค ) ๐ฅ(๐ก0 ) Two ways temperature changes: 1. Heating/cooling occurs at the current point. 2. Following the path, the point moves to a cooler/warmer location. Time derivatives Mathematically: ๐ท ๐๐ ๐๐ ๐๐ฅ ๐ ๐ฅ ๐ก ,๐ก = + ๐ท๐ก ๐๐ก ๐๐ฅ ๐๐ก Chain rule! ๐๐ ๐๐ฅ = + ๐ป๐ โ ๐๐ก ๐๐ก Definition of ๐ป ๐๐ = + ๐ โ ๐ป๐ ๐๐ก Choose =๐ข ๐๐ฅ ๐๐ก Material Derivative This is called the material derivative, and denoted ๐ท . ๐ท๐ก Change at a point moving with the velocity field. Change due to movement. ๐ท๐ ๐๐ = + ๐๐ป๐ ๐ท๐ก ๐๐ก Change at the current (fixed) point. Advection To track a quantity T simply moving (passively) through a velocity field: ๐ท๐ =0 ๐ท๐ก or equivalently ๐๐ + ๐๐ป๐ = 0 ๐๐ก This is the advection equation. Think of colored dye or massless particles drifting around in fluid. Watch dye in fluid clip Equations of Motion • For general materials, we have Newton’s second law: F = ma. • Specialized for fluids: “Navier-Stokes Equations” Navier-Stokes Density × Acceleration = Sum of Forces ๐ท๐ ๐ = ๐ท๐ก ๐ญ๐ ๐ Expanding the material derivative… ๐๐ ๐ = −๐ ๐ โ ๐ป๐ + ๐๐ก ๐ญ๐ ๐ What are the forces on a fluid? Primarily for now: • Pressure • Viscosity • Simple “external” forces – (e.g. gravity, buoyancy, user forces) Also: • Surface tension • Coriolis • Possibilities for more exotic fluid types: – Elasticity (e.g. silly putty) – Shear thickening / thinning (e.g. “oobleck”, ketchup) – Electromagnetic forces • Sky’s the limit... Watch oobleck clip In full… ๐๐ ๐ = −๐ ๐ โ ๐ป๐ + ๐๐ก Change in velocity at a fixed point Advection ๐ญ๐ ๐ Forces (pressure, viscosity gravity,…) Operator splitting Break the equation into steps: 1. 2. 3. 4. ๐๐ Advection: ๐ = −๐ ๐ โ ๐ป๐ ๐๐ก ๐๐ Pressure: ๐ = ๐ญ๐๐๐๐ ๐ ๐ข๐๐ ๐๐ก ๐๐ Viscosity: ๐ = ๐ญ๐ฃ๐๐ ๐๐๐ ๐๐ก๐ฆ ๐๐ก ๐๐ External: ๐ = ๐ญ๐๐กโ๐๐ ๐๐ก 1. Advection Advection Previously, we considered advection of a passive scalar quantity, ๐, by velocity ๐. ๐๐ = −๐ โ ๐ป๐ ๐๐ก In Navier-Stokes we saw: ๐๐ = −๐ โ ๐ป๐ ๐๐ก Velocity ๐ is advected by itself! Advection i.e., The scalar components ๐ข, ๐ฃ of the vector ๐ are each advected in the same way. We can reuse the same numerical method. 2. Pressure Pressure What does pressure do? – Enforces incompressibility. Typical fluids (mostly) do not compress. • Exceptions: high velocity, high pressure, … Incompressibility Compressible velocity field Incompressible velocity field Incompressibility Intuitively, net flow into/out of a given region is zero (no sinks/sources). Integrate the flow across the boundary of a closed region: ๐ ๐โ๐=0 ๐Ω Incompressibility ๐โ๐=0 ๐Ω By divergence theorem: ๐โ๐=0 But this is true for any region, so ๐ โ ๐ = ๐ everywhere. Pressure How does pressure enter in? – Pressure is the force required to ensure that ๐ป โ ๐ = 0. – Pressure force has the following form: ๐ญ๐ = −๐ป๐ Helmholtz-Hodge Decomposition Input Velocity field Curl-Free (irrotational) Divergence-Free (incompressible) + = ๐ข = ๐ป๐ + ๐ป×๐ ๐ข๐๐๐ = ๐น๐๐๐๐ ๐ ๐ข๐๐ + ๐ข๐๐๐ค Aside: Pressure as Lagrange Multiplier Interpret as an optimization: Find the closest ๐๐๐๐ค to ๐๐๐๐ where ๐ป โ ๐๐๐๐ค = 0 min ๐๐๐๐ค − ๐๐๐๐ ๐๐๐๐ค s. t. ๐ป โ ๐๐๐๐ค = 0 A Lagrange multiplier to enforce the constraint is exactly pressure. 3. Viscosity Viscosity What characterizes a viscous liquid? • “Thick”, damped behaviour • Higher resistance to flow Watch viscous honey clip Viscosity Loss of energy due to internal friction between molecules moving at different velocities. Interactions between molecules in different layers causes shear stress that… • acts to oppose relative motion. • causes an exchange of momentum Viscosity Loss of energy due to internal friction between molecules moving at different velocities. Interactions between molecules in different layers causes shear stress that… • acts to oppose relative motion. • causes an exchange of momentum Viscosity Loss of energy due to internal friction between molecules moving at different velocities. Interactions between molecules in different layers causes shear stress that… • acts to oppose relative motion. • causes an exchange of momentum Viscosity Loss of energy due to internal friction between molecules moving at different velocities. Interactions between molecules in different layers causes shear stress that… • acts to oppose relative motion. • causes an exchange of momentum Viscosity Imagine fluid particles with general velocities. Each particle interacts with nearby neighbours, exchanging momentum. Viscosity Amount of momentum exchanged is proportional to: • Velocity gradient, ๐ป๐. • Viscosity coefficient, ๐ For any closed region, net in/out flow of momentum: ๐๐ป๐ โ ๐ = ๐๐ โ ๐๐ ๐Ω So the viscosity force is: ๐ญ๐ฃ๐๐ ๐๐๐ ๐๐ก๐ฆ = ๐๐ โ ๐๐ Viscosity The end result is a smoothing of the velocity. This is exactly the action of the Laplacian operator, ๐ โ ๐. For scalar quantities, the same operator is used to model diffusion. 4. External Forces External Forces Any other forces you may want. • Simplest is gravity: – ๐น๐ = ๐๐ for ๐ = (0, −9.81) • Buoyancy models are similar, – e.g., ๐น๐ = ๐ฝ(๐๐๐ข๐๐๐๐๐ก − ๐๐๐๐ )๐ Numerical Methods 1. Advection Advection of a Scalar • First, we’ll consider advecting a scalar quantity, ๐. – temperature, color, smoke density, … • The grid stores ๐ and ๐. Eulerian Approximate derivatives with finite differences. ๐๐ + ๐ โ ๐ป๐ = 0 ๐๐ก FTCS = Forward Time, Centered Space: ๐๐ ๐+1 − ๐๐ ๐ ๐๐+1 ๐ − ๐๐−1 ๐ +๐ข =0 โ๐ก 2โ๐ฅ Unconditionally Unstable! Lax: Conditionally ๐๐ ๐+1 − (๐๐+1 ๐ + ๐๐−1 ๐ )/2 ๐๐+1 ๐ − ๐๐−1 ๐ +๐ข =0 Stable! โ๐ก 2โ๐ฅ Many possible methods, stability can be a challenge. Lagrangian • Advect data forward from grid points by integrating position according to grid velocity. ? • Problem: New data position doesn’t necessarily land on a grid point. Semi-Lagrangian • Look backwards in time from grid points, to see where data is coming from. • Interpolate data at previous time. Semi-Lagrangian - Details 1. Determine velocity ๐๐,๐ at grid point,. 2. Integrate position for a timestep of −โ๐ก. ๏ง e.g. ๐ฅ๐๐๐๐ = ๐ฅ๐,๐ − โ๐ก๐๐,๐ 3. Interpolate ๐ at ๐ฅ๐๐๐๐ , call it ๐๐๐๐๐ . 4. Assign ๐๐,๐ = ๐๐๐๐๐ for the next time. Unconditionally stable! Advection of Velocity • This is great for scalars. What about velocity advection? • Same method: ๐๐ = −๐ โ ๐ป๐ ๐๐ก – Trace back with current velocity – Interpolate velocity (component) at that point – Assign it to the grid point at the new time. • Caution: Do not overwrite the velocity field you’re using to trace back! 2. Pressure Recall… Helmholtz-Hodge Decomposition Input Velocity field Curl-Free (irrotational) Divergence-Free (incompressible) + = ๐ข = ๐ป๐ + ๐ป×๐ ๐ข๐๐๐ = ๐น๐๐๐๐ ๐ ๐ข๐๐ + ๐ข๐๐๐ค Pressure Projection - Derivation (1) ๐๐ ๐ ๐๐ก = −๐ป๐ Discretize (1) in time… and (2) ๐ป โ ๐ = 0 โ๐ก ๐๐๐๐ค = ๐๐๐๐ − ๐ป๐ ๐ Then plug into (2)… โ๐ก ๐ป โ ๐๐๐๐ − ๐ป๐ = 0 ๐ Pressure Projection Implementation: 1) Solve a linear system for p: โ๐ก ๐ป โ ๐ป๐ = ๐ป โ ๐๐๐๐ ๐ 2) Update grid velocity with: ๐๐๐๐ค โ๐ก = ๐๐๐๐ − ๐ป๐ ๐ Implementation โ๐ก ๐ป โ ๐ป๐ = ๐ป โ ๐๐๐๐ ๐ Discretize with finite differences: ๐ข๐+1 ๐๐+1 ๐ข๐ ๐๐ ๐๐−1 e.g., in 1D: ๐๐+1 − ๐๐ ๐๐ − ๐๐−1 ๐๐๐ − โ๐ก ๐ข๐+1 − ๐ข๐ โ๐ฅ โ๐ฅ = ๐ โ๐ฅ โ๐ฅ ๐๐๐ Solid Boundary Conditions Free Slip: ๐๐๐๐ค โ ๐ = 0 ๐ ๐ 52 Staggered vs. Non-staggered • Two choices for grids: – Velocity and pressure co-located ๐๐+1 ๐๐−1 ๐๐ ๐ข๐ ๐ข๐+1 ๐ข๐−1 – Velocity and pressure staggered ๐๐+1 ๐ข๐+1 ๐๐ ๐ข๐ ๐๐−1 Why prefer staggered? • Finite differences line up nicely. – ๐ข and ๐ป๐ match, ๐ and ๐ป โ ๐ข match ๐ข๐+1 ๐๐+1 ๐ข๐ ๐๐ • …which improves stability! ๐๐−1 3. Viscosity Viscosity ๐๐ PDE: ๐ ๐๐ก = ๐๐ป โ ๐ป๐ Use finite differences. Discretized in time: ๐๐๐๐ = ๐๐๐๐ + โ๐ก๐ ๐ป โ ๐ป๐∗ ๐ Viscosity – Time Integration ๐๐๐๐ = ๐๐๐๐ + โ๐ก๐ ๐ ๐ป โ ๐ป๐∗ Explicit integration, let ๐∗ be ๐๐๐๐ : – Just estimate โ๐ก๐ ๐ป โ ๐ป๐๐๐๐ ๐ – Add to current ๐. – Very unstable. Implicit integration, let ๐∗ be ๐๐๐๐ค : – Stable for high viscosities. – Need to solve a system of equations. Viscosity – Implicit Integration Solve for ๐๐๐๐ : ๐๐๐๐ − โ๐ก๐ ๐ป โ ๐ป๐๐๐๐ค = ๐๐๐๐ ๐ Apply separately for each velocity component. e.g. in 1D: ๐ข๐+1 ๐ข๐ ๐ข − ๐ข๐−1 ๐ข๐+1 − ๐ข๐ ๐ข๐ ๐−1 − โ๐ก๐ โ๐ฅ โ๐ฅ ๐ข๐ − = ๐ข๐ ๐ โ๐ฅ ๐๐๐ Solid Boundary Conditions No-Slip: ๐๐๐๐ค = 0 Watch no-slip clip 59 4. External Forces Gravity Discretized form is: ๐๐๐๐ = ๐๐๐๐ + โ๐ก๐ Just add a downward acceleration to each velocity, scaled by timestep. Gravity • Note: in a closed fluid-filled container, gravity (alone) won’t do anything! – Incompressibility cancels it out. – (Assuming constant density) Start After gravity step After pressure step Simple Buoyancy Look up ๐๐๐ข๐๐๐๐๐ก at grid point, increment velocity based on difference from a reference velocity. ๐๐๐๐ = ๐๐๐๐ + โ๐ก๐ฝ ๐๐๐ข๐๐๐๐๐ก − ๐๐๐๐ ๐ ๐ฝ dictates the strength of the buoyancy force. See paper for a more elaborate model: “Visual simulation of smoke”, 2001. User Forces Add whatever additional forces we want, such as: • near the mouse when the user clicks • Paddle forces in Plasma Pong Watch clip Ordering of Steps Order turns out to be important. Why? 1) Incompressibility is not guaranteed at intermediate steps 2) Advecting with a compressible field causes volume/material loss or gain! Ordering of Steps Consider advection in this field: Best ordering 1) Advection 2) Viscosity 3) Add Forces 4) Make incompressible (Pressure) Useful References • Robert Bridson’s SIGGRAPH 2007 Fluid Course notes: http://www.cs.ubc.ca/~rbridson/fluidsimulation/ • “Stable Fluids” [Stam 1999] • “Real-Time Stable Fluid Dynamics for Games” [Stam, 2003] Liquids Liquids What’s missing so far? We need: • A surface representation • Boundary conditions at the surface The Big Picture Velocity Solver Advect Velocities Add Viscosity Add Gravity Project Velocities to be Incompressible What about liquids? Velocity Solver Advect Velocities Add Viscosity Add Gravity Project Velocities to be Incompressible Surface Tracker Surface Tracker Given: liquid surface geometry, velocity field, timestep Compute: new surface geometry by advection. ๐๐ ๐๐ ๐๐+1 Surface Tracker Ideally: • Efficient • Accurate • Handles merging/splitting (topology changes) • Conserves volume • Retains small features • Smooth surface for rendering • Provides convenient geometric operations • Easy to implement… Very hard (impossible?) to do all of these at once. Surface Tracking Options 1. 2. 3. 4. 5. Particles Level sets Volume-of-fluid (VOF) Triangle meshes Hybrids (many of these) Particles [Zhu & Bridson 2005] Particles Perform passive Lagrangian advection on each particle. For rendering, need to reconstruct a surface. Level sets [Losasso et al. 2004] Level sets Each grid point stores signed distance to the surface (inside <= 0, outside > 0). Surface is interpolated zero isocontour. >0 <= 0 Volume of fluid [Mullen et al 2007] Volume-Of-Fluid Each cell stores fraction f ฯต 0,1 indicating how empty/full it is. Surface is transition region, f ≈ 0.5. 1 1 1 1 1 0. 8 0 0 0 1 0.4 0 0 1 1 0.4 0 0 1 1 0.8 0 0 0 1 1 0.5 0 0 0 Meshes [Brochu et al 2010] Meshes Store a triangle mesh. Advect its vertices, and correct for collisions.