Easiest way of duplicating an object into multiple instances?

The array modifier creates its copies as one mesh object, which you then have to separate into standalone objects, which are not linked instances of the original. On the other hand, DupliFrames takes some more setup and it’s a pain as the settings are in a number of different panels. DupliVert requires another object to do its work.

Is there no easy way of creating multiple instances of an object in Blender? I really am missing a simple command like “Duplicate selection X times into linked copies”. Would some kind soul write an AddOn for this, if it can’t be done natively?

Make group out of that object. And yes, you can have a group made up of single object. Once you have group, you can menu select Add > Group Instance. Add much as you like.

Thanks ridix, but I don’t see the benefit. It doesn’t seem to give any option to create multiple duplicates, say 100. It just seems I’m duplicating a group instead of the object. Of course, if I put a number of objects into the group, then this would speed up the process of multiplying, but it’s still not the same as creating 100 copies in one go. Or am I missing something?

BTW, I must say thanks for the work you did on the horse in the other thread. Even though I wasn’t the OP, I greatly appreciate seeing that kind of helpful input.

If you want lots of instances in a hurry use Instance painting.

Thanks again, ridix. Duplicating objects as particles is a neat solution in certain circumstances, but again, not the fastest or easiest.

Unfortunately I’m under too much pressure to produce renders at the moment and don’t have the time to create an AddOn for this. Maybe in a couple of months. In the meantime, if any of the Python scripters read this and can afford the time, please consider this as a relatively quick project. All that’s needed is a simple command “Duplicate selection X number of times”. The duplicates can be in same position as original, they can then be randomised or moved manually. It would help if the duplicates are parented under an empty (this could be optional).

Well, I far as I understood your wish, you’d like to have (1) N-objects created fairly fast and look the same as a selected object; (2) All such copies to be indepndant objects and ALWAYS look like the original, i.e. change their shape when the shape of the original is changed, ok?

Sooo… notwithstanding that there may be a problem how to define new objects locations, here’s a simple 2.49b-script to doing this:

from Blender import *

def Duplicate_objects_by_model():
    sce = Scene.GetCurrent()
    ob = Object.GetSelected()[0]
    if (ob.type <> "Mesh"):
        return
    me = ob.getData(mesh=1)
    N = 10
    for i in range(N):
        ob_new = Object.New("Mesh")
        ob_new.link(me)  # use the "model" mesh...................
        ob_new.loc = (i,0,0)
        ob_new.size = (1,1,1)
        sce.objects.link(ob_new)
    return

Duplicate_objects_by_model()
Redraw()

It creates 10 copies of the currently active object, in case it is a MESH-object. New locations are in a row at distance = 1 off the previous object. Should you use N that is real BIG, this location tactics may be re-considered aprropriately. Finally, when you change the shape of ANY of the clones, ALL in the group changes its shape, ok?

Regards,

Thanks so much, Abidos. This is going to be helpful when creating the script for 2.5/6. It makes it clearer why this isn’t as easily coded as I had expected. You can’t just copy an object, you have to know the data type and then link it.

In terms of the specification, you got it. Basically I think Blender needs a completely ‘neutral’, multi-copy command. By neutral I mean that nothing other than duplication is done, the position isn’t changed. So I’m not sure I like the idea of a positional offset. It should be left to the user to move the copies. Otherwise you’re really getting back to the kind of scenarios where the other methods would do better, DupliVert/Face, particles, etc. Just think of it this way: in what sort of usage would anyone specifically want copies offset by 1? Rarely, I think. On the other hand, 0 offset from original leaves you in a state that’s unambiguous and a good starting point for moving them.

Likewise with the question of linked or unlinked copies. They should be linked because that’s what makes them instances (the equivalent of Alt-D). It’s trivial to unlink them if required. Having the copies together under an empty would help (Shift-G to select all copies, then unlink).

That would be version 1. Version 2 could make linked/unlinked optional and I’m sure others could think of more bells and whistles.

I’ll keep an eye on the Scripting forum to see if anyone takes this up. If not, hopefully in not too long I’ll be able to have a go. I suffer from amnesia in Blender. If I don’t use a feature for a while, I forget about it. I haven’t scripted for over a month, and it would take me a day to get back up to speed, time I don’t have at the moment.

While it would possibly be useful for an addon creating what you want, making multiple linked duplicates is pretty trivial with the current tools available
To make 1000 linked duplicates
Add an array set to 1000 with zero offset
Make duplicates real (would be usefull for a make linked duplicates real)
Make links (Ctrl+L if I recall correctly)

maybe not super fast, but definitely workable for manual use. When you want 100 linked duplicates (placed 10x10).

  1. in top view, Alt+D an object. In grab mode, use snap (Ctrl) to place it offset on 1 of the axis
  2. 8x Shift+R
  3. select all
  4. Alt+D the 10 objects. In grab mode, use snap to place it offset on the other axis
  5. 8x Shift+R

Though 5 steps, it’s quite fast thanks to ‘duplicate all’ and the Shift+R (repeat last). After these 5 steps it’s very easy to get it up to 1000

@Richard: That’s exactly how I expected Array to work, but it doesn’t. I create a cube, give it an Array modifier for a bunch of copies. If I now run Make Duplicates Real (Shift-Ctrl-A) nothing happens. If I apply the Array modifier first, also nothing. In the Toolshelf the applying has two options, ObjectData and New Shape: makes no difference. I’m using 2.58.

@Sago: Thank you very much! I have no idea what Shift-R does, except that it works as you describe. Which command is this? I can’t find it.

Sago’s method is good enough, but if I could get Array to work as described then I’m spoilt for choice, no great need for an AddOn.

EDIT: Oops, I see Sago did say it’s Repeat Last. Thanks again. Now just waiting to see if Richard or someone else can help me fix Array.

OK, got it. You don’t run Make Duplicates Real. You apply the Array modifier, go to Edit mode, press P, choose By loose parts, Object mode, select all copies and original, Object->Make Links…->ObjectData. So quite a few steps more than a simple command would entail. Plus it’s buggy. After performing this series of actions a number of times and undoing them, an Array setting of 3 gives me 11 copies!

EDIT: Playing some more and I’m getting a different bug: selecting the copies and original, running Make Links, two of the three selected objects disappear! This is a rubbish way to work, really need a simple command.

speaking about Blender-2.5x
and this is only a little scripted commandline-like thing,
NO ERROR-CHECKING
you know what you can destruct easy with a looping
creation of a few thousand objects!
WARNING !! YOU may need to know how to kill/reset your computer!


import bpy
for i in range(10):
    print("creating object no.:", i) #this is printed in the terminal
    bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(0.2,0,0), "release_confirm":False})

this sample only creates 10 duplicate objects of the current selected active object
and displaces the location of the new one by (0.2,0,0) … …

Make this a little text in the blender-text-window and modify manual the number of duplications (the: range(10) … to maybe range(100) for 100…) and with the object to be duplicated press the “run script” button of the text-editor-window.

Its not as easy as an addon, but if you make this text a default part of your default scene, then you will it have always in the text-window for selection and … execution.

EDIT:
And if only linked-duplication are wanted, there is the
bpy.ops.object_duplicate_move_linked
which works the same way.

Hey that’s wonderful, test_dr, thanks a lot! I find the most time consuming part of scripting is finding the commands to use and you’ve pretty much provided the core of it.

I hope I get the time next weekend to create a basic AddOn… I was hoping to have a go today but no chance.

YES! shift + R
Thanks for this!!!