A DONUT challenge

I want to animate a donut.

There, I’ve said it.

Looking down on it in top view, I want each of its rings to move from the centre to the periphery, like ripples on a pond. Looking from exactly the opposite side, the rings would move from the outside, back inward. (In wireframe, you’d see both types of movement). A side/front view would show the right half moving clockwise, and the left half moving in a counterclockwise fashion.
I was able to achieve this effect in Maya (PLE) quite simply. On creating a polygon torus (donut) one of its editable attributes was called ‘Twist’. I was able to animate this easily with keys, so could control the speed at which the donut twisted. I haven’t found such an easy method in Blender (if it’s there and I’ve missed it, this string will fizzle out very quickly! :wink: ) Otherwise, I think it is actually quite a complex problem to solve. I’ve thought of two possible ways to approximate the behaviour, but each has its weaknesses.

1st method - Animate rings individually.
Start with 3 circles, of relative size 1, 5 and 9. The 5-circle remains static throughout. Effectively, it traces a ring which represents the “fleshless” donut. The 1-circle represents the smallest ring of the donut, enclosing the hole in the middle. The 9-circle represents the widest ring of the donut, about the perimeter. The current arrangement could be keyed to frame 1, and to frame 361. Then for frame 181, the size of 9-circle and 1-circle are swapped and keyed. Playing back, you would now see the 1-circle expanding to a size of 9, and the 9-circle contracting to a size of 1, then each returning smoothly to its original size. Now for position. For frames 1, 91, 181, 271 and 361 respectively, the 1-circle could be keyed at z = 0, +4, 0, -4 and 0 again. For the same frames, the 9-circle would be keyed at z = 0, -4, 0, +4 and 0 again. Now playing back the animation would show both circles following a path which traced the outline of the donut, treating the 5-circle as a kind of rotation-origin (there must be a proper mathematical term for this kind of thing?). It would need to have at least two more such rings to look convincingly donut-like. 8 would look better still, and 32… but so much work! A final touch, would be to add circles as segments/sections (as though looking through the core of an orange). Add one with relative size of 4 at 12o’clock position in top view, but perpendicular to the tangent of the 5-circle, then spin-dup 12 times around 360º, and quite a pleasing donut would emerge.
I don’t know how these individual circles could be grouped so that material and texture could be applied to the emergent donut, rather than to the circles themselves. I’m sure it is possible somehow though. The main problem I see with this method, apart from its time consuming construction, is control. I would like to have fine control over how fast the donut as a whole twists. Having control over individual rings is pretty useless from that point of view. But maybe there is a way…?

2nd method - Animate and duplicate a wedge.
This time start with a cylinder of say 32 vertices, created in front view. Going into top view, alter its shape and position so that with respect to the origin it looks like a single spoke extending outwards, ie closer to a coin-like cylinder profile than to the pencil-like profile, but still with a good thickness. Then spin dup 12 times around 360º. Ideally, each duplicate would posses its own identity, and have a local centre of its own (When I tried this, all the duplicates were grouped as one). The idea being that all could be selected simultaneously and the Rotate function could operate on each one about its own individual centre point, so that each cylinder moves like a wheel. If this could be achieved, hopefully it would grant me the kind of control I’m after, allowing me to have all vertices of all wheels keyed in precise alignments on precise frames - much better than the circle method above. But the appearance doesn’t yet resemble a donut at all. In top view, it looks like twelve spokes extending from the origin. To approach donut shape, the cylinders could each be tapered in appearance, so that they are thinnest where they are closest to the origin, and thickest at the periphery. Ideally this would happen smoothly, so that adjacent cylinders would have their faces touching, or better still be actually merged without losing their own unique centre pivot. Currently, I would have no trouble creating the wedge shaped cylinder, but when I came to rotate it, wheel-like around its own centre point, the thick part and thin part would both move. This is obviously no good, and in the 12x spoke version would look like total chaos! I need to somehow rotate the cylinder so that whichever vertex is closest to the origin is constrained to its narrowest, and whichever vertex is at the periphery is stretched to its widest. There must be a way…?

So which method do you think shows the most promise? (Or a combination of both???) I hope my descriptions aren’t too woolly. I would attach some screenshots if I knew how. I am completely new to Blender, and don’t mind being called naive at this stage. If I’ve just overlooked a simple control which would solve all my problems, then so much the better! It has been an interesting problem to tackle up until now.

I look forward to hearing your suggestions.
Many thanks!


I can see I have alienated the community with my bad descriptions and eccentric demands: so far, 70 reads and no replies…(At least, that was true when I started writing this :wink: ) I was holding out for a record but have made enough progress to know what the question should have been in the first place.

The first method I described shows little promise. I carried out all the steps as I described, and got as far as having 4 circles chasing each other around the surface of a(n invisible) donut. Then I tried to create a face in between the vertices of two of the rings. I found that it was not possible to select two seperate objects and go into edit mode to show the vertices belonging to both, without first joining both objects. Doing this, of course, sacrificed the IPO curves of one ring, and so the animation stopped making any sense.

The cylinder method is showing much more promise though. A lattice is the solution to making it rotate so that the thin part stays closest to the origin, and the fat part at the periphery. This works a treat. I have yet to do the necessary tinkering to constrain the cylinder into a wedge of the correct proportions: if 12 wedge-cylinders are to be packed about the origin so as to look like a clock face from top view, then each needs to have a 30º angle between its two sides. I just need to do a bit of maths to get it right.
The problem which remains unsolved is that of rotating all 12 wedges simultaneously. Each one is a unique object with its own object origin. If I select all 12 with the intention of rotating them, I have the 4 options: Bounding box centre, Median point (these two would amount to the same in this case), 3D cursor, and individual object centres. The last of these comes closest to what I want to do, but still misses the mark. It would cause all 12 objects to revolve each about its own individual axis, but in parallel.
Bare with me… The cylinder which appears at 12 o’clock in Top view (that is, its edges, 30º apart point to 11.30 and 12.30) should rotate around an axis which runs parallel to the x-axis so that the narrow side, closest to the origin, moves towards the viewer, and the fat out-side slinks away from the viewer. This would be achieved by a standard clockwise rotation in side view. The cylinder at 6 o’clock, would also rotate “so that the narrow side, closest to the origin, moves towards the viewer, and the fat out-side slinks away from the viewer”; this time, however, in side view it would be rotating counter-clockwise. Those cylinders at 3 and 9 o’clock would have a similar relationship, rotating about an axis parallel to the y-axis, and executable from front view. Of the remaining wedges, rotation would be through axes of angles at 30º, 60º etc. (if we call x-axis 0º and y-axis 90º). I could go around each one, animating it individually, but it would be tiresome. I would much rather group all together so that they could be rotated appropriately under one control, which I would call DonutTwist.

Needed a breather…
I’ll describe what I have in mind, and maybe someone can tell me how I would do it. I would like to see the local axes of each object drawn at its object origin. In each case, the z-axis would be identical to the world z-axis. The x-axis, however, would point its positive sense directly at the origin of the grid. This would force the y-axis to lie in alignment with the rotation axis about which I want all wedges to be spun. The wedges at 12 and 6 o’clock would now have their positive x-axes pointing at each other, so that with respect to their own local axes, their rotation could be described as identical, even though it is opposite w.r.t. world axes. In fact, rotation of all 12 wedges would be identical w.r.t. their own local axes. With these conditions in place, I would hope that there is some unifying control which could cause all objects to rotate identically, rather than parallelly, about their own local object axes.

Any ideas at all?

stop righting so much :o