Motion capture: How to parent an empty ( or a set of empties ) to a bone ?

We have recorded data using the Vicon mocap system. The software that we have available can only produce c3d files (and trc and vsk).

My end goal is to generate bvh files from these c3d files.

The c3d files basically provided us with the marker positions that the actor wore and when I use the c3d importer in blender I see a cloud of empties that represent the markers and move in the same way.

I would like to import a biped armature and then attach the bones somehow to the empties from the point cloud. I initially thought that doing so using multiple child-of bone constraints was the right way to do it but I havent managed to work out how to do it correctly.
I have googled for a tutorial endlessly but I havnt managed to find one.

Can someone help me or point me in the right direction?

Are you able to get marker data into Blender? If you’re a student, you can download Motion Builder from Autodesk for free and use that to convert your marker data out to an actor. Then you can bring in your armature via fbx export in Blender into Motion Builder and Characterize it to work with your new data. The problem is that Blender doesn’t import fbx so you’ll need a workaround. I use Lightwave to import the fbx then I export MDD data that can be used to drive the character in Blender (no bones needed at this point).

I realize this isn’t the answer you’re looking for but it would save you a ton of time trying to create a null rig for Blender.

I have imported the marker data into Blender. It shows up as empties moving around along the marker trajectories. Is there no way I can somehow parent these markers to armature bones from a predefined armature?

I have also downloaded Motionbuilder, Maya and SoftImage from Autodesk (I am a student). I managed to import the c3d data into Softimage (Animate -> MOTOR ->Mocap to rig) and created a c3dpose map file. This then allowed me to animate the biped with other c3d files generated from the same actor. If I could just export these actions to bvh the problem would be almost solved.

Do you think you could explain the steps (detailed if possible!) that I would need to generate a bvh file from the marker data using any/all of these tools?

Ideally I would import the c3d data into Blender, then apply it to an armature (we are using the skeleton from the CMU bvh mocap files) and then “bake” (is that the right terminology?) the action onto the armature and export the action as a bvh file which could then be plugged into our specially designed Blender pipeline.

(I definitely need to generate bvh files because we have a pipeline in Blender setup that is dependent on the ability to apply the bvh file so that is a requirement of the solution.)

Interesting puzzle… I like interesting puzzles…

Getting a rig (armature) to work with the c3d data could be done, probably. Getting a rig (armature) to be controlled by empties can definitely be done. Exporting bvh data from blender from the c3d data doesn’t appear to be possible, but I could be wrong.

What I am wondering is if you can have a rig working in blender with the c3d data, then why would you need to export that as bvh data? Is it because you are using the CMU bvh skeleton? If so, then why not instead of using the CMU bvh rig just use a custom rig that works with the c3d data instead?

Just curious…

edit: Have you searched for a c3d to bvh converter?

@revolt_randy your first line made me laugh :slight_smile:

Ive discovered its very easy to apply c3d marker data in Motionbuilder to an actor.
Now Im just trying to work out how to export that data into a bvh file.
Its a shame I couldnt do this easily in Blender. I hope at some point this is added.

You need to “bake” the actor data onto some bones (a ‘character’) then try to export. I think there is someone working on a .fbx importer for Blender… that’s what we’re missing. You can export your rig and character out of Blender, apply the data on there and even clean up the mocap… but there isn’t an easy way to get it back into Blender. That’s why I use Lightwave to bake the vert data to an MDD file then import that into Blender on the character mesh.

What I did in the end was I looked at the script for c3d import in Blender 2.49 and compared the markers and data and realized
the script is written in such a way that you can edit it to fit your own armature and data.
So I added my own function for drawing an armature for my data and it works great (in 2.49)
For some reason the 2.61 c3d import script doesnt do anything about building an armature. It only imports the pointcloud.

I had some good results with copy location constraints on the bones. for head rotation I used an IK solver. maybe you give it a try.


btw, There is a thread from me here on BA discussing this very topic. check my personal page for my started threads :slight_smile: