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!