TITLE: Ball Boy Escapes
NAME: Ken Ayers
COUNTRY: USA
EMAIL: keayers@columbus.rr.com
WEBPAGE: http://home.columbus.rr.com/keayers
TOPIC: Escape
COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT.
MPGFILE: ballboy.mpg
ZIPFILE: ballboy.zip
RENDERER USED: 

    POV-Ray 3.1g


TOOLS USED: 

    Corel PhotoPaint (Spinning stars image map)
    VideoMach 2.7.2 (Conversion to MPEG format)


CREATION TIME: 

    Two weeks (about 40 hours) to create the animation;
    1:58:20 to render 1128 frames


HARDWARE USED: 

    HP Pavilion, 1.0 GHz AMD Athlon, 256Mb RAM


ANIMATION DESCRIPTION: 


This was just an idea that popped into my head, nearly complete,
as I was feeling somewhat trapped in my office at work. It fit
with the topic's theme and just begged to be realized.


VIEWING RECOMMENDATIONS: 

    Full color, 24 frames per second


DESCRIPTION OF HOW THIS ANIMATION WAS CREATED: 


There is nothing terribly complicated in this piece. As with
any strictly POV-Ray animation, managing the animation clock
is the biggest challenge. For this, I started with a technique
I developed for an earlier animation and refined it, by adding
the "DefineScene" macro. This technique gives me a "scene-oriented"
view of the animation, where a "scene" becomes any sequence of
related actions: "Ball Boy charges the wall", "Ball Boy leaps",
etc. All scene-related state is calculated by the "SceneTiming.inc"
include file. It's primary outputs are global variables that hold:

    1) the current AnimationClock - POV-Ray's "clock" scaled to
       the overall length of the animation;
    2) One global variable for each scene - e.g. SCN_Intro, which
       holds the time at which the scene begins;
    2) the currently ActiveScene - basically the time at which
       the current scene began; and
    3) the SceneClock, which ranges from 0.0-1.0 for the duration
       of the currently active scene.

Other files, such as "CameraMotion.inc", "BodyMotion.inc" and
"EyeMotion.inc", use #switch directives to compute variables
that affect the camera's location and look-at points, the body's
orientation, and the eyeball and eyelid orientations,
respectively.

Armed with a list of 31 individual scenes, and their approximate
timings, I built the "set" and the character, and, within a
couple of days, had the main action flow working. Originally, I
used a separate spreadsheet to record the timing information for
each scene. That soon became a REAL pain, so I added code to
"SceneTiming.inc" that used variables it had computed to output
the "SceneReport.txt" file. The generation of this file is
controlled by a boooolean variable - GenerateSceneReport -
defined in "BallBoy.pov". After making any changes to the scene
lengths, I simply set that variable to "true" and rendered the
first frame of the animation; and then I had a fresh report
with all updated scene timings. (Can you tell I'm a programmer
by profession :-)

Then I started implemented the more complext actions, mostly as
macros, so they could be reused easily. One of the most complex
of these is the "LeapTo" macro. It computes, as a scene progresses,
the character's position, "squash" and "stretch" factors, and a
"lean" angle, so that the character leans back a little, just after
reaching the apex of his leap.

In Ball Boy's first two escape attempts, he collides with the
walls and "sees stars". The stars were created as a GIF image
and mapped onto a transparent cylinder, which is then rotated
throughout the scene in which the stars appear.

Although there are probably many other ways to accomplish the
fade-in and fade-out sequences, I chose to enclose the camera
in a small "bubble" (sphere), whose color changes from opaque
black to transparent. During the title sequence, the title is
actually positioned just in front of the camera, within the
"fade bubble". An ambient light setting of 1.0 makes it glow,
so that it is visible without any external lighting.

An important part of character animation is the "blink cycle".
Character's (ones that have eyes) that don't blink look stiff
and lifeless. Consequently, except for specific scenes in which
the character's eyes are doing something else, the "EyeMotion.inc"
calculations, define a continuous blink cycle that rotate Ball
Boy's eyelids closed and then back open, every couple of seconds.

Finally, producing animations using only POV's scene description
language is challenging, to say the least. Because even simple
actions require considerable effort, such animations are not
likely to approach the richness possible with even low-cost
interactive modeling and animation packages (I particularly
like Hash's Animation:Master). Still, the programmer in me
enjoys writing code that produces graphic images and animations,
rather than stuffy ol' databases, reports, and user interfaces!

