The goal of this project was to expand on the first
programming assignment given in this class, by applying signal
transforms on motion capture data. In addition, I sought to give a
user an interactive environment in which to apply these
transformations.
This project was be writtern in Java 1.2 (aka Java 2), and used
the Java3D API which came out recently. Plans to make this an applet
were abandoned, as major headaches were involved at the time in
putting Java 2 applets up on current browsers. As Java 2 emerges as
the standard for browsers, this project will probably be moved to a
client-server architecture, with the client as an applet.
The project can be broken into two parts: Getting the motion
capture loaded and playing; and applying signal processing to the
motion.
 |
Figure
1: The skeleton of the creature being played |
|
|
Motion Capture: The loading and main
handling of the motion capture data was done by the MoCa (Motion
Capture - though some pun intended) class. It handles
BVH format motion capture data. Once the skeleton is loaded, it
is revolved on the screen. The following keys are used to fully
see the motion:
- 'P' carries the skeleton through
its full motion.
- Keypad '8', '2', '4'
and '6' dolly the camera. (num lock on)
- Keypad '7' and '9' zoom
out and in respectively
- Keypad '1' and '3' swing
the camera left and right
|
Signal Processing*:
Signal processing was performed upon the motion by considering
joint angle motion parameters as signals. Lowpass and Bandpass
levels were calculated from these signals. figures 2 and 3 show
the signals of hip angles from a walking character in white. The
yellow signals are the result of 4 (out of ultimately 7)
convolusions performed on the original (white) signals by a
B-spline kernel of width 5. Note that low frequency signals
produce the general motion involved - walking, while the high
frequency signals give this general motion certain subtleties. |
 |
Figure
2: Bandpass signal sequence |
|
|
 |
Figure3:
Bandpass signal sequence |
|
|
The desired changes to the signals to produce
altered motion were done by means of a graphical equalizer. The
bands on the equalizer corresponded to gains to multiply the
bandpass sequences with. For example, changing the gains to the
middle frequencies produced the "smoothed but exaggerated"
walk described by Bruderlin and Williams*. |
The following keys are used to apply signal
processing to the loaded motion:
- 'S' produces the lowpass and
bandpass charts, and gives the user a graphical equalizer
- 'R' is used after the equalizer
setting have been changed, to put the changes into effect.
Note that the changes to the equalizer are to be done
between 'S' and 'R'. Afterwards, all successive
changes to the bands need to be followed by hitting 'R'
to put the changes into effect. |
 |
Figure
4: Graphical equalizer to change gains to bandpass
sequence. |
|
|
Source Code:
The following files constitute the source code of the project:
- Bone.java - stores
information on bones (line between two joints) - while still
referred to in code, its actual use has been discarded (will be
removed during later clean up)
- ChangeField.java -
Textbox used by Graphic equalizer to show
current gain value for a particular band
- GraphicEqualizer.java
- Window for the graphic equalizer used to
change band gain values
- GraphsFrame.java -
Window that displays the SimpleGraph components
- Joint.java - Stores
information on a single joint - contains parent, child and
sibling information used when traversing skeleton tree
- MoCa.java -
Main class that is run. Takes one parameter -
name of BVH file
- MoCaCanvas.java -
Component on which creature is drawn and
animated
- SignalProcessor.java
- Does the motion multiresolution filtering
upon signals
- SimpleGraph.java -
Component that draws the signal graphs
- StringMessageHandler.java
- interface to transfer messages b/w classes -
not really used by project
Test Files:
The following files contain data for some basic motions (motion
data provided by House
of Moves Motion Capture Studios)
|
|