BVH Motion Capture Parsing & Animation

Final Homework • CSCI 712 — Animation Systems

Overview

For this final assignment, I worked with BVH motion capture files. The BVH format encodes a joint hierarchy along with per-frame motion data. The system I built parses the file, dynamically reconstructs the joint hierarchy, and then applies the frame data at runtime inside Unreal Engine.

Motion playback is handled by a Tick function that interpolates the animation over time, mapping the BVH rotation frames into UE5 transforms frame-by-frame.

Parsing the BVH and Building the Joint Hierarchy

The BVH parser reads the hierarchy section first, recursively constructing a tree of joints. Each joint stores:

Once the structure is defined, the motion section is parsed into a frame array. During gameplay, the skeleton poses are updated each frame by stepping through this array.

Quaternion Order Error

In the demo video, you will notice a slight twisting effect in some joints. This comes from a common pitfall:

I multiplied the quaternions in the wrong order, which changes the reference frame being rotated.

BVH rotations are intended to be applied in a specific XYZ or ZYX order depending on the file header. Reversing the multiplication flips the rotation space slightly, resulting in unwanted pre-rotation.

SIGGRAPH-Style Final Animation

Since this was the final homework and we’ve been looking at a lot of animation reels in class, I wanted to do something more fun. I took the BVH animations I had working and edited them into a SIGGRAPH-style showcase video — dramatic camera cuts, lighting shifts, and playful character motion.

The idea was to celebrate the semester and show what can be done once motion capture, rigging, and runtime interpolation all come together.

Demo Video

“Bento Mocap” — Final SIGGRAPH-Style Demo