Roller chain, Chain drive, Chain and Sprocket, Tank treads -- The easy way

READ THIS FIRST: When I wrote this I was not aware of the updated Tank Track fix ( ) that was posted a couple of days ago. If you used that solution, you’ll get almost exactly what I’m describing here. I really don’t mean to step on any toes, it’s just that I already wrote this and thought I might as well post it if anyone wants step-by-step instructions in text form.

I’m posting this in the hope that when someone googles “blender” followed by any of the mechanisms mentioned in the title they’ll eventually find this.

The following steps will create a chain drive where the segments themselves don’t deform or stretch, and keep an exact distance from each other at all times. This is useful for the menchanisms mentioned in the title and other scenarios.

The impetus for posting this is that almost everywhere I looked I kept seeing the answer: “there’s no simple way to do this in Blender”. That’s simply not true. While more intricate setups with additional features exist, the basic mechanism can be achieved in 7 steps:

(start with a new file, and delete the default cube/light/camera)

Step 1:
With the 3D cursor at the origin (shift-C), create the following:
A nurbs path (closed, whatever shape)
A plane (facing up, which it will be by default)
A cube

You might want to shrink the plane and cube depending on the size of the nurbs path. If you do so, do this in edit mode – keep the scale of the objects themselves at 1. You may also want to “squash” the cube on the Z axis, so you get a slab-shape.

Step 2:
Select the nurbs path and rotate it 90 degrees on the x axis. Enter edit mode and move the entire path (press A to select all the curve points) so that the bottom of the path lays on the x/y plane. You’ll probably want to tweak this later, but for now this is the easiest way to start.

Step 3:
Select the plane. Add an array modifier and increase the “count” value by a few (say, 10), and increase the relative offset a bit (you can change either of these values later depending on what you want to achieve).

Step 4:
With the plane still selected, add a curve modifier, and pick the nurbs path in the “object” field.

Step 5:
Adjust the number of array segments (the “count” value in the array modifier) to fit the length of the path. For now just make enough of them so the first and last planes don’t overlap.

Step 6:
Select the cube and the plane, with the plane being the active object. Press Ctrl-P to parent the cube to the plane (simple parenting, the first option on the list).

Step 7 (the magic step!):
Select the plane. Go to the object panel (the cube icon), and in the “duplication” area select “faces”.

Optional Step 8:
Parent the plane to the nurbs path to keep the mechanism intact.

Drive the mechanism: Move the plane to roll the chain.

I’m attaching a file in which I followed the instructions above exactly.

You’ll want to move the plane so that the original segment appears a bit behind the mechanism, and is easier to animate/drive. It will not show up in renders, just in the viewport.
You’ll need to tweak either the path, the segment, or the “relative offset” value in order to get the first and last segments at a distance that matches all the other gaps. Optionally, you may not want any gaps at all, so do this in order to make the first and last segments touch (almost) exactly.
You can use this method to create a chain that isn’t on a single plane, but in actual 3D (like a non-intersecting figure-8). I haven’t tested this thoroughly, however.

I tested this method in Blender versions 2.69, 2.7, and 2.71, there doesn’t seem to be any difference in the outcome.

If you have any comments, optimizations, bugs, or questions, post them below.

I hope this was useful to you.
simple_chain.blend (466 KB)

I got a few E-mails asking for a working example file of a looping/interlocking/seamless chain drive, so here it is. Open it and press play to see it in motion. Remember that the length of the link (plus the gap) dictates the distance between each link geometry, so you want the “hinges” of the segment to actually be on the same line as the link’s edges.

link_demo3.blend (482 KB)