HELTER SKELTER

A Psychadelic Monkey Snowboarding Movie

By Jasjeet Thind and Clint Kelly


The Plot

The monkey grabs a snowboard. He does some tricks. His bindings break. He falls. For more details, take a look at the sidebar.

Scene By Scene

  • Title Screen: We embossed our title and names onto a white background. (It's supposed to look like snow.)
  • First Run: The monkey starts out his day of boarding by catching big air off of a lip and doing a 720.
  • The Spin: After his (or is it her?????) 720, the monkey decides to test his skills by attempting a 720-degree spin -- while he's still on the ground!!!!!
  • Cheers: He's pretty happy after pulling off the tricky spin and he pumps his fists.
  • Transition Scene: Remember the "campy" Batman TV show with Adam West...?
  • Balance: Right before his big jump, the monkey starts to lose his balance. Oh no!
  • Ice: Around where the monkey rides, the big air is found off of a snow drift in the middle of a frozen-over river.
  • Big Air: The monkey picked up a lot of speed on the ice and now he has enough altitude to pull off some tricks!
  • Psychadelic Trick #1: He has a lot of time for a lot of tricks...
  • Psychadelic Trick #2: More of the same...
  • Bad Bindings: Unfortunately, the monkey spent too much money on reefers and booze and women and he had to buy his bindings out of the back of somebody's van.
  • Uh oh...: Having his board fall off in mid-air freaks out the monkey.
  • Falling: This is typical cartoon-fare. The monkey tries to flap his arms to fly, he realizes he can't, etc etc.
  • The Crash: The monkey hits the ground and gets tossed around like a rag doll.

How It All Works

Embossing

To emboss, we created a regular title screen and constructed a plane with the same dimensions. Then we marked the colors of the title screen and the positions and normals of the plane. We changed the heights of the positions of the plane that correspond to the letters on the title screen by adding the color from the title screen (times a small constant) to the height of the plane at each point.

Reflections

Reflections are actually quite easy! Since our slope was always a plane at z=0, to create a reflection we just scaled our objects by [1 1 -1] and made our plane slightly transparent.

Shadows

Shadows were also quite easy -- we created them in much the same manner as we made reflections. We scaled the objects by [1 1 .01] and colored them black. Obviously, these shadows are pretty "cheap" (the macro that creates them is called SHADOWSSUPERCHEAP), but they look pretty good and don't take much computation at all. We actually wrote another macro that generates more appropriate shadows from a directional light-source, but we discovered that it wouldn't work for objects that have been scaled, rotated, or translated.

Modelling the Monkey

The monkey was modelled heirarchically almost entirely with ellipsoids (lots of them). The only non-ellipsoid in the entire monkey is his tail, which is a cylinder and a sphere combined and then altered with parametric equations to make it move with time. The monkey's motion is based on forward kinematics -- the MONKEY macro has over fifty inputs, most of which determine the angles for rotations of each joint around the x, y, and z axes. As a quick example of how this works, let's look at the arm. We start building an arm by creating the hand (just an ellipsoid). We translate the hand so that one edge of it is on the origin, then rotate it at the wrist joint (all three rotations -- x, y, and z -- are inputs to the macro). Then we add the forearm (also an ellipsoid), translate the forearm plus the hand to the origin, and rotate the entire unit around the eblow joint. Finally, we do the same thing for the upper arm (add it to the rest of the arm, translate, rotate about shoulder), and we have a complete arm. We followed this basic algorithm to create the entire monkey. We also have inputs to determine the angles of the eyes and the movement of the tail.

Animating the Monkey

We achieved most of the monkey's animations by changing the joint angles with sine functions that vary with time. We actually wrote two macros -- TRANS and BS -- to handle these movements. TRANS takes as inputs starting and ending values (which were typically arm or leg joint angles) and a time parameter, which is the number of frames to take to change from the first to the second value. This change is accomplished with a sine wave to make it smooth. The formula looks something like this:
Output = start + (finish-start)*sin(.5*pi*time/transition time)
We used TRANS to smoothly move between two angles for joints. BS takes as inputs a value and a time and outputs numbers close to the given value over time. The formula looks something like this:
Output = value + (magnitude of change)*sin(2*pi*time/transition time)
We used these macros extensively in our .net files!

The Psychadelic Effects

Although realism is nice, sometimes it can get a little boring, so we added a lot of cool color cycling effects to our movie. We wanted to make a large variety of effects, but unfortunately we needed to sleep for at least a couple of hours every other day and we only had time to implement one effect. But at least it looks pretty cool. We created it with a macro, WHEEL, which consists of thirty-six triangles, half one color and half another. WHEEL has an input that controls the frequency of color change. Whenver we need to change colors we just rotate the entire wheel by ten degrees. The macro also has inputs to determine the two colors for the wheel. Given more time we could've created a three- or four-color version, but we needed that sleep...

The Snowboard

The body of the snowboard is a cube scaled to be very long and thin. The ends are both squished spheres. We rotated the spheres up a bit and collected them with the cube to form a reasonable approximation of a snowboard.

Moving the Rider

At first we tried to create huge landscapes and move the monkey within them, the entire time following him with the camera. However, modelling gigantic moutains in details quickly became tedious and memory intensive, so we instead used and old cartoon trick. Rather than move the monkey around a large scene, we kept the monkey static and scrolled objects past him. We created a macro, Jump Ice, which creates a plane and scrolls large mounds of snow at a variable speed. We did the same thing for the scene in which the monkey falls and waves goodbye, designing a macro called CLOUDS which scrolls clouds rapidly across a blue background. The clouds themselves were formed by scaling collections of white ellipsoids to 0.01 in one direction, making them flat.

Rendering the Mountain

We actually did render a background for the opening scene (which took a day to do but then had to be cut out of the 5MB version of our movie!!!). The mountain we created consists of two planes and a large ellipsoid, combined with trees and rocks.

The Backgrounds

Most of the backgrounds are just texture maps of two pictures: one of the sky and one of a mountain. We transformed the sky picture into a huge hemisphere which we placed over most of the scenes. The mountain looked horrible when we warped it into a cylinder, so we just left it as a rectangle and place it behind the monkey most of the time.

Sines and Cosines are Great!

We used sines and cosines to model the movement of almost everything in our entire movie. For example, the monkey follows the absolute value of a dampened cosine curve to achieve his bouncing motion in the final scene. We experimented with all sorts of functions, but sines and cosines provided by far the smoothest, most natural-looking movement.

Things We Would've Added If We'd Had Time

Maybe in the Sequel...
  • Inverse Kinematics -- If we'd done the motion for the monkey with inverse kinematics, we could have added tons and tons of incredible tricks. Unfortunately, we didn't really have the time to solve hundreds of differential equations numerically.
  • More Psychadelic Effects -- We only had time to implement the spinning wheel effects. Given another week or so, we could've added tons more of cool stuff like bubbles or disco floors.
  • Half-Pipe -- A half-pipe scene woud've fit in beautifully to our movie, and would've been a great way to add lots more tricks!
  • Bump-mapping -- Bump mapping the snow to make it look more realistic would've been nice.
  • Clouds of snow -- The monkey's board should throw up huge clouds of dust, which we wanted to model with a particle system.
  • Lense Flare -- When the camera looks at the sun, we wanted to throw in some semi-opaque, colored polygons to simulate lense-flare.
  • Cool Intro -- The intro was supposed to be a fly-in over a massive mountain system generated much like our landscape in a previous project, with our names and the title fading in and out.