Fluids and Cellular Automata
Download
Report
Transcript Fluids and Cellular Automata
Fluid Animation
CSE 3541
By: Matt Boggus
• Procedural approximations
• Mathematical background
• Computational models for representing fluids
• Using the computational models
– Forces
– “Stable fluids” by Stam
• Goals:
–
–
–
–
–
Cheap to compute
Low memory consumption
Stability
Plausibility
Interactivity
• Simulate the effect,
not the cause
Real-time fluids
• Procedural water
– Unbounded surfaces, oceans
• Particle systems
– Splashing, spray, puddles,
smoke, bubbles, rain
• Heightfield fluids
– Ponds, lakes, rivers
Procedural water – cos wave
• Visualization of parameter changes using
graphing calculator
Superimposed linear waves
Normal vector displacement
Height displacement
Heightfield fluid
• Function u(x,y) gives height at (x,y)
• Store height values in an array u[x,y]
Can this wave be represented using
a heightfield?
Setting and updating heightfield fluids
• Methods
– 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
Initialze v[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
Clamp at boundary
Example videos
• Real-Time Eulerian Water Simulation
– Grid based
– https://www.youtube.com/watch?v=Jl54WZtm0Q
E
• SPH based real-time liquid simulation
– Particle based
– https://www.youtube.com/watch?v=6CP5QvfuD_
w
Fluid Models
Grid-based (Eulerian)
d is density
Particle-based (Lagrangian)
Hybrid
Animate the particles
“Collect” particles to compute density
d
d d
d
d
d d
d
d
d d
d
d
d d
d
• Momentum equation
ut = k2u –(u)u – p + f
Change in Diffusion/
velocity
Viscosity
• Incompressibility
u=0
Advection Pressure Body
Forces
u: the velocity field
k: kinematic viscosity
Diffusion/Viscosity Force
• Limit shear movement of particles in the liquid
• The momentum between the neighbour particles
are exchanged
Pexch
v k (d pn )( Pp Ppn )t
2n 1 k (d i )
n
v : viscosity coefficient
k () : A weighting function (Gaussian)
d i : distance from the processed particle
Pp , Ppn : momentum of p and pn
Pexch : momentum exchanced
Pp Pp Pexch
Ppn Ppn Pexch
Pp
Ppn
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
Advection Force
Velocity grid
Pressure force
Pressure force
Friction Force
• Dampen movement of particles in contact with objects
in the environment
• Scale down the velocity by a constant value
vˆt fvt
Rendering particles
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)
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
(SIGGRAPH course)
• The original stable fluids paper
• An update to the stable fluids work
• Fast Water Simulation for Games Using Height
Fields (GDC talk)
ADDITIONAL SLIDES
Heightfield mesh creation and cell
iteration
• Covered earlier with terrains
Heightfield or Heightmap terrain data
2D greyscale image
Surface in 3D space
Images from http://en.wikipedia.org/wiki/Heightmap
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