Physically Based Modeling

Download Report

Transcript Physically Based Modeling

Physically Based Modeling
Let physics take over!
Physically Based Modeling
• Account for forces in system
• Account for object interaction,
e.g. friction, collision
Spring-Mass-Damper
• Model: jello, cloth, muscle
– Have gravity: add mass to vertices
– Have stability (add stiffness to flag pole)
– Put springs on each vertex, allowing to stretch
a finite amount
– Another use: angular springs on polygon
corners to prevent self-penetration
– Numerical integration for animation
Governing Equations
• Hooke’s Law (for graphics):
Fs = ks(dist-len) where
F
V1
– len = rest length
– dist = current length
– ks = spring constant
• Fij = -Fji = ks(distij(t) – lenij)dij
– Where dij = unit vector along i-j
– t = time
V
• Fs = Σ Fij (sum of all edges
coming out of a vertex)
E12
V2
E31
V3
E23
Look at neighbors
when calculating
spring force!
Damping Force & Angular Springs
• FD = -kd v(t)
• Damper force is
proportional to velocity
• and acts in direction
opposite to velocity
M1
M2
• NET FORCE:
F = Fs + Fd
= ks(dist-len) -kd v(t)
• Angular spring:
τ (torque) =
ks[Ө(t) -Ө(rest)]
- kdӨ(t)
Object Representation
• Vertices: mass
• Edges:
– Spring, damping constant
– Resting length
– Vertex IDs
• Each vertex has
–
–
–
–
–
Current position
Current velocity
Current acceleration
Mass
Number of edges
X, Y, Z
components
How it all comes together
• Use Newton’s Law (F = ma) to calculate
acceleration for every vertex
(big system of linear equations)
• Basic strategy: accumulate acceleration from
different sources (Gravity, Spring, Damper) and
integrate 2 times to get velocity and position
– Can use Runge-Kutta, for example
• For project: you can use xspringies (2D) & ODE
library or other library you can find or roll your
own
• Make sure to cite your sources
Details (source Paul Bourke)
Create the particles
Create the springs between the particles
Initialize the particle and spring
parameters
loop in time
{
Update the particle positions (solve ODEs)
Display the results somehow
}
Update Particle Positions
• Calculate force at each point
– Add Positive force: Force*mass for each X,Y,Z
– Subtract Drag: drag*velocity for each X,Y,Z
– Handle spring interaction
• For each spring
– For each of X,Y,Z of attached points
» Force = Hooke’s law
» Force +=
damping constant(Δvelocity of points)(Δlen of points in
direction)/lenx,y,z
» Force *= -(Δlen of points)/lenx,y,z
» Add or subtract force to/from point (if the point is not fixed)
Calculate derivatives for points
• We already have velocities:
– dpx/dt = velocityx
• Velocity derivative:
– dvx/dt = forcex/mass
• And solve with your favorite ODE solver
(Runge-Kutta..)
– Update positions
– Update velocity