Download Physically Based Modeling

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts

Theoretical and experimental justification for the Schrödinger equation wikipedia , lookup

Standard Model wikipedia , lookup

Electron scattering wikipedia , lookup

Elementary particle wikipedia , lookup

Transcript
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