9
$\begingroup$

I've been using Dupliverts, and Dupliframes without fully understanding their internal representation in Blender. (i.e. which Data Blocks are linked,and which are copied, how parenting is related to all this)

I would like to know what CtrlShiftA.. 'Make Duplicates Real' is actually doing - what the difference is between Duplicates, and the instances that result from the execution of that command.

$\endgroup$
0

2 Answers 2

6
+50
$\begingroup$

I'll put here the data structure diagram for reference:

enter image description here

The material can be linked to Data (default) or to Object

The Object is just a container for the Object Data within, which is a separate datablock inside Blender, that can be used by any number of same type Objects. Similar like a Material can have multiple users.


There are different ways you can make copies:

  • Duplicate Object CtrlD - duplicates the object and by default also the mesh. What is duplicated and what is instantiated can be set in User Preferences under Editing:

    enter image description here

  • Duplicate Linked AltD - duplicates the object, but links the rest (like leaving all checkboxes from point above unchecked). In case of mesh object makes a mesh instance - shares only 1 mesh between them - object data is not duplicated

  • Duplivets, duplifaces, dupliframes:
    • tells Blender to use own object data (verts, faces, animation data at all frames) as transforms for copies of parented object(s)
    • the copies are instances of the parented object(s), nothing is duplicated, not even the object
  • Dupligroups
    • same as before, but whole group of objects is instantiated
    • makes only 1 copy using own's object transformation, doesn't make much sense to use enything else than Empty Object.
  • Particle/Hair systems:
    • transforms are taken from particle data
  • Linked object/group:
    • same as with Dupligroup, but links from another .blend file.

When you Make Duplicates Real CtrlShiftA, only the first relation in the chain changes from instances to real duplicates. You can now set different modifiers, materials (if you link them to object), constraints, etc. for these now real objects, but they still keep just one mesh linked between them - exactly same like a mesh instance.

To turn them into full duplicates use Make Single User U > Object & Data: this creates a mesh duplicate for each object, turning them into full copies (ctrl-d) effectively and you can now edit each copy's mesh data independently.

$\endgroup$
3
  • $\begingroup$ Do dupligroups make 1 copy inside the target .blend or is it constantly reading the source .blend? $\endgroup$
    – Way2Close
    Commented Jun 19, 2018 at 12:44
  • $\begingroup$ The structure is much more flexible than I thought it was. I don't remember 3DS or XSI being able to pick and choose data-blocks to copy or link in this way, beyongd 'instances' and 'copies' Perhaps they could, but I didn't know enough. Anyway, to me, Blender makes a lot more sense if I've got the gist of what's going on under the bonnet. $\endgroup$
    – Robin Betts
    Commented Jun 19, 2018 at 14:39
  • 1
    $\begingroup$ @Way2Close when you open .blend file it loads into RAM and everything happens there until you save it to disc. $\endgroup$ Commented Jun 19, 2018 at 17:26
1
$\begingroup$

As I understand it true duplicates get their own object data block, whereas a group instance is reading the original's datablock. In blender the group instance is simply attached to an empty so you can move and rotate it and such, it is then locked from edit mode because it is a reference. Basically an instance takes up no extra memory but can't be edited.

$\endgroup$
6
  • 1
    $\begingroup$ I think you've described to me the difference between copies and instances ... that instances share mesh data, and copies don't. But Duplis seem to be different again. They behave like instances..( if you modify one's mesh, the others are modified too) And the 'Make Duplicates Real' command results in actual instances. So there's something they were before executing that command, and I'm interested in what that something is. $\endgroup$
    – Robin Betts
    Commented Jun 15, 2018 at 8:49
  • $\begingroup$ Surely it's just a collection of linked instances parented to an 'EMPTY'? make_real would just create a separate instance for each object in the group. $\endgroup$
    – Way2Close
    Commented Jun 16, 2018 at 6:00
  • $\begingroup$ Sorry for late reply.. I've been looking at it again.. there is no empty, so that's not exactly it. Maybe it's just the terminology that's confusing me.. I guess I'm trying to understand this from a programmer's point of view. $\endgroup$
    – Robin Betts
    Commented Jun 18, 2018 at 7:33
  • $\begingroup$ If you select an instanced group and use bpy.context.active_object.type it prints 'EMPTY', confirmed if you go into the properties window and go to the object data tab you can even adjust the axis size of the placeholder empty. $\endgroup$
    – Way2Close
    Commented Jun 19, 2018 at 6:49
  • $\begingroup$ ... I'll go back and look harder,.... is that the same, with a dupliframe or duplivert? $\endgroup$
    – Robin Betts
    Commented Jun 19, 2018 at 10:22

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .