Physically Based Modeling Let physics take over Physically
Physically Based Modeling Let physics take over!
Physically Based Modeling • Account 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 V 1 – 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) E 12 V 2 E 31 V 3 E 23 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 M 1 M 2 • 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 (2 D) & 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
- Slides: 10