About Shake Splines |
Have your pillows ready, this has a high geek factor:
Natural Splines
NSpline(cycle, value@key1,value@key2,...value@keyN)
NSplineV(time_value, cycle, value@key1,value@key2,...value@keyN)
These are great due to their C2 nature. Second order continuity ensures the
acceleration smoothly varies over time, so the motion is visually pleasing.
The visual system is very sensitive to 1st and 2nd order discontinuities but
not to higher order discontinuities. But, in order to achieve the C2 thing,
the whole curve must be adjusted whenever a CV is moved. In the following example,
when keyframe 3 is moved, the segments to keyframe 6 are changed. Bummer, even
if the influence decreases very quickly as the number of intermediate CVs increases.
In addition, the CVs completely define the curve, so there is no tangent control
whatsoever. Beauty has its price.
CSpline(cycle, value@key1,value@key2,...value@keyN)
CSplineV(time_value, cycle, value@key1,value@key2,...value@keyN)
These trade off C2 for local control. When a CV moves, only 4 segments are
affected (2 before, 2 after the CV). In addition, for any CV, tangents are automatically
computed to be parallel to the segment joining the previous CV and the next
CV. They are the programmer's best friend because they are so simple to evaluate:
only 4 points are needed, which simplifies data management (no tangent or other
way too complicated stuff). Simplicity sometimes has the appearance of beauty.
Jeffress Splines
JSpline(cycle, value@key1,value@key2,...value@keyN)
JSplineV(time_value, cycle, value@key1,value@key2,...value@keyN)
These are similar to CSplines, except they are guaranteed to never overshoot.
If two CVs have the same Y value, a flat segment connects them. Very nice for
animation, since you have a good idea of your limits.
Hermite Splines
Hermite(cycle,(value,tangent1,tangent2)@key1,...(value,tangent1,tangent2)@keyN)
HermiteV(time_value, cycle,(value,tangent1,tangent2)@key1,...(value,tangent1,tangent2)@keyN)
These also give up on trying to produce a C2 curve, but they add tangent controls (so the animation is likely to look bad unless you eyeball it to be close to C2 each time you move stuff around). The ability to break the tangents is cool (Ctrl-click on the handle end in the Curve Editor). It takes some effort to get right but you can shape it the way you want. Some think that's the true beauty.
Linear Splines
Linear(cycle,value@key1,value@key2,...value@keyN)
LinearV(time_value, cycle,value@key1,value@key2,...value@keyN)
Not much mystery here. No smoothness, but you know exactly what you get. A
kind of primitive beauty.
Step Splines
Step(cycle,value@key1,value@key2,...value@keyN)
StepV(time_value, cycle,value@key1,value@key2,...value@keyN)
Gives you a stair-stepping spline that maintains its value up until the next keyframe. This is great for toggling functions.
Cycle Types
You can change how the curve cycles its animation before and after the curve ends.is represented by a dotted line in the Curve Editor. The value is declared with the first parameter of a curve, for example, Linear(CycleType,value@frame1,....). Each cycle type has a numeric code:
KeepValue
Keeps the value of the first and last keyframe when a frame is evaluated outside
of the curve's time range.
KeepSlope
Takes the slope of the curve at the last keyframe and shoots a line off into
infinity.
RepeatValue
Loops the animation curve. It works best when you set the first and last points
at the same Y value, and maintain a similar slope to ensure a nice animation
cycle.
MirrorValue
Also loops the animation, but inverts the animation each time the cycle repeats.
OffsetValue
Also loops the animation, but offsets the repeated curve so that the end keyframes
match up.