0
$\begingroup$

I'm rigging mechanical parts to a complex armature. Some parts are mutually identical (e.g. screws, retaining rings...) and refer to precisely determined shapes. I would like to instantiate these parts (linked duplicates) instead of simply cloning them, and at the same time be able to rig these individual parts to various bones of my armature.

I tried to assign the whole vertice of the "root" mesh to many vertex groups (the names of which corresponding to bones names) and for each instance add an Armature modifier with distinct vertex group option, but I can't get the right parenting effect. If I simply duplicate meshes it works, i.e. my issue has nothing to do with the armature and its expected behavior.

Would anyone point me to a ressource (maybe somewhere in the manual pages) to help me solve this issue? it would be nice!

$\endgroup$
3
  • $\begingroup$ Can you clarify if you're talking about instancing or about linked duplicates? They're not the same. If instancing, any answer is going to depend on your precise implementation of instancing-- we'd need to know about that. $\endgroup$
    – Nathan
    May 10, 2023 at 13:56
  • $\begingroup$ Could you please share your file so that we can test it? $\endgroup$
    – moonboots
    May 10, 2023 at 14:10
  • $\begingroup$ Thank you both for your interest. My main file is quite heavy, I'll try to build up a simple example. @Nathan: I want to animate linked duplicate objects (produced with Alt+D) in order to have a single reference to many identical meshes. $\endgroup$
    – Vincent
    May 10, 2023 at 16:19

1 Answer 1

1
$\begingroup$

While maintaining separate armatures for each linked duplicate would work, it sure sounds painful to me. The linked object shares its vertex groups among all duplicates, so every duplicate needs the weights of every single duplicate, and you need a separate armature for every single screw. (Limiting these by vertex groups in the armature modifier wouldn't help, not without dynamically assigning vertex groups.) If any of these objects have overlapping weights, then the separate armatures would need their bones renamed. It sounds like it would be very difficult to implement and worse to manage. Rather than describing how this could be done, I'll provide alternative solutions.

In your case, the objects you're talking about sound rigid, non-deforming, which means that bone parenting would be the best solution. While linked duplicates share their vertex groups, they can have independent parents. We can parent them to different bones:

enter image description here

In the case that we want them to have "weights", following multiple bones, we can simulate weights by creating a new, unparented bone (in the same armature, preferably) with an armature constraint:

enter image description here

I suppose you could put the armature constraints directly on the objects themselves, but my preference is that if I'm using bones for anything, I'm using them for everything. I don't like having to troubleshoot stuff that combines object and bone constraints.

If these meshes do need to deform rather than remain rigid, then we might do that by assigning vertex groups with a modifier:

enter image description here

Here, rather than weighting the linked duplicate directly, I use a live data transfer modifier to copy weights from some other object. All objects have the vertex groups needed to deform from the armature, but those weights are replaced by the data transfer modifier. The target of the data transfer modifier should not itself get deformed by the armature, and should probably be hidden in renders.

$\endgroup$
1
  • $\begingroup$ Thank you Nathan for your much detailed reply. My rigging knowledge is very limited, I need to work it out. And will try your recipe (particularly #2) on my particular case. $\endgroup$
    – Vincent
    May 10, 2023 at 18:47

You must log in to answer this question.

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