Preserve Volume broken?

I have this problem where the fingers are looking ok with Preserve Volume turned off in the armature modifier and very broken when turned on. Is this a known limitation or a bug? Does anyone have a workaround for this problem (other than leaving it turned off) because I find Preserve Volume generally leads to better deformations?

So where is your blend file for people to check ?

Maybe it’s a bug, maybe your modelling and rigging is crap, how is anyone supposed to know ?

Sorry, I’m not allowed to share the model. It is an imported DAZ3D Genesis 2 figure, topology and vertex weights should be alright. I was just hoping someone has encountered the same problem before.

To me it looks like the vertex weights are off.

OK, I cleaned it up quite a bit. Should be fair use. Just rotate rForeArm.

pvolume3.blend (1.31 MB)

Would someone be so kind and have a look at the blend file I attached to the previous post?

That’s pretty strange. But if it works with preserve volume unchecked you can do that and add a corrective smooth modifier instead, that will smooth the deformations. For adding back volume when it’s needed you can use corrective shape keys.

Preserve volume is going to try to reach all vertices it can see. If you look at your mesh and go into edit mode, select your vertex group for the forearm and then click on select under the vertex group, you will select the entire arm. That is mostly what it is taking into account. To fix, simply clean your vertex groups by bone in weight paint mode. Select arm, select armature in pose and control tab to weight paint. on each bone, select clean. Put in something like .1 to be sure you get them all. When you have cleaned each bone, then go back into object select mesh then to edit and check your vertex group selection again in edit mode. If you did it right, you should only see the vertex group assigned to the bone and not the whole arm. Now your preserve volume will work at the joint you bend according to quaternions rotations as it is supposed to work. It was working but didn’t understand you.

That doesn’t fix it though. You can delete all vertex groups and reparent the mesh to the rig with automatic weighting, same issue.

However, I may have found a solution, first go into edit mode for the rig, select all bones and do Recalculate Roll (spacebar search), then choose Global +Z axis. Then change the bone rotation order to XYZ (don’t know if this is needed but I did it). Then it should work better. If it still doesn’t work, try resetting the transforms in pose mode and redoing the pose, that should fix it.

Yes that will work. Is this a Daz import?

Thanks for taking the time to have a look.

Yes it is a Daz import. I have now changed my importer to not add vertices to a vertex group when it has a weight of 0. But that does not solve the problem.

Interestingly enough, changing the roll of the bones that are not part of the arm seems to actually avoid these weird deformations. But that is not really a solution as the positions and rolls of the bones have been calculated during the import process. Changing them would break pose import as the poses consist of bone rotations relative to the calculated axes.

Well that makes a difference. Here is a link on what others are having success with. , but I don’t know if it will work on the current Blender. One of the sneaky keys is to apply your armature and mesh transformation on rotation and scale (control A), not location. Don’t know if this will work, but I know others have had success with it. Note the bottom comment about the fingers getting messed up.