Automatic Mirroring of Vertex Groups (.L/.R)

Hello;

I have tried many, many ways but can never solve this issue in an automated way.

I want that, on Applying the Mirror Modifier, I get automatic Mirrored Vertex Group (as if they were Bones; like Bone.L when Symmetryzed, generates Bone.R)

The problem is that IF I have to handle this manually, I can’t prepare my model in advance (for the new side after the Mirror Modifer is Applied), since I’m still using Mirror Modifier, and there will be about 20 Vertex Groups to manually reconfigure one by one —as well as other features I’ve made which ideally should hold relationship with each of those hypothetically new Mirrored Vertex Groups.

I know about Mirror Vertex Group and Mirror Vertex Group (Topology) tools; I’ve already been able to use more or less successfuly such tools for Weight Paint. However, in the current case, those tools seem to no avail, unless I don’t know enough about them.

I believe there is no current work around on this thing. But if you know about a solution, that would be great.
Thanks.

If I understand correctly you need to create properly named Vertex Groups for both sides. With Data > Vertex Groups checked in the Mirror modifier, you can then edit the groups on the real side - the other will reflect the changes instantly.
edit: Though I don’t think you can add several groups out of thin air automatically… unless through script.

1 Like

Precisely. The problem is that such process seems only to be automated for… Weight Paint -related Vertex Groups.
I have tried a tricky setup in which I’ve purposely assigned Weight Painting to my special Vertex Groups, so that they perhaps received the required automation from Mirroring (.L/.R); it worked partially, but failed because I had created those Weights as Bone/Armature-related Vertex Groups (since this is what helps producing symmetric automation)… but then this Weight started interfering with my principal objective (because of a very particular infinite loop system). This was months ago; maybe I can try again in different ways; like, if I can assign Weight Painting but turn it ineffective for Deformation or any kind of control, maybe the system doesn’t go crazy.

Unfortunately, the Blender 3.2 Manual indeed informs that this is impossible.
https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/mirror.html

Try to mirror existing vertex groups, with the following specific prerequisites:

    The vertex groups you want to mirror must be named following the usual left/right pattern (i.e. with suffixes like “.R”, “.right”, “.L”, etc.).

    **The mirror side vertex group must already exist (it will not be created automatically).** It must also be completely empty (no vertices assigned to it).

Yes, I had 100% of the time have been working with this Option checked… but it doesn’t go beyond that feature apparently.

If there was anything like that already developed, or maybe an Addon, this could be the way to go indeed. I just know for the time being that in Blender Community’s Right-Click Select section (place for new ideas), there are some propositions regarding this limitation.

Well, I believe I have to keep investigating. Thanks for your time.

Edit:

You see, the problem is here.
The Vertex Groups, they may exist, this I can do: have them both sides already created, correctly named. But then, their real Mesh (from the Mirrored side) doesn’t actually exist… precisely because it’s on the Mirrored side.

And if I had to actually create that Mesh manually (the one for the Mirrored side, even thought the Mirror is there), ¿what would happen with it, after the Mirror Modifier is Applied? It won’t just connect perfectly to the rest my organic Mesh; it would just be random Mesh with correct Vertex Groups naming (and perhaps Positioning and the other setting relationships maybe; except no correct Geometyr & Mesh Topology relashionship to the original model); furthermore, it would be mirrored itself to the real side I guess, which is completely useless.

¡Solved!

It is totally crazy, but it worked.

By improving that trick, according to that instruction on the Manual 3.2 Blender, that you need to have both Vertex Groups (.L/.R) already created, and that the Mirrored side requires to be completely empty,

With correct symmetrical names (.L/.R) on Bones and Vertex Groups, I’ve deleted one my antique special Vertex Groups, and instead, I’ve used a Bone to generate Weight Paint to a single Vertex (with Weight = 0, Blue) on the Mesh Object; then I’ve Symmetrized that Bone (a symmetric Vertex Group was generated, probably with Weight 0 on that Mirrored single Vertex, because just before, that was just and empty Vertex Group), and by Applied the Mirror Modifier, the setup was mostly complete. I’ve had to adjust all the Bone Constraints according to Vertex Groups of both sides (.L/.R), but this step can be done before Applying the Mirror Modifier also; actually, as soon as you have Symmetric Bones and the symmetric Vertex Groups (even if the Mirrored one is still empty). Changing this last order of things isn’t a problem. This automation only works because those are “Weight Paint” Vertex Groups and have same names as their corresponding Bones; all in Symmetry (.L/.R).

Note: My case is so weird because the same Vertex Group I’m using (that normally would be used to be Deformed by the Bone) is actually being used to drag its Bone around (through a Copy Location Bone Constraint; Targetting its own Weight Paint Vertex Group). If this Weight wasn’t 0, I believe it would break the system as this is what already happened before. Now, I must just be assure that this 0 Weight will not interfere in any grave way with Weight Painting on the rest of the surround Mesh; but, apparently, this stuff is just working as expected. If I find any unexpected behavior I guess I’ll be posting here.

Cya.

I’m confused, but curious.
Admittedly now I don’t understand at all what you’re trying to achieve :smiling_face_with_tear: To control armature with a mesh and the mesh with that same armature… at the same time? :thinking:

But seems to me that if you don’t have to control these groups with bones than you don’t have to name them exactly like bones. Add a prefix to the names (with a script)? This way you can (more or less) be sure that it won’t get stuck in some weird loop :face_with_raised_eyebrow:

It’s ok, I should probably have given more concrete example of the case, as it unfolded; but will do now then.

Well, this would be exactly what I don’t want to happen; as this should create bad infinite loop in Blender. However, I’ve found out that ‘playing out’ with the danger, seems to be actually the current unique way to automate the creation of Mirrored Vertex Groups.

Well, this seems to be an interesting complementary idea; well thought. Like, after the automation is done and the Mirror Applied, there seem to be apparently no reason to maintain their cloned names (Bones and Vertex Groups); it sure will add extra work, but the worst part would have been done already (which is on a more automated Mirrorring process.
I have been gambling with infinite loops in Blender, for instance, playing with very low Influence (on certain Armature Rigs with Bone Constraints in conflict with Parenting); in practical terms, it seem to be pretty useful. But I’ve never done this with Weight Painting; this is the first time I purposely create a (most likely if my memory is correct) infinite loop which is being blocked just by a 0 Value on Weight Paint. As I’ve tested, it seems to be working, even without differentiation on the names; but it will most likely be wise to make the changes to prevent future, plausible issues. I’m just not very sure about those Bones (.L/.R)… if they won’t try to make new, fresh Weight Paint Vertex Groups on their own, since the originals would have “vanished” (changed names). There is a possibility that it might be better to maintain the cloned names as they are.

This is not the first time I’m presenting this WIP setup on the forum.
What is happening here is not too complicated, but it’s also not very conventional I guess:
There are Deforming Bones (for the eyelashes Mesh Object which doesn’t show up here) that are (or should be at least) following (from their Bone Heads), through Copy Location Bone Constraint, singular Vertex’s Vertex Groups on the eyelids Mesh (which is on another Mesh Object, the body). Those Bones will Deform the eyelashes, not the upper eyelid; but they will follow the lower limit of the upper eyelid. There are as many single Vertexes’ Vertex Groups on one side of the face as there are Parenting Bones there for the eyelashes; so about 15.

Note: there are some extra Object Modifiers (on the body Mesh Object) that are very required, but that do not relate to the issue on this topic. For example, Shrinkwrap Modifier to the eyelids Mesh (a whole Vertex Group of its own), followed by Solidify Modifier (same Vertex Group); there’s also need of a Modifier that ‘glues’ visually the eyelashes limit with the upper eyelid limit, that’s another Shrinkwrap Modifier, either to the eyelashes or to the body Mesh Object, but now on a new Vertex Group, respectively, either to the limit edges of the of the eyelashes or to the limit edges of the upper lid; cannot be both — this would trigger horrid, glitchy infinite loop.

This whole setup is a bit more complex and require aesthetic refinement and tests; but at least the technicality of it in Blender, now has reached complete success, as this Vertex Groups automatic Mirroring was the last issue I was having trouble with.
This setup is supposed to be used with Shape Keys for the face Mesh and/or facial expression Deforming Bones Rig. In the video below, you’ll notice that I’m not moving any Bones, but actually, the mesh itself: naturally, other Bones and/or Shape Keys will have to become responsible for this transformation later on. Sure, this is experimental; if the final aesthetical result is good, maybe it pays off all the work and research as a good method; otherwise, I’ll have to try something more conventional I guess. But I’m optimist now.

Thank you again for your feedback.

1 Like