Applying subsurf breaks the rig?

I know I can fix it with automatic weight, but I want to understand why applying subsurf breaks the weight?
Before applying it:

After applying it:

Missing-the-point comments, like asking “why do you want to apply subsurf?” are not needed, thanks :slight_smile:

Here’s the filetest apply the (106.5 KB) for v2.81

Same as moving the subdivision modifier above the armature modifier. You’re changing the order in which things get evaluated, which changes the outcome. No rig’s getting broken.

Thanks @bandages,
How could I keep the armature and simply have a stronger mesh resolution?

By not applying the subsurf, or by weight painting it differently.

The wieght paint is the same in my pictures, if subsurf was just adding resolution, it would follow the armature and we would get the same image in both, right?

The result you’re getting is probably a matter vertex weights getting interpolated weirdly the more subdivisions you set (3 by the looks of it ?). Just apply subsurf at 1 then re-asign weights.

Subsurf is not just adding resolution. It’s adding additional verts and moving them. (As well as moving verts that aren’t new.) And it’s creating interpolated weights for those vertices. If you change your subdiv to Simple type, then it’s just adding additional verts without moving them-- positioning them just based on interpolated position. (But it’s still creating interpolated weights.)

The subsurf-created verts are following the armature. They’re just not following the armature they way you want them to. So if you want to write the subsurf, write the subsurf, then change the weights on the verts that have been created to make them follow the armature the way you want.

I changed it to simple, viewport=render=1 and still get the same result:

test apply the (115.3 KB)

The verts have interpolated weights, and bending more faces with interpolated weights is different than bending fewer faces.

This is especially true when using “preserve volume” for your armature, which exaggerates weight interpolation, especially when at a sharp rotation like you have here.

Compare simple subdiv after vs before without preserve volume (top), with preserve volume (bottom):

If you want to apply your subdiv, and you don’t like the deformation, apply the subdiv and change the weights. There’s nothing complicated to it.

Thanks, I’m still banging my head :slight_smile:

To be more precise in what I need:
The weights initially come from a skin modifier,
It applies weight “from root to other bone”, so the red is at the middle, then the rainbow goes to the left (rainbow from -0.7 to 0), second image below.

If I apply automatic weight after subsurf, the weight is from -0.5 to 0.5 for each bone.

How to apply the weights from the vertex groups (Bone.00 and Bone.01) for the bones when parenting the mesh to the armature?
I tried with Bone, Bone relative and armature envelope and Armature Deform alone (it throws the same result as above).
The vertex groups have the same name as the bones, is there a way to apply them?

Oops, forgot the pic:

Sorry, I’m getting confused with all this.
I know that simply adding an armature modifier will get the bones working.
The problem is it behaves without regard to the weight.
If the red would be followed, it shouldn’t bend but be straight until the orange:
Hope it makes sense

That doesn’t make any sense. Weights are never negative.

Then I’m going to ignore a lot of that stuff above about “applying” the weights? You got that figured out now?

Look at actual numbers-- colors are misleading. (Look on sidebar/item with a vert selected.) And you should know that Blender autonormalizes your weights: if you are weighted 1.0 to two bones, both groups will be red, but the vert will follow each bone equally, same as 0.5/0.5.

I can’t know everything about Blender but you’re right, skin assign 1 to a vertex to both bones:

Sorry, maybe “you should know” sounded wrong. I meant, “you might find it useful to learn.” You’re on the right track, you’re looking at simplified examples to figure out exactly how things work. You’re doing great.

You might consider checking out how “normalize all vertex groups” (with default’s “lock active” unchecked) affects your weights.

I read all the comments but not find the answer, as i used skin modifier then subdivision and i face the same problem