250 likes | 420 Views
Fluid Animation. CSE 3541 Matt Boggus. Overview. Procedural approximations Heightfield fluids Mathematical background Navier -Stokes equation Computational models for representing fluids Grids Particles Hybrid Using the computational models Forces “Stable fluids” by Stam.
E N D
Fluid Animation CSE 3541 Matt Boggus
Overview • Procedural approximations • Heightfieldfluids • Mathematical background • Navier-Stokes equation • Computational models for representing fluids • Grids • Particles • Hybrid • Using the computational models • Forces • “Stable fluids” by Stam
Real-time Fluids • Goals: • Cheap to compute • Low memory consumption • Stability • Plausibility • Interactivity
Real-time Fluids • Procedural water • Unbounded surfaces, oceans • Particle systems • Splashing, spray, puddles, smoke, bubbles, rain • Heightfield fluids • Ponds, lakes, rivers
Heightfield fluid • Function u(x,y) gives height at (x,y) • Store height values in an array u[x,y] • Note: limited to one height per (x,y)
Heightfield or Heightmap terrain data 2D greyscale image Surface in 3D space Images from http://en.wikipedia.org/wiki/Heightmap
Can this wave be represented using a heightfield?A – trueB – false
Setting and updating heightfield fluids • Methods • Sum of sines • Add multiple sin functions together • Pressure or height differences between cells • Collision detection and displacement • Additional considerations • When updating, a second heightfield may be used to preserve the values from the previous frame • Handle boundary cases differently
Pressure/Height differences Initialize u[i,j] with some interesting function Initialzev[i,j]=0 loop v[i,j] +=(u[i-1,j] + u[i+1,j] + u[i,j-1] + u[i,j+1])/4 – u[i,j] v[i,j] *= 0.99 u[i,j] += v[i,j] endloop
Heightfield mesh creation and cell iteration u[x,y] ; dimensions n by n
Heightfield mesh creation and cell iteration Quad[i,j] such that i = 0, j = 0; Vertices are U[0,0], U[1,0], U[1,1], U[0,1] U[i,j], U[i+1,j], U[i+1,j+1], U[i,j+1]
Heightfield mesh creation and cell iteration Inner loop iterates over i, the x coordinate Last quad: i=5 (i = n-1)
Heightfield mesh creation and cell iteration Outer loop iterates over j, the y coordinate Last row: j=5 (j = n-1)
Smoothing • For every grid cell u[i,j], set it to average of itself and neighbors • Implementation concerns: • A. looping order • B. boundary cases • C. both • D. none
Heightfield mesh particle collection Step 1. Zero out all u[i,j] Step 2. For each u[i,j], determine which particles are closet to it (bounding box collision test) Alternative Step 2. For each particle, determine which (i,j) it is closest to (translate position half a cell, then floor it)
Navier-Stokes Equation • Momentum equation • Incompressibility ut = k2u –(u)u – p + f Change in velocity Diffusion/ Viscosity Advection Pressure Body Forces u: the velocity field u=0 k: kinematic viscosity
d d d d d d d d d d d d d d d d Fluid Models Grid-based (Eulerian) d is density Particle-based (Lagrangian) Hybrid Animate the particles “Collect” particles to compute density
Fluid particle forces • Adhesion forces : attract particles to each other and to other objects • Viscosity forces : limit shear movement of particles in the liquid • Friction forces: dampen movement of particles in contact with objects
Adhesion Force Attract particles to each other and to other objects (similar to gravitational force) The adhesion force between (left) honey-honey, (middle) honey-ceramic and (right) non-mixing liquid
Viscosity Force • Limit shear movement of particles in the liquid • The momentum between the neighbour particles are exchanged Pp Ppn
Friction Force • Dampen movement of particles in contact with objects in the environment • Scale down the velocity by a constant value
Case Study: A 2D Fluid Simulator • Incompressible, viscous fluid • Assuming the gravity is the only external force • No inflow or outflow • Constant viscosity, constant density everywhere in the fluid
Stable Fluids – overview of data Velocity grid Density grid Move densities around using velocity grid and dissipate densities Move velocities around using velocity grid and dissipate velocities Walkthrough: http://www.dgp.utoronto.ca/~stam/reality/Talks/FluidsTalk/FluidsTalkNotes.pdf Source code: http://www.autodeskresearch.com/publications/games
Additional readings • Fluid Simulation for Computer Animation • The original stable fluids paper • An update to the stable fluids work • Fast Water Simulation for Games Using Height Fields