Blender Stack Exchange is a question and answer site for people who use Blender to create 3D graphics, animations, or games. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

We know that the there is an Object Offset option for Array modifier, but when trying to make a circular array with that offset object as the center of the array circle, it always doesn't behave quite like what's expected. So how to make a nice and controllable circular array?

P.S.: There is an old trick on CGCookie about moving the object's origin. I wonder if there is any way to do this without changing the location of the origin. :)

enter image description here

share|improve this question
Why don't you want to move the origin? Of course it is possible, you just have to calculate the rotation and translation of the empty manually. Not hard with a little bit of trigonometry but generally unnecessary. – his Jan 6 '14 at 3:13
Since the original origin will be taken in further use. And it is not so easy to calculate it back unless it fits any item listed in the SHIFT CTRL ALT C menu. – Leon Cheung Jan 6 '14 at 3:25
I updated my answer. – his Jan 6 '14 at 5:41
The link on CGCookie seems to be gone. I couldn't find it but would love to see the other option as well if you can relink? Thanks! – fabrice d Mar 31 at 5:54
@fabriced Oh right, it does outdated. Luckily I tried to find the video on YouTube. Please recheck the updated link. – Leon Cheung Apr 1 at 0:43
up vote 25 down vote accepted

Add an empty at the origin of the object that you want to duplicate. (Remember to hit CtrlA and select rotate and scale, to apply transormations on the original object). Then, add an array modifier with object offset linked to this empty.

Set the 3D cursor to the desired centre of the circle. Add another empty here. Make it the parent of the other empty. Now select only the centre empty. Rotate. The amount of rotation is of course dependent on the number of objects, e.g. 12 objects = 30°.

If you want the single elements to "touch" as in your picture you need to either adjust the object width or the radius. The circumference of the circle is 2 * PI * radius, so the width has to be the nth (e.g. 12) part of it. (Or, if it is not about absolute exactness, it can be done visually.)


You probably want to parent the object to the centre empty.

This circle is "controllable" as you can simply change the angle by rotating the centre empty.

share|improve this answer
Hi his, I just updated my question with more detail. Could you please take a further look at it? Thanks. – Leon Cheung Jan 6 '14 at 3:08
This makes sense to me. I just wonder what if the cube already got a parent before that, in that case, you have to clear the old one and parent it to the center empty (then parent back again?). But your idea is indeed what I mean by "controllable". – Leon Cheung Jan 6 '14 at 6:52
The cube would be the parent, the centre empty its child, and the outer empty the child of the centre empty. So no problem there. – his Jan 6 '14 at 6:57
Good point. Yeah, I think this solves all concerning problems. By the way, I bet the Pivot constraint can be used instead, similarly. So it seems plenty of ways in doing so. If you think the Pivot constraint works as well, please consider complementing that in your answer to guide other guys better. :) – Leon Cheung Jan 6 '14 at 7:06
Probably. But that constraint is marked with "very buggy", even in the GUI. I would refrain from using it yet for productive work. – his Jan 6 '14 at 7:19

Just want to complement with several tricks that I just figured out. They all share with the same idea - to offset the rotation pivot of the Offset Object:

Variant 1:

Using 3D Cursor as pivot. (PROS: Fast and straight forward. CONS: Not suitable for animation)

enter image description here

Variant 2:

Using another object as rotate center.

enter image description here

Variant 3:


enter image description here

Variant 4:

Using Pivot constraint.

enter image description here

Variant 5:

Using Hook modifier and Copy Location constraint.

enter image description here

share|improve this answer
How do you "drag-multiply"? (First gif) looks neat – fabrice d Mar 31 at 5:55
I just select the cube then hit R to rotate along current pivot (I've switched pivot type to 3D Cursor, as seen in the same gif). – Leon Cheung Apr 1 at 0:32

To do that, you would need the arrayed object's origin to be in the same location as your offset object's origin. Try this test:

  1. Add a cube.
  2. In Edit mode move that cube to the left. The cube's origin should remain unchanged and in the same location.
  3. Return to Object mode and add an empty (hopefully you haven't moved your 3D Cursor, so the empty should have the same origin as your cube).
  4. Rotate the empty (say... 5 degrees)
  5. Add an Array modifier on the cube using the empty as your offset. You should see the circular array form around the empty.
share|improve this answer
Hi Fweeb, yep, it works. :) But is there any way to avoid changing the location of the origin? I think that's I really meant, wait I should update the question, sorry for that. – Leon Cheung Jan 6 '14 at 2:58
If you want the arrayed object to keep its origin fixed, then you might be better off using Dupliverts instead of the array modifier. It's an older technique, but it does have the side benefit of being more memory efficient (Dupliverts uses instances whereas the array modifier generates geometry). Failing that, you could also try a path constraint (to a bezier circle) on a regular array with just a relative offset. – Fweeb Jan 6 '14 at 5:30
Sure Fweeb, I agree with the idea by using Dupliverts, and I know that way, too. I'm just thinking about using Array modifier, since it is much more flexible and controllable with less additional work, in case that I need to animate that. – Leon Cheung Jan 6 '14 at 6:56

I used blender once to create so called Venetian blinds with an array modifier. To keep rotation of the array objects around there individual origin, I rigged the object to use with the array modifier to a single bone in the center of the object. When you rotate this bone, each object created by the array modifier will rotate around it's own center.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.