Problem with my Character

I posted this animation earlier in the animation projects forum as a finished clip, but decided to repost it here since I may do more with this guy - if I can get his problems worked out.

If you watch the clip, you will notice his body, especially his arm, being distorted as he moves around, popping in and out. I would like to know if there is any easy way to fix or minimize this problem. Or would I be better off not trying to fix this rig?

Also attached is a screencap of the rig and model itself. One possible culprit for my problem, I’m thinking, is my modelling, which consisted of a cube with subsurf.

If anybody could explain to me or show me why my character does this, I would appreciate it. :slight_smile:


Two ways to fix:

  1. Pay more attention to weight painting. Don’t rely on the defaults but go into weight painting mode with arm bent at odd angle and adjust weight paints until it looks good for that pose. You may need to spend some time in a lot of poses to get a good overall balance.
  2. Corrective blendshapes. Go to the part of your animation where the mesh is wrong, and add a shape key, which you can resculpt into the more ideal proportions. Unfortunately, Blender shapekeys are heavily reliant on positioning so it’s pretty much a per frame fix. As your animation nears that part, use the action editor to key a slide between original base and tweaked mesh.

Actually there is a somewhat easier method using/editing bone envelopes that I discovered trying to help someone with a mesh that had bad topology . Simply put, you just need to scale the root tip of the upper arm bone down to a very small value (if I recall something like .025) and just scale up the envelope for the shoulder bone to cover some of the area that the upper arm influences to create an area of influence/weight overlap (so mesh weights actually mean something) . You need to have only just the envelope option turned on in both the Armature panel and in the mesh modifier panel as well as delete any current vertex groups previously created .

If what I said above doesn’t make any sense or you can’t get it to work, just post the blend … It should take me about five minutes to fix it .

And to add to Lancer’s good advice for your future projects … Learn about and model in the future with good topology in mind . The reason why your mesh deforms badly is because of it’s topology mostly … and you might have a few more verts then necessary for a simple character . The old saw about “less is more” definitely figures into creating meshes for animation . If you want to do a controlled culling of verts in your mesh, try using Alt-LMB to select edge loops and then X (delete) -> edge loops (bottom of the context menu in 2.45) … You will be surprised how few verts you need to get to even pretty complex organic shapes using the subsurf modifier (think of the actual verts in the mesh as the subsurf cage) .

Nice speed tip. Must remember to use envelope and resize joints prior to the manual stuff from now on. I understand this would work for a shoulder, where there are two joints to play with (shoulder / clavicle and upperarm root), though you would not be able to apply the same to an elbow where there is one joint?

What I’d like to see is more on how to make spline joints (joints influenced by curve which can have cluster links so when the curve is manipulated, joints follow… kind of like a bowstring (curve) influences a bow (chain of joints)… this kind of setup is really useful for spines etc. I’d also like to see orient constraints etc… I’m sure Blender must have them… where I can link the rotation of bones to other objects (e.g: a floating cube) so that those objects become “handles” when wanting to animate the puppet rig.

I thought you might also like this:

… where there are two joints to play with (shoulder / clavicle and upperarm root), though you would not be able to apply the same to an elbow where there is one joint?

In those cases all you have to do is to add extra loops above and below the joint in the mesh and include those into the weight/vertex group for the upper and lower bones, so that the respective weights where the overlap occurs (even if set to 1.0 - full/red influence) is divided in half . With some tweaking you can get decent joints easily … by tweaking I mean stuff like rotating the loops or adding poles at the joints themselves .

… I would usually just post an example at this point of my half finished rig examples … but I am not at my usual internet connection because it died for some reason . Just PM me if you want to take a look at it … hopefully I will be back up by then …
Actually I am trying to record/write some tutorials on this subject right now … but am having some trouble with trying out various formats/software … So hopefully soon, once I have sorted the format out, I can try to lay out the basics of weighting verts in a more orderly format …

And actually some of this will be a moot point once the next release happens (I guess they are going to release 2.46 now ?) with the bone heat/dual quaternion option that will be available . Which does an almost “magical” job of assigning weights to a mesh with pretty decent results … But (not that I don’t appreciate magical solutions provided by the developers - Brecht - in this case) I think there is a good case to be made for understanding how and why weights work the way they do … Just by understanding decent topology and how weights are assigned and work you can get good deformations without using over complicated “solutions” for problems … A good 90% of making art is understanding the medium/media you are working with, this applies whether you are using oils, carving stone or making 3D animations .

Thanks, both of you, for replying! As soon as I get a chance, I will put your info to use - very busy at this time of year.

I got the mesh to deform better, as per Lancer’s (and Vertex Pusher) suggestions (a little weight painting seemed to do the trick good enough).
BUT - now I’m having one of those stupid problems most likely caused by some little thing I did. -------------‘problem’ deleted----------- Err, never mind. I was just trying to use Loc instead of LocRot.:o I shouldn’t work on stuff like this when I’m tired…