Computer Graphics

Um...what is it you do again?

I use computers to make images and animated movies, primarily for scientific visualization, and I write some of the software that other people use to do this. In the past, that included working on commercial software used by Hollywood, as well as teaching other people how to write this kind of software.

Since 2008, I've been an animator at the Scientific Visualization Studio at NASA Goddard.

Before that, I was a programmer on Newtek's LightWave 3D. I wrote the documentation and sample code for LightWave's Server Development Kit (SDK) and served as the third party point of contact for plug-in developers.

Being a middle-aged guy who remembers the earliest days of personal computing, I occasionally curate graphical artifacts from those days, particularly from the Commodore Amiga computer.

Here are a few things from my own early days in 3D.

Much of the material in the astronomy part of my site was also created in 3D software.

3D animation uses the computer as the drawing tool. Instead of drawing each frame by hand, the artist builds models of the actors and sets in the computer and tells the computer where he wants them to move. The models are built up from polygons (triangles or squares, for example) that are connected together at the edges to form a mesh.

The artist creates the appearance of each object by painting on it (image mapping), or by telling the computer how to draw it (procedural texturing). The E images in the figure are image maps. The wood grain is a procedural texture based on slicing concentric, somewhat irregular cylinders, a simple computer model of tree rings.

After modeling and texturing, lights and cameras are positioned among the models, just like on a real movie set, and the computer renders each frame one at a time. At larger production facilities, each step in this process is a specialty handled by a different group of artists.

Because good animators can make the final product look effortless on the screen, people sometimes get the mistaken impression that the computer does most of the work. The author of a biography of Judy Garland, for example, repeated this misconception in an article for TV Guide.

How could the cyclone...be reproduced on a soundstage? How could the winged monkeys and witches...be sent flying through the air? he asked rhetorically, expressing what MGM filmmakers must have been thinking in 1938 as they began production on The Wizard of Oz. Today, he added, a few keystrokes of a computer could conjure up those effects...

What the computer brings to animation is its ability to perform staggering amounts of arithmetic. Just a few seconds of completed film can easily require trillions of calculations.

But it's still the artists that must apply their understanding of geometry, kinematics, painting, lighting, cinematography, acting and storytelling. The computer makes none of their creative decisions for them, and no part of any good animation work is in any important sense automatic. There's no Flying Monkeys button on my computer, any more than there's a button for, say, magazine articles about Judy Garland.

During the time that I was mostly programming, even if I'd had a Flying Monkeys button, I'd be more involved in creating it than using it. For nine years beginning in 1993, I was one of the programmers that produced a commercial 3D animation system called LightWave, and I left most of the animating to the users of that program.

The inside of a CG programmer's brain—wait, maybe I shouldn't generalize. The inside of my brain looks something like the following.

   p = pol[ j ].v[ n ].index;
   for ( g = 0; g < pt[ p ].npols; g++ ) {
      h = pt[ p ].pol[ g ];
      if ( h == j ) continue;
      if ( pol[ j ].smoothgrp != pol[ h ].smoothgrp )
         continue;
      a = vecangle( pol[ j ].norm, pol[ h ].norm );
      if ( a > pol[ j ].surf->smooth ) continue;
      for ( k = 0; k < 3; k++ )
         pol[ j ].v[ n ].norm[ k ] += pol[ h ].norm[ k ];
   }
   normalize( pol[ j ].v[ n ].norm );

This happens to be a fragment of code, written in a programming language called C, that figures out which direction a surface is facing at each polygon vertex, a fundamental calculation in any 3D program.

The appeal of making a living by composing opaque incantations like this one probably isn't obvious. Enjoying the solving of logic puzzles is part of it, but a solved puzzle is ordinarily a lifeless thing. A working graphics program, on the other hand, not only bears witness to your small triumphs of reason, its output is something that can be appreciated aesthetically.

I've also taught other programmers how to do this sort of thing. LightWave allows programmers to add to its capabilities by writing extensions of the program called plug-in servers, or simply plug-ins. The package of materials that explains and demonstrates how to use the plug-in system is the Server Development Kit (SDK). I wrote the LightWave SDK and was NewTek's point of contact for programmers interested in using it.

I created almost 500 pages of online documentation and over 60,000 lines of example code for the LightWave SDK. You can see it here, although it won't make a lot of sense unless you happen to be a 3D graphics programmer with at least a little LightWave experience. I also responded to questions about the SDK on the LightWave plug-in mailing list. I posted to that forum over 800 times in 2001, in fact, as well as sending several hundred replies to private inquiries.

In 2002, I left NewTek to complete a bachelor's degree in programming with a communication minor, and six years after that I arrived at NASA, my first office job since before my children were born. I was a stay-at-home dad for over 15 years. But my position at NASA is a return to my 3D roots as a visualizer.

Scientific visualization differs from other kinds of graphics. It's driven by scientific data, and it carries the added responsibility of accurately conveying scientific concepts. All the programming I've done comes in handy, since in almost every case the data needs to be transformed into something that can be understood by commercial graphics software. And while I'm not a scientist, I need to be able to talk to scientists in their own language and then help communicate their work to the public.

I use Maya and RenderMan at work, but there are still occasions when I get to add LightWave to the mix, as I did with the Apollo 8 Command and Service Module in my Earthrise animation.

Valid HTML 4.01 Strict Valid CSS 2.1