in short: in the attached .blend file, when you switch back and forth between frame 1 and 2, why is the right foot (the left in 3D view) deformed? The loc/rot/scale of the parent bone obviously does not change. It’s a simple model but I’m unable to find it for several hours. Would anyone please be so kind and have a look at it? test.zip (104 KB)
Are you following a rigging tutorial? You have a collection of cubes that are parented directly to the bones, but the “foot” also has an armature modifier and the armature is using envelopes. I think your problem is an interaction between the bone-parenting and the armature modifier.
Thanks for your reply! I’m not following a tutorial. Not in the attached blend file. Yes, it is as you said, but I don’t know why Blender behaves as it does. If none of the parent bones moves or rotates, the object shouldn’t be deformed.
Unfortunately, it is not that simple. You have an object that is parented to a bone and then the bone (though the Armature modifier) is influencing the location of that object. Armature mods assume that the mesh they are influencing is static relative to the armature frame. By having your objects parented to the bones in the armature, this is no longer true. As you move bones, you change the mesh. This causes a ‘fight’ with the Armature modifier because it assumes that it will be the only thing changing the mesh.
I had to read it a couple of times to understand it. (you wrote it well but the matter is really not that simple to grasp) I think I disagree: The mesh object (the right foot) doesn’t move. I did move the armature, but as the foot is a child of it, it moves with it, so it’s relative position neither to the whole armature nor to the parent bone changed. So it must not be deformed.
The only thing of interest is the spatial relation between the mesh object and it’s parent bone. If it doesn’t change, no deformation should be applied.
After a couple of hours more experimenting, it seems that Blender first applies deformation caused by the bone before transformation. I consider it a bug because it’s wrong to apply the deformation to an object as if the object was at a different location. Instead it should apply deformation at the location where we see the object, not where it was before transformation. Though I will double-check this again.
If you look at Vertex Groups for those foot objects, the vertex groups are not associated with the boons of the foot; bones are Fuss.L and Fuss.L.001. It is associated with Vome bone and Hinten bone? So your foot bone is not in control.
Also, the foot has Remesh modifier on it. I don’t think Remesh works with animation. If you want smooth bending, use Subdivision surface modifier.
Last things first: You can remove the remesh modifier. The problem of the deformed foot is still visible.
You are referring to Fuss.L but I was talking about Fuss.R which is deformed even though it shouldn’t be. The parent of Foot.R is the bone Foot.R. No matter if you specify a vertex group in the armature modifier or not, the fact still is that the position of bone Foot.R does not change in relation to the object Foot.R, hence no deformation should be applied.
What blender (probably) does is applying the deformation to the mesh object before posing. That’s wrong because posing changes the position of the foot because the bone influenced by the pose is the parent of the foot object.
Blender should first compute the final position of the foot - which includes posing - before applying deformation.
An example reduced to the minimum: Test4.blend (451 KB)
Just pose the bone and see the deformation of the sphere - which doesn’t make sense. Blender deforms the sphere as if it kept it’s position before posing.
Now that I’m sure, I will report the problem. (EDIT: of course only if it’s not been reported already)
My point is that Blender’s workflow is not designed to have Armatures acting on meshes that are also parented directly to a bone. Your best bet is to simply remove the bone parenting and setup your mesh so that everything interacts though the Armature modifier. Setting up circular parenting like this is a big problem in software. It almost always leads to counter-intuitive results like this that are very difficult to explain or correct.
My point is that Blender’s workflow is not designed to have Armatures acting on meshes that are also parented directly to a bone. Your best bet is to simply remove the bone parenting and setup your mesh so that everything interacts though the Armature modifier. Setting up circular parenting like this is a big problem in software. It almost always leads to counter-intuitive results like this that are very difficult to explain or correct.
I did as you said. (EDIT: I mean that I removed the parent from the mesh.) As I expected it, it does not work. Have a look: Test4 (2).blend (450 KB)
Rotate “Bone.Lower” (in pose mode). You see the problem? Then make Bone.Lower the parent of the Sphere. Now it’s rotated correctly if you pose Bone.Lower - but deformed incorrectly because Blender uses the wrong mesh position for deformation calculation.
I also added the armature modifier. Only setting the bone as the parent is no problem anyway. See my new example in the later post named “test4 (2).blend” in reply to kastoria.
Yep, this works. But it’s complicated. You have to add a modifier and carefully set all (deform) parameters instead of just setting the parent.
I don’t see circular parenting. I think it’s more intuitive to just set the parent. If Blender wouldn’t ignore that poses can influence mesh positions before it’s applying deformation, it would even work. As long as it’s possible to set a bone as the parent, this fact must be taken into account. Or, otherwise, bones must not be allowed as a parent.
I think everything said from my part. I consider it a bug, but as there’s a workaround, I can (and have to) live with it.
Thanks for participation even though we might disagree. For me the situation is clear.
EDIT: Oh, and if some reading this thread later is interested in the “modifier-only” solution (as sugested by kastoria), here it is: Test4 (3).blend (477 KB)
EDIT #2: It would be nice if it worked: If I move the armature, the mesh stays at it’s position.That was another reason why i set the armature bones as parents. The skin is attached to the bones. However, if you also set the armature (not the armatures bone) as the parent, this problem seems to be solved, too. Pretty complicated workaround IMO.
EDIT #3: Man, this is not funny anymore. Setting the armature object as the parent doesn’t work either because, after moving the armature, the relative position of the mesh to the bone changes after posing. That’s the reason why I have to set the bone as the parent. But as deformation is done before posing, I can’t do this either. I run out of ideas.
I think you have a misunderstanding about how Armatures work in Blender. But I also wonder if you haven’t complicated the process of understanding to the point where it will be impossible to help.
Basic rules:
Armatures drive mesh deforms in Pose mode using “assigned vertex groups”, “deformation envelopes”, or a combination of both.
To use “vertex groups” the assigned group MUST have the same name as the bone that will deform it.
Deformation envelopes drive the mesh based on the area of influence assigned. This is rarely used as it cannot provide the level of control of vertex groups.
The Armature is assigned to each mesh it will deform as a Modifier. Options in the modifier settings allow one too…
Turn off or on the deform types ( vertex group or envelope ) for the Mesh being modified.
Make the modifier deformation only apply to a specific part of the mesh as defined by another vertex group.
Parenting happens at Object level ( with some exceptions ) and is great for driving individual mesh components - like your original test file.
When using parenting this way, there is no need for the Armature modifier. Everything is happening at Object level. ( In this case we treat each bone of the Armature as a parent to the object.
Looking at your test files I believe they behave exactly as they should. In the last case you have only bone envelopes assigned, (there are no properly named vertex groups) so BOTH bones of the armature are influencing the mesh TWICE (Armature assigned twice) with an attempt to mitigate the overlaps caused by this with the influence Vertex groups. The influence of the envelopes is where the mesh “tearing” comes from.
I believe you will find this MUCH easier if you step back to basics in your Armature setup. The attached Blend has three scenes . one for each type of Armature setup described above. I hope this helps.
you are overcomplicating things. I think the straightforward way: I attach the foot object to the back foot bone. Why? Because that’s where I want it to be. In addition, I want the front foot bone to deform the foot, so I add the modifier.
I will look at your armature.blend. Thanks for that in advance.