I am trying to understand the Blender Python API, more specifically
PoseBone types and how they fit in with skeletal animation.
This is how I understand it so far:
Bone type holds the transformation matrix from the bone's local space to its' parent object's space in its'
There is one
PoseBone for each
Bone in a scene for each frame of an animation. Another way to put it is: There is a pose for each frame of the animation and this pose's skeleton (for the current frame) is made up of
PoseBone holds the transformation matrix to transform the position of the bone in its' bind pose to it's position in the current frame. This transformation can be accessed through the
location properties. If I apply these to the position of the bone in its' bind pose, then the bone will be moved to its' correct position for the current frame.
Bone has a
head and a
tail. As I understand it, the
head is the origin of the bone's local coordinate space. So the "position" of the bone I mentioned earlier is also the position of the bone's
Am I correct in my understanding so far?
I am trying to create an animation system where the bone is initially in its' bind pose. There is a 4x4 transformation matrix to transform from object space to bone space. We use this to compute the origin/position of the bone in its' bind pose.
For each frame of the animation, the
location are used to transform the position of the bone from its' inverse bind pose to the pose in the current frame.
One thing that is not clear to me is what the
rotation_quaternion represents here. How do I use it to compute the position of the bone in the current frame?
There is something else unclear to me. I understand that for skeletal animation in Blender, each vertex of a mesh has a list of bones that its' bound to, with an associated weight for each bone.
How is the final position of the vertex computed for each frame? Can I make a transformation matrix from the
location properties, compute a weighted average of the matrices for each group, and use that to transform the vertex's position from its' bind pose? Again, I am not sure how to fit in the
As well, does the
tail of the bone matter at all for the vertex skinning? As I understand it so far, all I need to know to compute the final position of the vertex for the frame are the SQT transforms of the relevant bones.
I am stuck on this and would appreciate someone helping me straighten this out. The documentation is appreciated but I think I am missing some essential details for what I need to do that I can't find in the documentation.
Partial answers and hints will still be appreciated.