Stop Motion Character Rig

I was recently asked for a quote for producing Stop-Motion animation. Stop-Motion is using a camera to take photos of an object, moving it slightly, and repeating until you have a bunch of photos to be used as frames. It’s how South Park, Gumby and Chicken Run were made and how people like myself go insane. Like most animation, it’s incredibly time consuming and expensive. If you want to pull your hair out with frustration check out this behind the scenes feature of what has to be the most unnecessary application of Stop-Motion you’ll ever see.

Knowing this project’s limited budget, I offered to put together an animation test that looks like Stop-Motion but is actually entirely digital (because I’m nice like that). The aim was to keep that charm of hand crafted stop motion but still allow us to animate a few minutes per day instead of a few seconds. You can see a demonstration of the After Effects Rig below.

So to achieve the effect I basically had to make an expression that makes the character to ‘bump’ around from it’s position a random amount at random time variable of either 25 frames, 12.5 frames or 6.25 frames (so it looks like it was animated on 8’s). If you’re interested to see the code I used, much of it was lifted from this tutorial and I made some small adjustments to fit the Stop-Motion Effect my project required.

velo = 2 ;
// I used the velocity of an external object to determine the amount the pieces should move, you could just set this to a whole number. This allows me to change the acression of the jitter as needed ;

segMin = 1; //minimum segment duration
segMax = 4; //maximum segment duration

// this is the amount of time of each segment. 1 is a quarter of a second and 4 is a whole second ;

minVal = -2*velo;
maxVal = 2*velo;

//you can see the changing velocity effecting the min and max offset values ;

end = 0;
j = 0;
while ( time >= end){

j += 1;
seedRandom(j,true);
start = end;
end += 0.25*Math.floor(random(segMin,segMax)) ;
}

// basically saying, if we are past frame 1, make a random whole number between 1 and 4 (our min and max segment times) and thn convert it to a percentage of a second (to keep it looking like it’s on eights) ;

endVal =  random(minVal,maxVal);
seedRandom(j-1,true);
dummy=random(); //this is a throw-away value
startVal =  random(minVal,maxVal);

if(end>time>start){startVal}else{endVal}

// spits out a random number! Simple ;

I hope this helped someone out there and if you have a way to improve the code then I invite you to have a crack at it!