I'm trying to write my own skeletal animation program and I'm having some trouble finding a source explaining the math involved as opposed to just dumping equations or code, so I have a few questions. In case it makes a difference, I'm using Open Asset Import to load Collada files with animations - the format's data layout is explained at
As far as I understand it (and please correct me if I'm wrong), the inverse bind pose matrices convert from object space to each joint's space (and they don't need to be updated every time an animation is interpolated). The inverse bind pose matrices also don't need to be transformed by their parent's inverse bind pose (i.e. are not hierarchical).
For every frame, once I have each joint's position / rotation interpolated from animation data, I go over ever vertex's weights. For each weight I transform the original vertex by the inverse bind pose matrix (to go to joint space), then by the joint's hierarchical transform (local + parent) then by the scalar weight, and the final vertex position is the sum over all weights. Is that all or am I missing something?
Another question I have is whether the inverse bind pose matrices are mesh-specific or skeleton-specific. Let's say I'm using a single skeleton and animation set to animate two different meshes (character A and character B, for example). Would the inverse bind pose matrices be the same or are they different for each mesh? Either case, why?