Go Fish: The Final Assignment
An absolute doozy of a final assignment that implemented everything we had learned in the previous lessons. Just to be clear, there isn't a single keyframe in this entire animation as all movement is driven by expressions.
This assigment was all about dynamically resizing elements using both sourceRectAtTime() and the linear() functions. Could see plenty of applications for this with data brought in from outside sources.
Random Art Generator
After setting up the rig, we used the random() function to, unsurprisingly, randomly generate different versions the animation by simply changing the seed variable, Super powerful stuff that could save mountains of time when applied to the right project.
Using expressions and making calculations within 3D space, the mountains and clouds are brought into and out of focus depending on their distance to the plane. Also had fun rigging up the controls and the rotation of the plane to a rig with sliders that allowed me to add a bunch of chaos at the end of the plane ride without too much difficulty. Hooray for rigs!
School of Marlin
Next to my good friend wiggle(), valueAtTime() is my next most used function and it's easy to see why. Basically all it does it looks at a property at whatever point in time and spits back a number. In this case, we now know where the fish ahead was about a half a second ago and we can apply that property to trailing fish and so on down the line. Easy peezy!
Armed with an easily adjustable rig and some straight-forward math, we can easily adjust the speed of the planets while keeping the labels for each planet with the correct orientation.