# Animate tori around surface of another torus

How can I replicate this effect (with animation), substituting the flat circles for 3D tori?

animated

I have tried starting with a torus and using an array modifier around an empty object to duplicate and scale it, but I am not sure how to apply a smooth circular positioning+scaling to the resulting pieces. Additionally, scaling in this way results in wide but flat rings, when what I am really looking for is to modify the circumference of the tori, leaving their cross sectional width constant.

A possibility is to use the properties of 'simple deform' modifier.

I've chosen to make the base flat shape using two arrays (but you can do it another way and with the shapes you want):

Then added two simple deform with 'bend' mode:

The first simple deform is centered on an empty which is rotated 90° around Y.

The second is centered on another empty which is rotated 90° around X.

Then moving one of these empties along X will tune the torus radius.

Note that the first is not set totally to 360° as if, first and last rings may be too close.

Now parent the torus to a third empty, then move this empty along X to obtain the wanted effect:

What is happening here is that if moved, the torus origin will change. But the deform modifier keep the shape where their axis origins (the empties) are. So it is as if the geometry was shifted from its origin.

A bit complicated solution maybe, but you can change the shape easily, for instance adding a wave effect:

• I've tried starting from scratch and using your instructions. Everything works up to the first bend, but the second one does not seem to apply properly. Rather than rotating around the second empty, it skews towards it. i.imgur.com/BTy5CLm.png – shpen Aug 10 '19 at 5:15
• @shpen, maybe you forgot to rotate the empties used for the modifiers: the first rotated 90 around Y, the second rotated 90 around X. – lemon Aug 10 '19 at 6:28
• I did. Here is my blend file dropbox.com/s/tisv398b7smc0bu/… – shpen Aug 10 '19 at 7:01
• @shpen, there are two array modifiers in my setting, in order the cylinder can be bent. In your the base cylinder cannot be bent as there is just the extremities. – lemon Aug 10 '19 at 7:15
• Ah, I see. I made the original cylinder much shorter, used an array to duplicate it to an increased length, and now it is working great. Thank you! – shpen Aug 10 '19 at 22:32

Because the Curve modifier on a cyclic curve is itself cyclic with respect to the deformed object's location, you can do this with 2 curve modifiers.

• Create a curve-sheet made of multiple. straight, subdivided segments (note the orientation):

I created mine by taking the loops out of a subdivided plane, and converting to a curve.

In the next step, we will create a circle to deform this sheet into a tube.To get the measurements right, arrange for the Z-dimension of this curve-sheet to be 2*pi*[the circle's radius] with the scale applied, and then delete the top line.

• Create a Curve-circle of the minor radius, which we will use with a Curve modifier to roll the sheet into a tube (again, note the orientation of its local axes)..
• ..and create a second Curve-circle for the major radius, at right-angles to the first, but with local axes aligned in the same way as the first, as shown:

• Assign 2 Curve modifiers, the first to roll the sheet into a tube around the minor circle, and the second to roll the tube into a torus. Both modifiers and their settings are shown here, with only the first active in the view):

..This is with the second modifier active, too:

• (You can use either the curve object's native profile to give it thickness, or give it a bevel object)
• With these orientations you can get a cyclic animation by keying 2 (linear-interpolation) frames of the sheet's Z location. 0 at frame 1, a whole-number multiple of the Z-gap between the segments on the last frame:

It's probably sensible to parent the whole lot to an empty, so you can move it about without it falling apart.

2.79 version here (which will open in 2.8, too):

• I am able to get this method working up to the first curve. But the second curve is not working appropriately. I believe this is because I am not doing this step correctly: ..and create a second Curve-circle for the major radius, at right-angles to the first, but with local axes aligned in the same way as the first I am not sure how the local axis works or how you modify it. – shpen Aug 10 '19 at 5:47
• @shpen The behaviour of some modifiers with respect to local axes is logical, but can be really counterintuitive. In situations like this, I find it easiest, with 'Local' set as your transform orientation, and the gizmo showing so you can see the local orientation, in Object Mode,to rotate the object (its axes) into the desired direction. Then the mesh might be pointing the wrong way. So in Edit Mode, rotate the object's mesh the way you want it (which will leave the axes where they were). Not always the quickest way, but you can see what's happening at each step. – Robin Betts Aug 10 '19 at 7:17