Current Thesis Results
Holding, Pausing, and Layering, Any Reach, Any Throw, November results, Changing Styles, Other
changes, Basic Layering
Latest Results: A Scary Jump!
This is the first animation in which I'm actually trying to
convey something, and it (coincidentally) makes use of most of the major
elements in the thesis. It consists of seven primitive actions
(i.e. Motion Models) sequenced together, utilizing holds for some
of the transitions. Factoring out the time to fix the bugs I
discovered along the way, this
animation took well under ten minutes to create, and that's including
a couple of variations that I ultimately abandoned.
Hold vs. Pause+Layering
This is a demonstration of several ways in which we can
combine motions. All three animations above consist of the same three actions:
a sequence of two jumps, with a "look over the shoulder" in-between when George
hears a noise behind him. On the left is the default segue we get from
simply chaining the three motions together. In the middle, we have specified
that the look action should try to hold the pose it began in, subject
to achieving its own goals (i.e. gazing at the specified target). On
the right, we have instead paused the first jump just before it segues into
the second jump, and layered the look on top of it during the
pause. The motion here is less muted than that of the hold, and we have more
combinatorial freedom, since we can pause the underlying motion at any time
(whereas with the hold we must terminate it), and we can layer ad infinitum. However, layered motions must compete for resources with the underlying
motion, whereas the hold does not, since it is segueing from the "underlying"
Any Reach, Any Throw
The latest actions I have implemented are a "reach" that can
acquire a target object and a "throw" that can throw it at any target. Since I am not modeling articulated hands, the grasp is
rather simplistic. Nevertheless, from ten base motions I can synthesize a plausible
reach for practically any target a human could reach, and from just
four base motions (per Style) I can plausibly throw at any target (with
control over the ballistic trajectory, if desired) out to 15 meters or so.
All three variations shown here use the same two Motion Models (reach and
throw). Things to note: he tracks his target with his eyes - this
behavior is selectable (on by default); the green fellow throws
sidearm while the other two throw overhand (just a Style change).
|| This sequence is the default animation you get from my system
if you sequentially compose the actions Jump, Foot-Shuffle, Jump, Fist-Shake, Fist-Shake.
Use your imagaination and imagine he has a fist.
|| This is the result of six simple editing operations, each
equivalent to dragging an object in 3-space from one place to another. The six
things changed are starting and landing positions for the first jump, direction in which
to shuffle the feet, landing position for the second jump, and the target of his rage for
each fist-shake. The fist-shake demonstrates the Aim-At constraint, used on both the
fist and the gaze direction.
Note the timing on some of the transitions is
still off, as I haven't yet done the timing measurements.
| This is a simple sequence of jumps to traverse the three
pillars. Inbetween the jumps, George must turn to the right to more naturally
execute the second jump. This is accomplished by inserting a Foot-Shuffle motion
inbetween them. Foot-Shuffle can generate both turns and small steps in any
| Here is the same animation, but by performing two
menu-selections, we've changed the Style of both jumps from my hand-animated style to
"Spiff-Jump", which is more or less me motion captured (some of the data was not
usable, so I rotoscoped it with some fill in the blanks). This causes the animation
to change in several subtle ways, including its duration; however, the goals are still
satisfied, and all the motions automatically adjust to the changes.
Other Changes We Can Easily Make
|| I added a "gravity" parameter to the Jump Motion
Model. It's not even close to physically accurate, as it only adjusts the timing and
speed of the jump, not the geometry. But it's still somewhat cool, and any value
entered for a particular Motion Model propagates forward in time until changed by another
Motion Model that cares about it. Here I've set gravity to two G's for the first
jump, and it propagates to the second.
|| Here we've substantially changed the animation, with only a
few operations. The pillars have shifted position and height, and we need to adapt
George's motion to compensate. Basically, we just changed the landing spot of both
jumps, and the starting spot of the first, plus told the Foot-Shuffle that he no longer
needs to pivot for the second jump, but rather needs to step to the edge of the pillar.
Finally, that first jump is a doozy, so we quickly inserted a Catch-Breath after
the first jump.
| Here is a simple animation consisting of three actions segued
together: a pivot to the right, followed by a shuffle forward, ending with a fist-shake at
| On top of this baseline animation, we've now layered a second
stream of actions: "check the watch" followed by an "ah-ha!" gesture
which, when completed, resumes into the baseline animation. This is possible
because these actions need to use only joints/bodyparts that the baseline actions don't
consider crucial. If we had tried to layer a jump on top of the pivot, the system would
complain because both actions require use of the feet. Note that, in my system, layering
an action instead of segueing it is merely a matter of pushing a button.