How to animate belt drive or chains with gear?



I downloaded a model online with many gears and a belt drive. I have all of the gears animating with xpresso just fine, however, the belt in the model is already deformed and I am not sure how I might go about animating the existing model as-is. I did try modeling a small portion of the belt and trying to clone it along a path and that started to work, but the ‘teeth’ only ever point downward and do not follow the inside curve of the belt as in the attached screen grab.

I was hoping to use rollit, but it doesn’t appear to work in r13. I would really like to have this whole assembly working correctly, but I’m stuck on the belt drive portion. There is a similar belt behind this component, but without ‘teeth’. Any suggestions for animating this as well?

Thank you!!



and a render of a section of the assembly:


You could calculate the circumference speed of one of the wheels.
Feed that to a RangeMapper with inputLow 0 and input Hi Length
of the belt (make a spline the shape of the belt).
Have the output at default 0 to 1 (0 - 100%)

Then feed the result into the offset parameter of ie a Cloner or
SplineWrap Deformer.
As you then have transformed Units to percent then the belt’s
geometry (again clones or a mesh in the form of your belt
wrapped around the spline) will follow the wheels rotation.

In any case you would most likely redo the actual belt to make it work.




you could clone your teeth in linear mode (end point), with an appropriate number of clones and a total movement equal to the lenght of the spline. Then instance the cloner and use the instance in a connect object (maybe it works without instancing too) to get a connected surface. Finally you use a splinewrap to deform the teeth chain. With spline wrap you can animate the offset as Lennart says to get it to move.
I did a quick test, hope this helps!




For something like that where you already have the belt modeled as one piece, I’d simply rig it with a chain of joints and the CD Spline Constraint in my CD Constraints plugin:

Since the CD Spline Constraint can compensate values beyond the 0% to 100% slider limits, you simply set up the Range Mapper to map degrees to percent, for example figure out what percent the joint chain needs to travel along the spline for every 10º and you’re done.

I’ve used it before to easily setup a bike chain with a single Range Mapper:

Cactus Dan


One thing to read up on when matching belt lugs and pulley teeth is the pitch line between the two.
Then always use the same pitch line spline path to drive geometry. Especially if your trying to align multiple objects on a rotational axis. But yea read about pitch lines, it could save you a headache!

Fot the most park, as a ballpark figure, the pitch line you use to calculate circumference is about half the height of the tooth pulley, plus half any tolerance you have between the pulley teeth and belt lugs. As for animating the belt, yea there are a couple ways… you could do spline effected lugs using a cloner. Or use a cloner to generate the lugs, convert it to geometry and spline wrap the geometry ( make sure have proper topology for the deformation. ) . Or you can just use a cloner to distribute out your lugs, and group the cloner itself with a spline wrap ( that skips having to convert to geometry ). I’ve treated the lugs seperate from the belt thickness before as well, and just used a extruded outlines spline for the belt thickness. Then ran offset lugs ( using the pitch line! ) along the inside surface ( or outside, or both! double sided belts are fun ) using a spline effector.

Of course then there are a few dozen ways to set up the animation controls using xpresso. You could offset the entire belt along the path to 100%. Or you can divide the clone count by 1 to get a single lug index offset % to feed into a range mapper, which you could drive with a float % slider keyed 0-100% and set to loop forever. You could also define a variable distance you need the belt to move, then calculate the offset % based on the arc-length of the belt path spline ( pitch line! ). Or you could…or you could…or you could…

( Haha sorry I animate concepts for a packaging company, and play with belt type loops all day long. )


Thanks for the responses, everyone! Definitely some food for thought and I’ve got some things to try out. I’ll let you know what I come up with and post a render.

Thanks again!



One example with old XPresso way.

Another example in which cogs are arranged by MoGraph. Much more simple.

This System is driven by 2 XPressos and one MoGraph Cloner.

  1. XPresso on “cogwheels”

This rotates “sub” and “idler” wheels, according to angle of “main” wheel. So you can run the system by rotating the “main” wheel by hand or keys.

  1. XPresso on “belt”

This runs “belt_run” spline on “belt_org” spline, according to angle of “main” wheel. Since the spline itself runs properly, SweepNURBS with the spline runs automatically. Also cloned cogs which are targetted to the spline run automattically without any trick. Very simple.

  1. MoGraph Cloner

This clones “cog” object, and arranges them on “belt_run” spline. Also I made an instance of “belt_run” spline (belt_run_rail), and place it aside of original, to align face of cogs.

Note. This scene could be open in R12, but may not work properly by bug, though it was made by R12.


Wow, thanks for the excellent example and project file!! This software impresses me more and more every day!



Hello Cactus Dan!

I am using your CD Spline Constraint to animate a bike chain. So far, so good!

However, I have a problem that I can’t seem to figure out. I did the following steps to get to this point:

1-created a spline based on the already modeled bike chain by creating a point at every joint in the chain. Selected all points and made them soft tangents and evenly spaced.

2- copy/paste first 2 chain links and group them in a null and create a hierarchy - null->link1->link2 (outer and inner link) & hide full chain.

3- Apply CD Spline Constraint to null parent and setup plugin to be align the objects on the spline. Duplicate spline and use it as the up vector (which I had to move WAY down the Y axis in order to correct the orientation of the chain links -the Up vector thing sort of eludes me)

  1. Duplicate my chain hierarchy until the chain is complete and adjust offset to align them as close as I can.

In this test, the chain position option is animated. The problems starts in step 3.

a) As soon as I align the 2 objects to the spline, both links sort of pop up at an angle out of its original position and I can’t seem to find a way to position/rotate the object itself after constraining to the spline to match the original link position so the chain looks flush and not a stair step alignment.

b) If you step through the animation, look at the chain as it moves toward the camera going down - the outer link sort of ‘pops’ from it’s position on the spline and I’m not sure how to prevent this from happening. The animation works and the popping is barely noticeable, but I’d like to correct it if I can.

Any thoughts? Thank you!



Gosh, you stare at something long enough and the solution comes to you. The alignment problem started because the 2 links needed to have their rotations zeroed out first. I do believe I fixed it!



Hehe, sometimes it’s the simplest little thing that gets overlooked. I’m glad you got it figured out. :wink:

Cactus Dan


This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.