Making Rotarium

Posted on September 7, 2010


Making Rotarium wasn’t easy because I’d never done anything like it before.  I made it with a free software package called Blender.  It has the kind of user interface that baffles and overwhelms until something clicks in the user’s mind.  Then it all makes sense.

I could try to tell you all about how to use Blender, but that’s what documentation is for.  It will do a much better job of that than I would.  Furthermore, different 3D animation software packages all rely on the same underlying principles, but they tend to have wildly different user interfaces, so details won’t help you if you’re not using Blender.  Instead I’ll try to give you a general idea of what was involved in making Rotarium and focus on a few issues specific to this particular animation project.

The first concept I’ll introduce is the IPO curve.  IPO curves come into play after you’ve created a static 3D model and now you want to change some aspect(s) of the model over the course of time (i.e. animation).  A separate IPO curve can be created for every value that needs to change.  Some examples are position (x, y, & z), orientation (x, y, & z – rotation vector), color (red, green, & blue components), scale, position of a joint, etc….  There are MANY properties that can be controlled this way.

IPO curves to move the stick figure guy

The IPO curves appear on a plot with time as the X axis and value (e.g. angle in degrees) as the Y axis.  You manipulate the curves in a piecewise fashion by explicitly setting values at particular times (called keyframes) and telling Blender how to interpolate between the values.  Interpolation simply means that the values in between the ones you specify are computed automatically according to some rule.  Your basic options for that are Bezier, linear, and constant.  Bezier gives you a nice smooth curve – good if you want to avoid any sharp changes (note for calculus-folk: continuous second derivative with respect to time).  Linear interpolation connects the points with straight lines – good if you want a constant rate of change between your keyframes.  Constant interpolation makes it so the value changes only at your specified points – good if you want sudden, discontinuous changes such as teleportation.

IPO curves work great for many components of animation, but when it gets too complicated to be micromanaged there are other mechanisms you can turn to.  Blender lets you set constraints that, for example, keep one object in the same position and orientation relative to another object which may itself be moving.  Blender also has a physics engine that can use numerical methods to determine how water should pour, how balls should bounce, how cloth should blow in the wind, etc….  All you have to do is set the mechanical properties and constraints of the system.

Some of the Python code used in Rotarium

You might guess that this is how I simulated the physics of Rotarium, but it isn’t.  The actual motion of the objects in Rotarium is very simple: straight line and circular motion.  The physics engine would add unnecessary complication.  The tricky parts were getting the room and camera accelerations right and computing those force and velocity arrows in both reference frames.  The physics engine offers no solution to those problems, but fortunately, those things are all determined by equations that can be found with some algebra and calculus.  And Blender does offer a very powerful way to control animation when all else fails: it allows you to control everything in your scene through the Python programming language.

Python is a robust language with which you can implement practically any animations you want, if you know what you’re doing.  And it turns out, to my relief, that I did!

Blender's sequencer

Believe it or not, Blender is also decent video editing software!  I laid in all the live action videos and stills and did all the cross-fades and such right in Blender.  That feature is called the Sequencer.

If you’re interested in learning about computer animation from a professional, check out my cousin Jason’s blog shhLIFE! Jason was a senior animator and then an animation lead for Lord of the Rings with Weta Digital!  He also worked on numerous other movies such as Madagascar and he’s even written master classes on the topic of character rigging.

Thanks for reading!