180 likes | 524 Views
Maths and Technologies for Games Animation: Interpolation. CO3303 Week 2. Interpolation for Animation. Given two transforms for a model, we can calculate the transforms in between the two: This is called interpolation Animation is stored as a sequence of key frames (transforms).
E N D
Maths and Technologies for GamesAnimation: Interpolation CO3303 Week 2
Interpolation for Animation • Given two transforms for a model, we can calculate the transforms in between the two: • This is called interpolation • Animation is stored as a sequence of key frames (transforms) • To get frames between the key frames, we use interpolation • For example a rotating arm has 2 key frames stored • One at the start of rotation (T1), one at the end (T2) • Calculate (don’t store) frames in between with interpolation
Previous Interpolation • We have interpolated between elements before: • Alpha blending – source and destination colours • Skinning – the effects of multiple bones • We used Linear Interpolation each time: • Alpha blending: Dest.R = Source.A * Source.R + (1-Source.A) * Dest.R • Skinning (with two bones) • Do you see a pattern? • N.B. Details for this section in Van Verth
Linear Interpolation (Lerp) • General linear interpolation between two mathematical elements P0 and P1 takes the form: • Typically t is in the range [0,1] - note that: • The parameter t selects a element P(t) in between the start and end elements P0 and P1 • If P0 & P1 are points, then P(t) will be on the line between them: • Hence linear interpolation
Linear Interpolation of Transforms • A transformation is typically made up of a position, a rotation and a scaling component • Can be stored in several ways, e.g. • Position: vector / scalars (x,y,z) or a matrix • Rotation: Euler angles, a matrix or a quaternion • Scaling: vector / scalars or a matrix • Can have a single combined matrix for everything • We will consider the effect of linear interpolation on each of the components separately • Then consider how this affects our storage choice
Linear Interpolation of Position • Linear interpolation applied to key-frame positions will give sensible in-between positions: • With several key-frames we get piecewise linear interpolation • Motion between points has sharp changes in direction: • May prefer smoother motion and we can use higher order interpolations to do this • But linear interpolation works and will suffice for now Piecewise Linear Interpolation Higher Order Interpolation
Linear Interpolation of Scaling • Scaling can also be interpolated linearly: • Works fine for one pair of key-frames • Again, linear interpolation over many frames will cause scaling rate to change sharply at each key-frame: • The speed of shrinking/expanding changes suddenly • Generally a less noticeable effect • Again, possible to calculate smoother result with higher order interpolation
Linear Interpolation of Rotation • Can apply linear interpolation to rotations if they are in matrix or quaternion form: • Ineffective with Euler angles • Unlike position and scale, the result is not correct • Even with just one pair of key-frames • The tips of the rotated vectors are interpolated • Resulting in an unwanted scaling • Incorrect angles – want quarter steps, but here α ≠ β
Normalised Lerp (Nlerp) • Can normalise the rotations to remove the scaling effect • Still have inaccurate angles • Normalising quaternions is trivial • Gram-Schmidt orthogonalisation used to normalise matrices (see Van Verth early chapter) • Allows us to use linear interpolation of rotations • If the overall rotation is small enough • Otherwise we need linear interpolation of the angles
Spherical Lerp (Slerp) • Linear interpolation of angles is same as linear interpolation of an arc on a sphere • So this technique is called spherical linear interpolation or slerp • The formula is different from linear interpolation: • As before – take a start and end rotation (P,Q), and a value t from [0,1] • Formula calculates the correct interpolated rotation
Slerp for Matrices • We can apply the slerp formula if P, Q are matrices • Matrix multiplication / inverse are understood • But how to calculate a matrix raised to a power? • i.e. Mt • Need to convert the matrix to axis-angle format, then calculate θt, then convert back • Very expensive • More than 100 operations
Slerp for Quaternions • Can show that slerp for quaternions is: • Expensive, mainly because of the sin functions • But sin θcan be precalculated • It’s constant for any pair of key frames • Has potential accuracy problems for small θ • However, more usable than the matrix version
Interpolation Summary • We want to interpolate between two key frames • Can use simple linear interpolation (lerp) for the position and scaling • For rotation, consider angle between the frames: • Can often use lerp on rotations & normalise the result • For large angles, use slerp • In any case store rotations as quaternions if you intend to interpolate them • Matrices expensive to interpolate, Eulaer angles ineffective • Note: there are some newer methods to approximate or avoid slerp