Smooth deformations with armatures

I’m having major issues trying to get armatures to deform my mesh smoothly.

I’ve spent hours trying to paint weights onto my vertices in such a way that they deform smoothly, but especially for the shoulder joints on my model, it seems that it is impossible to avoid major tearing and creasing when moving a limb through any decent range of motion.

I have taken care to add extra vertices around the joints, using the same modelling techniques that I have had good results with making characters in Lightwave and Hash’s Animation Master.

It seems like armatures/vertex groups might work for extremely low-poly characters, but for smooth, organic characters, i can’t see how to avoid ugly ‘stair-stepping’ between vertices with different weight values, e.g. 0.2 and 0.5 weight introduces stairstepping, and I don’t have that many vertices (nor can I imagine many models that would and still be usable) that i could smooth the weight transition out to the degree seemingly required.

Has anyone else had success with armatures for medium-polycount models (above 500, less that 50,000) and if so, how did you approach weight-mapping areas like shoulders?

1 Like

I second this complaint. I’ve done some really nice rigs and some good character anim using live subsurf models. They deform beautifully. But weight-painting a medium poly model just seems clunky. And I seem to stair-stepping no matter what I do. I’m about ready to revert to the earlier version of my model that still lives in subsurf - but I hate to abandon the precision uv mapping on my mesh model.

Argh.

Any advice?

I think this is a major shortcoming of the blender
skinning system – I used to have a lot of problems
which were allieviated by reducing the polycount.

My feeling is that the skinning system for the
armatures is very incomplete (development was
cut short when NaN went under). It will be good
to have blender users who have used the skinning
systems from other packages to advise on what
approches to take when development resumes.

Chris

P.S. How do the other packages handle this?
Do they use weights and vertex groups?

XSI, Houdini, Lightwave, and Maya have all been released as free learning fully functional demos. This is a good opportunity for anyone with
a computer science background to compare some features.

It’s good to see that others are experiencing the same problems - at least we have identified a clear area for improvement.

It seems to me that blender’s vertex grouping and weighting system provides exactly the same capabilities as Lightwave’s, from a UI point of view, however the algorithms employed by the two packages must be quite different (i have not had a chance to dig into the source, and i doubt i would be able to do too much if i could).

One of the neat features of Hashs Animation Master is to assign local vertex deformations to specific bone rotations, and blend between them in pose-mode. Which means you can twist the arm to an extreme, adjust the vertices in the mesh directly, set a ‘key’, twist the arm to another extreme, adjust the mesh, and set another key, and those deformations will be interpolated through the entire range of motion.

Adding this feature would provide a workaround for the worst of the stairstepping, but could be rather labour-intensive.

I would also like to see the ability to hide vertices in the mesh in weight-paint mode, preferably using a separatel dialog with ‘check boxes’ for the groups in the model, which would speed things up, instead of the current ‘select group and then click select/deselect’

I am much impressed by the core of the new armature system, and i think NaN has done a really good job of providing a fast and sane way to rig and pose models, but it does strike me that some of Blender’s UI conventions don’t assist the process of character setup.

For example the separation between pose mode and weight paint mode makes for a lot of switching between the modes, incurring multiple mouse clicks and ‘tab’ key presses.

Ideally, when a mesh is parented to an armature, ‘pose mode’, and ‘weight paint’ mode should be options inside ‘mesh edit’ mode, with a toggle button forediting the ‘rest position’ of both armature and mesh.

I would be interested to hear other opinions on how Blender’s tools could be improved for the purposes of character animation.

Now that Blender is open source, it is up to us, the animators, to come up with our wish-lists and preferred workflows so that the coders have a clear idea what they can help us with, and why they would want to implement the features requested.

I wonder if something like an ‘RVK Constraint’ for bones might
do the trick – i.e., do something like Reevan’s Action Constraints,
only have it manipulate the child mesh’s RVK’s. Seems to me that
with such an approach a sizable part of the framework has already
been coded.

… or would this just be a kludge?

Chris

P.S. Having said that – have people tried using the action constraints to fix
deformation problems in high poly meshes? (to learn more about this cool new
feature see actionconstraint.blend in the demo225 files and the 2.25 docs).

Actually, it is not really an armature problem, but really the way you build the mesh. In a couple weeks I am planning to give a few of my models to the community to play with. In the mean time, look up the word “'edgeloop”’ on google. You will find a suprising amount of information on how to create the mesh based on actual muscle deformation. Edgelooping is the technique used by most professionals for achieving realistic results.

I know, this wa opened quite a while ago, but I didn’t want to open a new thread.
So, my question is, is there any way to link relative vertex keys to armature rotations, a script maybe, if nothing else? So the vertex keys’ IPO curve would be created automaticaly based on a bone rotation. It would be almost like those local vertex rotations:)

no, but you can link Action block to bone rotation, so if you can create the deformation you want with a bone, all you have to do is create a single Action block describing the transition from one state to the other and then add the Action constraint.

I did and example file about the Action constraint, it’s buried somewhere in the News And Chat forum.

Martin

Um, thanx, but I don’t know how to use it, and I can’t find that blend file neither :expressionless:

https://blenderartists.org/forum/viewtopic.php?p=82572&highlight=action+constraint#82572

simple search with “theeth” as author and “action constraint” as subject.

Martin

Thanks, sorry about that, I couldn’t find the search button for some unknown reason:) I found it now though.

On how to attenuate the steping problem:

Please remember that the weigh is just a measure of influence among the involved vertex groups, nobody said that they need to be only 2 vertex groups involved.

If you make a particular vertex a member of let’s say 3 vertex groups, for the sake of clarity we name them A, B & C. Now, who is stopping you from making B the shadow of A, so you can have a finer degree of control over C?

What is a shadow vertex group, you ask… group A goes to bone A, group B to bone B and group C to bone C… the tricky part is that bone B is a non-IK child of A, in other words, it just mimic whatever A does… you never animate B directly (you can hide him if so you desire).

The logic behind this is:

If you have only 1 vertex group -> multiply it’s weigh by 1 to get the final motion.
If you have 2 vertex groups -----> multiply each weigh by 0.5 to get the final motion. (each get 1/2).
If you have 3 vertex groups -----> multiply each weigh by 0.333 to get the final motion ( each get 1/3).
… etc. etc. etc.

The more shadow groups you add the finer the control you can achieve.

Hope it was clear.

I have been using Character studio 4 for Max 5 with some sucess.

Max and CStudio use a Biped function. That is you take your mesh, then add a whole biped skeleton in one go. You then have to scale the bones, (in all directions needed) so that the skeleton (armature system) matches the size of the mesh exactly. Or as closley as possible, CStudio then assigns the closest verts to the nearest bones. I think this is how 2.27’s auto skinning system works.

Then there is the fine tweaking, this is so similar to the system Blender uses with weight painting and so on. There is no auto skin feature that will give you perfect deformations automatically. Combinations of armatures/splines and skins which all need to be tweaked, have to be set up, whereas Blender’s own current system seems a lot easier in comparison.

The best system I have used however, seems to be that of Z-Brush, with it’s intuitive Z-Sphere system.

Sonix.

I agree that the deformation system in Blender could be improved considerably. Following Hash’s example would be great, and would allow for more than simply smoothing out deformations; it would also allow for creases in the skin to be formed where they are supposed to be, and it would allow for muscle bulging, etc.

It would be great to do this by linking the RVK and armature-deformation systems. Just bare in mind, however, that for this to actually be useful, the mesh will need to be editable in its deformed state (which means figuring out the inverse transformation for the deformation(s)).

But I love the idea, and in fact have been hoping that it would be implimented by someone who actually has experience with those areas of the code. :slight_smile:

:-? my head hurts just thinking about this…

Martin

I’ve pretty much resigned myself to subsurfed models with as few control verts as possible when I’m going to be doing character animation. It’s rough on the uv mapping, but it’s better than crappy deformation with hi res meshes.

I think we should be able to parent a mesh to another mesh and have the child meshes vert groups be deformed by the corresponding vert groups of the other mesh. That way, you could create a nicely controlled lo-res mesh, pushed around by an armature, acting as control of the hi-res mesh. You could do all kinds of cool crap with that (think MUSCLES and SKIN!)

You can do that already… use copy rotation constraints on the controled armature… it would mimic the rotation of the bones on the controlling armature.

For example the separation between pose mode and weight paint mode makes for a lot of switching between the modes, incurring multiple mouse clicks and ‘tab’ key presses.

Ideally, when a mesh is parented to an armature, ‘pose mode’, and ‘weight paint’ mode should be options inside ‘mesh edit’ mode, with a toggle button forediting the ‘rest position’ of both armature and mesh.

I would be interested to hear other opinions on how Blender’s tools could be improved for the purposes of character animation.

I’ll take that as in invitation to weigh in! :smiley:

I’m still bumbling around the character animation tools as some of you may have surmised, but one thing I’ve noticed as painful. I think this is what ikekrull mentioned above.

  1. create the mesh
  2. add armatures and skin it, add the vertex groups
  3. ctrl-tab pose mode, try a bone’s range of motion - UGH! - ctrl-tab out
  4. tab edit mode the mesh, move points, tab out
  5. ctrl-tab pose mode, try the bone’s range of motion - UGH! - ctrl-tab out
    … and keep repeating. ARG!

Having weight or pose controls inside of mesh edit would be GREAT. Or even the reverse, allow mesh editing inside posing.

something like pressing Control-Tab when in Edit Mode would check if the mesh has an armature as parent and switch to pose mode of that armature. Shift-Tab in Pose mode of the armature could bring back edit mode for the mesh.

How would that be?

Martin