MeshDeform issues

I’ve been working with the MeshDeform modifier for a few days now, and I just can’t seem to get good results.

This is the process:

1.Create character in makehuman and export to collada dae

2.Import character with armature into blender using the collada importer

3.Move skeleton, eyelashes, eyebrows, teeth, and tongue to layer 20 (to get them out of the way)

4.Move the main skin mesh to layer 3

5.Build a low poly cage using the armature on layer 1 as a guide. Name this cage “cage”

6.Check the shape of the cage by comparing it to the high poly mesh on layer 3

7.Move the low poly cage to layer 2

At this point:
Armature on layer 1
Cage on layer 2
High poly mesh on layer 3

8.Right click cage, holding shift, right click armature. Ctrl-P–>Armature–>Bone Heat
(Makes the armature the parent of the cage)

9.Check that the aramature correctly deforms the cage, and it seems to

10.Select the high poly skin mesh on layer 3 and add the meshdeform modifier. Set the object in the MeshDeform modifier to be “cage” and press bind

11.Wait a moment while blender binds the mesh to the cage

12.Select a bone in the armature in pose mode, and try to rotate the bone

13.Get odd deformations like moving verts in the high poly mesh that are in the leg that isn’t being manipulated, even though the corresponding verts in the low poly cage are not effected at all

I’m obviously doing something wrong, but I can’t figure out what I’m missing.

Is my low poly cage too “low poly?” Should I sub-divide it more? Can anyone look at what I’ve done and tell me what I can do to make this function correctly?

Notes: I tried to upload the blend file, but it wouldn’t take so I’ve uploaded it to this external url:

This blend has the cage unbound to reduce the size. Just select the high poly mesh on layer 3 and press bind under the modifier controls to re-bind it. remember to allow a few moments to recalculate the binding before trying to use the blender interface again.

It sounds like one of two things.

You need to adjust the bone heat weights or that perhaps the cage is too close to the high poly mesh.

You have some rotations etc on your objects (probably the result of importing).

Press [n] and in the transform properties panel, look at the entries for scale and rotation.

To correct,

  • disconnect your cage from the armature (Alt + p)
  • delete the mesh modifier from the high res mesh,
  • select each object and press Ctrl + a,
  • reparent the cage mesh to the armature (you don’t need the vertex groups since they already exist from before),
  • add the mesh modifier to your high poly mesh.


What you said was absolutely correct.

Now it seems to be working better, but I’m getting this odd pinching effect in the joints.

How do I go about correcting this?

Check BlenRig here, and video tutorials on the rig here. The rig is based on mesh deform. I think that your main problem is that you are binding the mesh with a low precision level. Level 6 gives reasonable results at first glance, but if you rotate the whole armature more that 90 degrees you will start noting strange artifact in the model. So, my advice is that you bind the final cage with level 7. Still, use level 5 or 6 to preview the deformation while you are still tweaking the cage.

On the other hand, I think that you cage is definitely too low poly in certain areas. The advantage of using a cage object is that you don´t really have to care about the topology from looking good, you just have to care about the resulting deformation. So, if you have time check BlenRig (if you like it you might also start using it, hehe), then refine all the necessary areas, sepcially the joints, and correct the weight painting.

The main idea with the meshdeform cage is that you have certain areas that are nor deformed, so, for example, in your cage you have one big group of polygons for the upper leg and another for the lower leg. So, if you rotate the lower leg, you will notice that all the polygons from the upperleg start to shrink too. You have to avoid that. So, what you have to do is to subdivide the knee area a few times, and weight paint the cage so that when you rotate the lower leg area, the knee section bends, but the upper leg stays the same.

Check how the cage behaves in BlenRig and you will have a good reference of how to make things work with the Meshdeform modifier. In the rig, the main model is at layer 1, the Armature at layer 2 and the cage object at layer 3.

Good Luck!!