I have successfully developed a system in Qt/C++ for human musculoskeletal mocap simulations. I can run asf, amc, bvh motion capture files and can visualize the joint transformations. I even simulated the static rigid bones of MRI scanned meshes.

31 mesh bones were extracted from MRI data and each bone is assigned to *.asf skeleton bone id/name and parent and child relationship is created. I have absolute and relative transformations of each bone and the bone mesh vertices positions are also known.

Now there is a skin mesh over the skeleton bones. I want to do rigging/skinning of that skin mesh with the bone transformation. If a bone transforms, its skin mesh should be transforming too. Literature study tells us that, assign each vertex of its bone and assign some weight to each vertex, sum up all and multiple with the bone's transformation matrix, etc. etc. and find the new position of a vertex.

I have pretty much experience to play with meshes and transformations, I can do that. But here I do not get the concept, first of all, how can we assign vertex to its specific bone? because human skin is a continues with Only One Shell, do we assign by computing the offset/minimum distance from bone to skin? Second question is how do we compute weight for each vertex? Because this mesh is not exported from MAYA or some 3D softwares, where each vertex is assigned with a weight value, but this is a static rigid mesh with no precomputed information. Third question comes to mind that how can we know that this specific vertex should be transforming with the transformation of Foot for example? How do we know that this vertex is a Foot vertex?

I want to have some concepts about the methodology, please guide me.


  • \$\begingroup\$ In modern games its basically the norm that a vertex is controlled by multiple bones at once. FYI in case it helps any :p \$\endgroup\$
    – Alan Wolfe
    Apr 20 '15 at 1:41
  • \$\begingroup\$ @AlanWolfe thanks, but I wanna know the concept. Norm = Normals right? I know that. explain it a little bit if you can. \$\endgroup\$
    – maxpayne
    Apr 20 '15 at 1:44
  • 1
    \$\begingroup\$ When a 3d animator or modeler hooks a mesh up to a skeleton, they have to specify which bone(s) each vertex is controlled by. They can do it in groups so it isn't as tedious but it's still a manual process. Also, when you assign a vertex to a bone, what you are saying is that the vertex is a vector in the bone's local space, and that it should always stay at that same local space vector no matter how that bone (or parent bones of that bone) move or rotate in their local, or global spaces. Does that help any? \$\endgroup\$
    – Alan Wolfe
    Apr 20 '15 at 1:51
  • 1
    \$\begingroup\$ And when you have multiple bones controlling a vertex, you are saying that you want the vertex to be a weighted average of the local space vector s of each of those bones \$\endgroup\$
    – Alan Wolfe
    Apr 20 '15 at 1:52
  • \$\begingroup\$ Ok let me understand first, how can I assign skin vertices to bones? for example, left leg skin vertices should be assigned to left leg bone, but how? Because skin is a One Shell mesh, how can I know that these vertices belongs to left leg? \$\endgroup\$
    – maxpayne
    Apr 20 '15 at 1:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.