Character Studio 2.0 BVH File Format Specification

This document describes the Character Studio 2.0 BVH Motion Capture File format. The BVH BioVision format is an ASCII file that is used to import rotational joint data from various motion capture systems into Character Studio 2.0 to animate bipedal characters.

Character Studio 2.0 is comprised of two plug-ins for 3D Studio MAX: Biped(tm) and Physique(tm). The Biped plug-in provides for creation and high-level articulation of biped character "bone" systems, while Physique manages skin deformation and behavior, based on bone postures.

Biped 2.0 provides direct input of BVH files from disk, including comprehensive key-frame reduction and footstep extraction to provide a fast and accurate means of import for large volumes of rotational data stored in the BVH format.

Biped 2.0 uses rotational data stored in the BVH format to pose a Biped character on a frame-by-frame basis and to move it forward in time. During import, XYZ Euler joint rotations stored in the BVH file are used to derive Quaternion bone rotation data for the biped at each frame.

Once imported, BVH-based animations can be saved out as native Biped .bip files, providing access to a comprehensive set of animation, motion mapping, and structural modification features that are built directly into Biped 2.0.

 

 

 

Overview of BVH-supported Hierarchy and Naming

Biped 2.0 supports a specific BVH hierarchy and naming scheme, as generated by BioVision Motion Capture Studios. This specific hierarchy allows for automatic mapping of BVH data to the Biped character.

Parsing order of sibling nodes in the hierarchy is arbitrary. That is, the order of sibling nodes can be altered as long as their parent-child relationships do not change.

The supported hierarchy and required node/bone names are listed below. Note that an alternative naming scheme for some nodes is shown in (). The {} notation is used to clarify the parent-child hierarchy between nodes.

Hips {

LeftHip (LeftUpLeg) {

LeftKnee (LeftLowLeg) {

LeftAnkle (LeftFoot) {

End Site {}

} } }

RightHip (RightUpLeg) {

RightKnee (RightLowLeg) {

RightAnkle (RightFoot) {

End Site {}

} } }

Chest {

LeftCollar {

LeftShoulder (LeftUpArm) {

LeftElbow (LeftLowArm) {

LeftWrist (LeftHand) {

End Site {}

} } } }

RightCollar {

RightShoulder (RightUpArm) {

RightElbow (RightLowArm) {

RightWrist (RightHand) {

End Site {}

} } } }

Neck {

Head {

End Site {}

} } } }

 

 

Character Studio 2.0 Marker Name File (MNM)

The Character Studio 2.0 Marker Name file is generally used to match custom marker names in the CSM file with Biped 2.0's preset list of known, supported marker names. When importing bvh motion capture files, the mnm file can also be used to specify an alternative naming scheme for Biped's fixed hierarchy supported joints (as listed above).

The general syntax of the MNM file consists of two columns of names.

The left column corresponds to Biped's known BVH joint names.

The column on the right corresponds to the custom joint names stored in a specific BVH file.

There should be an entry for every custom BVH joint name in the BVH file. For completeness, all BVH joints can be listed and correlated to internal Biped names, even if the names are identical.

The listing below is an "identity" listing of fixed versus custom joint name (the columns on the left and right are identical).

Optional (missing) marker name entries not in the BVH file can be omitted from the MNM marker file.

This list can be easily copied and modified (via the right column) for each unique motion capture session sample.

Hips

LeftHip lfemur

LeftKnee ltibia

LeftAnkle lfoot

RightHip rfemur

RightKnee rtibia

RightAnkle rfoot

Chest upperback

chest2 thorax

LeftCollar lshoulderjoint

LeftShoulder lhumerus

LeftElbow lradius

LeftWrist lwrist

RightCollar rshoulderjoint

RightShoulder rhumerus

RightElbow rradius

RightWrist rwrist

head head

neck neck

 

 

Establishing a Correct Neutral Pose

In creating a BVH file that can be read into Character Studio Biped and displayed correctly, it is critical that the effective neutral pose of the BVH match Biped's neutral pose. That is, the hierarchy, bone lengths, and initial rotations specified in the HIERARCCHY section of the BVH file must create a figure that matches the default pose of a newly-created Biped figure. The initial pose for Biped places the biped figure upright along the +Z axis, facing "forward" along the -Y axis, left hand on the +X axis. Hands are oriented with palms against the outside thighs, with thumb on the forward side; fingers and thumb of each hand outstretched (open) facing "down" along the -Z axis. Legs are together and straight at the knees.

A correctly oriented BVH file can be verified by setting all rotational values in the first frame of the MOTION section to zeroes. When all joint rotation values are set to zero for the first frame of the BVH file, the results displayed at frame zero in Biped, after import, should match the default position of the Biped exactly.

 

 

General BVH File Structure

The BVH file is divided into two major sections: HIERARCHY and MOTION.

The HIERARCHY section describes the joint-to-joint connections and offsets for the sampled motion data.

The MOTION section describes the movement of these individual joints on a per-sample basis.

CHANNELS information listed within a specific node of the HIERARCHY section signals the existence of corresponding XYZ data streams in the MOTION section which follows. CHANNELS information represents the bulk of the BVH file data.

In the MOTION section, each row contains data values for all CHANNELS which were specified in the HIERARCHY. Each successive row contains a single time sample for all CHANNELS. The listing order of CHANNELS values in each row in the MOTION section is implicitly assumed to match their listed order from the HIERARCHY section (top down).

All string names must appear exactly as shown below, with the exception of nodes names (e.g. LeftHip, LeftKnee, etc) for which alternative naming schemes have been listed above.

CHANNELS data that corresponds to unrecognized JOINT names will be ignored.

The [] notation indicates values or strings that should be used in the actual file.

 

---------------------------- File Starts Here ---------------------

HIERARCHY

ROOT Hips

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation

JOINT LeftHip

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftKnee

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftAnkle

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET [x_float] [y_float] [z_float]

}

}

}

}

JOINT RightHip

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightKnee

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightAnkle

{

OFFSET [x_float] [y_float] [z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET [x_float] [y_float] [z_float] }

}

}

}

JOINT Chest

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftCollar

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftShoulder

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftElbow

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftWrist

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET [x_float y_float z_float]

}

}

}

}

}

JOINT RightCollar

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightShoulder

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightElbow

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightWrist

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET [x_float y_float z_float]

}

}

}

}

}

JOINT Neck

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT Head

{

OFFSET [x_float y_float z_float]

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET [x_float y_float z_float]

}

}

}

}

}

MOTION

Frames: [number_of_time_samples_to_follow]

Frame Time: [0.033333]

[samp1_chan1_float] [samp1_chan2_float] ... [samp1_chanN_float]

[samp2_chan1_float] [samp2_chan2_float] ... [samp2_chanN_float]

...

[sampN_chan1_float] [sampN_chan2_float] ... [sampN_chanN_float]

------------ end of file ----------------------------------

 

 

 

 

Example Biped-supported BVH File

HIERARCHY

ROOT Hips

{

OFFSET 20 0.00 0.00

CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation

JOINT LeftHip

{

OFFSET 3.430000 0.000000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftKnee

{

OFFSET 0.000000 -18.469999 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftAnkle

{

OFFSET 0.000000 -17.950001 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.000000 -3.119996 0.000000

}

}

}

}

JOINT RightHip

{

OFFSET -3.430000 0.000000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightKnee

{

OFFSET 0.000000 -18.809999 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightAnkle

{

OFFSET 0.000000 -17.570000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.000000 -3.250000 0.000000

}

}

}

}

JOINT Chest

{

OFFSET 0.000000 4.570000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightCollar

{

OFFSET -1.060000 15.330000 1.760000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightShoulder

{

OFFSET -6.060000 0.000000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightElbow

{

OFFSET 0.000000 -11.900000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT RightWrist

{

OFFSET 0.000000 -9.520000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.000000 -7.140012 0.000000

}

}

}

}

}

JOINT LeftCollar

{

OFFSET 1.060000 15.330000 1.760000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftShoulder

{

OFFSET 5.810000 0.000000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftElbow

{

OFFSET 0.000000 -12.080000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT LeftWrist

{

OFFSET 0.000000 -9.820000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.000000 -7.369996 0.000000

}

}

}

}

}

JOINT Neck

{

OFFSET 0.000000 17.620001 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

JOINT Head

{

OFFSET 0.000000 5.190000 0.000000

CHANNELS 3 Zrotation Xrotation Yrotation

End Site

{

OFFSET 0.000000 4.140008 0.000000

}

}

}

}

}

MOTION

Frames: 222

Frame Time: 0.033333

0.00 39.88 -0.01 -1.79 -18.43 -1.74 5.02 -0.34 0.03 6.61 42.19 7.67 -3.87 -7.61 1.40 3.65 15.11 -0.95 2.33 11.06 -15.20 -7.25 -10.08 1.61 4.89 18.33 11.12 -17.68 0.00 0.60 40.98 9.99 22.36 0.00 -30.82 11.92 0.00 0.00 0.00 10.97 0.00 12.96 -37.45 -2.92 9.36 -180.00 -80.59 157.44 0.00 0.00 0.00 -35.59 52.18 0.00 11.29 -39.90 61.74

0.11 39.87 -0.01 -2.31 -17.29 -3.05 3.19 -4.22 0.24 7.38 40.49 -1.01 -3.87 -7.94 1.38 3.46 13.75 -0.82 2.47 11.44 -14.02 -7.25 -10.10 1.61 5.82 17.00 12.55 -17.36 0.00 2.00 42.28 10.77 34.97 -0.85 -22.68 14.90 0.00 0.00 0.00 10.01 0.00 11.77 -40.78 -3.61 6.09 -178.56 -87.20 158.39 0.00 0.00 0.00 -36.14 51.71 0.00 10.04 -38.83 61.13

0.22 39.88 0.02 -2.83 -16.47 -4.56 1.98 -6.94 0.24 6.27 37.48 -5.85 -3.87 -7.23 1.43 3.26 12.76 -0.72 2.52 11.87 -12.69 -7.25 -10.11 1.60 6.78 15.96 14.27 -16.96 0.00 3.28 44.28 12.02 51.41 -0.44 -17.87 20.64 0.00 0.00 0.00 9.19 0.00 10.84 -44.55 -3.26 2.86 -0.03 -85.90 -23.56 0.00 0.00 0.00 -36.74 50.88 0.00 9.12 -37.86 60.76

0.32 39.92 0.19 -3.51 -17.17 -7.03 1.79 -6.29 0.20 2.67 31.81 -3.40 -3.86 -5.65 1.54 2.98 13.46 -0.69 2.23 12.43 -10.34 -7.26 -10.29 1.58 7.48 16.60 16.65 -16.32 0.00 4.70 47.12 13.31 65.41 0.63 -16.14 26.83 0.00 0.00 0.00 8.37 0.00 9.94 -48.32 -2.20 -0.50 0.41 -78.48 -23.57 0.00 0.00 0.00 -37.20 49.91 0.00 8.35 -37.07 60.23