2
$\begingroup$

I have been working with blender for a few months now and just tried modeling a character which I am currently rigging and completed weight paint on. enter image description here enter image description here

After completing the weight painting of all the parts, I came across a problem with the relationship between my bones and mesh. For some reason when I try to pose the characters thigh bones, I get parenting or weight painting issues that I don't understand and don't know how to fix, here are some pictures of the distortion of the mesh I get after posing the character.

enter image description here enter image description here

One thigh is distorting the body mesh, which I don't want it to, and the other thigh wonks out and starts curving in an odd way when the mesh should stay lined up with the bone its weight paint is associated with.

I assume the problem has something to do with all the little dotted lines for parenting going to the one thigh bone and not the other, and i'm not sure how to really fix this.

Any ideas out there?

$\endgroup$
3
  • 1
    $\begingroup$ I think we'll need to see your Blend file. You can share it via blend-exchange.com following the instructions there to copy the link to it and then edit your question and paste the link into it. $\endgroup$
    – John Eason
    Aug 7, 2023 at 9:00
  • $\begingroup$ Just added the blend file to the bottom of my question. $\endgroup$ Aug 7, 2023 at 18:16
  • $\begingroup$ A few issues there: orientation, origin, scales, naming, weight paints and hierarchy. Posting an answer, it will take some time. $\endgroup$
    – L0Lock
    Aug 7, 2023 at 19:43

1 Answer 1

1
$\begingroup$

A few issues there: orientation, origin, scales, naming, weight paints and hierarchy. It's only the weight paint issue that you see in action in your screenshots, but the others would cause you other issues when animating that would be annoying to deal with, so gotta fix it too.

Orientation

If you hit Numpad 1 to set your viewport to front viewpoint, you will see that your character isn't facing the front of the world:

enter image description here

It might seem like nothing, but Blender uses orientation in some tools, like symmetrizing rigs, pose mirroring and such, so you definitely want to orient your assets the right way.

To fix this:

  1. ↹ Tab into object mode
  2. Select your mesh objects and armature object
  3. Press RZ270⏎ Enter to rotate them around the Z axis by 270°
  4. Press ⎈ CtrlA > Apply Rotation so that the current object's rotation is their "zero" rotation.

If you enable your armature's axes display, you will see that your bones are poiting different directions too:

enter image description here

This will make symmetry work harder, and each of your spine bones basically rotates differently than the other.

A common setup is to have vertical bones to have their +Z facing the Global +Y, and the horizontal bones to have their +Z facing the Global +Z.

To fix this:

  1. Select the armature and ↹ Tab into edit mode
  2. Select the vertical bones (legs, spine, ect)
  3. Press ⇧ ShiftN to open the recalculate roll menu and choose Global -Y
  4. Select the horizontal bones (arms)
  5. Press ⇧ ShiftN > Global +Z

Origin

If you look at our objects now, you should see they have their origin points on the thigh:

enter image description here

When it comes to the mesh object, their origin isn't really relevant when they are deformed by an armature - as long as they are not too far apart - but you definitively want to keep your armature's origin centered (for symmetry purposes again) and most often on the character's ground level (makes placement easier).

To fix this:

  1. Select the two legs objects and ↹ Tab into edit mode
  2. In front view, select the two lowest points of each leg like so: enter image description here
  3. Hit ⇧ ShiftS > Cursor to selected
  4. ↹ Tab into object mode, select all the mesh objects and armature
  5. RMB RMB > Set Origin > Origin to 3D Cursor
  6. Select only the armature object and press ⎇ AltG to send it back to the world center.
  7. Optional: Select only the mesh objects and hit ⎈ CtrlA > Location to set the world center as their current origin.

Now you should have a perfectly centered and symmetrical object:

enter image description here

Scale

If you select some objects and look at their scale in the viewport's sidebar, you will see that they don't all have the same values. Some are even negative. This can cause some calculation issues, so you should apply them all to one.

To fix this:

  1. Select all mesh and armature objects
  2. ⎈ CtrlA > Apply Scale

Your left limbs who had negative scale now have their normals facing inwards, as the Face Orientation overlay shows you:

enter image description here

To fix this:

  1. Select these objects only
  2. ↹ Tab into edit mode
  3. Press A to select all
  4. Hit Shift N to invert the normals

enter image description here

Naming

Your arm bones are not named.

But more importantly, Blender have a naming convention for symmetrical bones, which is used by symmetry and mirror tools and bones coloring. Use the suffixes .L and .R to mark left and right sided bones.

For the bones you already named with Left and Right, we can use a search type of batch renaming.

  1. Select the armature
  2. ↹ Tab into pose mode
  3. Select all with A
  4. Press ⎈ CtrlF2 to open the batch renaming tool
  5. Set it as follows for the left side: enter image description here
  6. Redo from step 4 for the right side.

enter image description here

Hierarchy

Not a blocking issue as long as you don't export in a game engine, but definitely annoying nonetheless when animating: you don't have a dedicated root bone.

Root bones are extremely usefull for a few reasons:

  • When you have parts of your mesh you don't want to assign to other bones: assign to the root bone (required for some export formats and softwares)
  • Is the single top parent of all the bones (required by some softwares)
  • Some software will actually need a top-parent bone that is at the world center anyway
  • Extremely usefull to have a root bone when animating to place the character in pose mode without impacting the rest of the armature that wears the actual animation.

To fix this:

  1. Tab into edit mode.
  2. Make sure your 3D cursor is at the world center by pressing ⇧ ShiftS > Cursor To World Origin
  3. Press ⇧ ShiftA to add a bone at the 3D cursor
  4. Select it and rename it to Root
  5. Bones don't have the same coordinates axes than the world, so to make it simpler for animation, I advise you to set its tail position to these coordinates to that it points to the +Y axis and is therefore aligned with the world when animating: enter image description here
  6. Select SpineBottom then ⇧ Shift select Root
  7. Press Ctrl P > Make Parent (Keep Offset)

If you go in Pose mode, and try to move the root bone with Local transform orientations, you should see the gizmo pointing the same way as the world, and the corresponding axes values changing in the sidebar:

enter image description here

Weight paints

First, a little mesh fixing to avoid issues with weights:

  1. Select your mesh objects
  2. ↹ Tab into edit mode
  3. A to select all
  4. Hit M > Merge By Distance to remove all overlapping vertices

For the legs deformation, it really is just an incorrect weight painting.

If you select the right leg mesh object, ↹ Tab into weight paint, and ⇧ ShiftRMB RMB on the thigh to select the Sock.L vertex group, you will see that it is indeed painted to be affected by the Sock.L bone. Hence, the wrong deformation.

To fix this, multiple ways:

  • With all the fixes we did, you could just run an automatic weights generation and have only small fixes left to perform. To do this: select all the mesh objects, then armature, then ⎈ CtrlP > Parent to Armature Deform with Automatic Weights.

  • In edit mode, select a part of mesh you want to remove from a vertex group, then in Properties Editor > Mesh Data tab > Vertex Groups panel, select the vertex group you want to remove it from and hit the Remove button.

  • In Weight Paint mode, ⇧ ShiftRMB RMB to select the vertex group you want to preserve. Then go to the menu Weights > Normalize All to normalize all vertex groups. It will make it so that the product of all weights for each vertex doesn't exceed 1.

To avoid creating this issue in the future:

When painting weights, enable auto normalize and multi-paint in the options' popover in the top-right viewport corner:

enter image description here

$\endgroup$
3
  • 1
    $\begingroup$ Wow this is a lot of useful information, I am looking over it all now and I greatly appreciate the help $\endgroup$ Aug 7, 2023 at 21:32
  • 1
    $\begingroup$ I just got everything fixed and this was super helpful!!! Thank you again for all your help! $\endgroup$ Aug 7, 2023 at 22:16
  • $\begingroup$ Glad it helped. Please don't forget to look at my answer's top left corner to upvote it and use the ✔️ button to mark it as the right answer :) $\endgroup$
    – L0Lock
    Aug 8, 2023 at 1:53

You must log in to answer this question.

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