1
$\begingroup$

I have a .bvh file of an armature with some bones; it has an animation but it's based on the translation of these bones not rotation. Is there a way I can make the same animation with rotations instead? As this armature is parented and weighted to a mesh.

The bvh data is of a facial animation. The final animation needs to be exported to an application that doesn't support bone translations.

If anyone could, please advise.

$\endgroup$
  • $\begingroup$ There is a motion capture tools addon - does it help at all? There is a Carnegie Melon Univ mocap library addon, it imports the marker cloud as a set of empties and imports motion data and links it to an armature, not sure if that is pre-calculated rotations or not. $\endgroup$ – sambler Oct 22 '14 at 7:26
  • $\begingroup$ @sambler, thanks for your comment. The bvh I have is not a human skeleton one, its another armature, but its animation is made from the bones translation, but I want to have the same animation but with bones rotation not translation, any advice? :) $\endgroup$ – Tak Oct 22 '14 at 7:35
  • $\begingroup$ I was thinking the cmu scripts may show how they link an armature to the point cloud data. $\endgroup$ – sambler Oct 22 '14 at 7:46
  • $\begingroup$ @sambler what do you mean? sorry $\endgroup$ – Tak Oct 22 '14 at 7:47
  • $\begingroup$ The marker cloud data is imported as empties moving around that match the spots on the actor, this must be linked to the armature to get it to follow the points. The cmu importer is an addon written in python, it's scripts may show how they link the point cloud to an armature. Unless it is pre computed data and imported separately. $\endgroup$ – sambler Oct 22 '14 at 7:55
1
$\begingroup$

You can create new bones within the head, add a stretch to constraint and then bake the animation to get bones that rotate and scale and not translate.

  1. Select a bone on the face (forehead1 in this example)
  2. Snap cursor to bone ShiftS Cursor to Selected
  3. Select tip of the base bone (that is parent of all others)
  4. Extrude a new bone E
  5. Snap the tip of the new bone to the target bone ShiftS Selected to cursor
  6. Name the new bone to forehead1.new (see later)
  7. Add a stretch to constraint and set the target to Armature then bone to forehead1

Repeat these steps for each bone

Bake the animation (Pose->Animation->Bake action, enable visual keying and clear constraints), this will turn the movement created by the constraints into rotations and scales for the bone so that the constraint can be removed. This allows the final animation data to be exported as constraints are blender specific.

  1. select forehead1 and delete the bone
  2. select forehead1.new and rename it to forehead1

Repeat for each bone

This is needed to keep the vertex weights in effect for the new bones, giving the new bones control of deforming the mesh. If you rename the original bone the vertex group will get renamed to match, therefore we need to delete the original bone and rename the new bone to match after the animation has been baked.

Edit:
I have made an addon called Rotation Armature to perform this task. Save the script from the link, then install and enable it you will then find a button in the tools tab called Create rotational bones which will perform the steps listed above. This is currently rather specific to the test armature you used, I may update it later to be more versatile.

| improve this answer | |
$\endgroup$

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.