Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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