What I Did During My Summer Vacation

Between June and August 1996 I held an internship position at Silicon Graphics, Inc., a high-end computer graphics workstation manufacturer. I worked in the Cosmo group, helping to develop the PC version of Cosmo Player, SGI's VRML 2.0 browser.

The work I did can be categorized into three major projects:

Of course, I also found some time to get out of the office...

doomToVrml2: Doom to VRML 2.0 Converter

doomToVrml2 (available from SGI's VRML website) is a ground-up rewrite of WadToIv, my Doom to Open Inventor converter. This was a warm-up project so I could learn about VRML 2.0 while providing a (hopefully) useful tool to the VRML community.

There were several goals in the design of doomToVrml2, not the least of which was to eliminate WadToIv's dependency on Open Inventor. In addition, as VRML 2.0 allows complex behaviors to be defined in the scene graph, we wanted doors to open and close as they do in the real game. Finally, we wanted the output to match the game's graphics as closely as possible, to allow people to design environments using Doom editors and then, expecting a very close correspondence, convert them to a Web-savvy 3D graphics format using doomToVrml2.

doomToVrml2 runs on the PC and SGI platforms today, and porting it to other platforms should be as straightforward as a recompile. It implements moving doors in the output world; click on a door and it rises up for a few seconds, then slides down to its initial position. Finally, unlike WadToIv, it uses the BSP tree information contained within the Doom levels. This ensures that complex floor shapes are rendered correctly in the output world.


My first "real" project was to implement the MovieTexture node in the PC player. The MovieTexture node allows a video-only MPEG-1 movie to be used as an animated texture map on some piece or pieces of geometry in the scene; in addition, it allows an MPEG-1 Systems stream (both video and audio) to be used as an audio source in the world.

One of the major obstacles along the path to implementation was that I could not find a freeware MPEG library which supported decompression of both video-only and systems streams. The closest thing I found was a set of three unrelated programs: an MPEG-Systems demultiplexer (to extract separate audio and video streams from a single MPEG) and two decompression utilities for supporting audio and video MPEG streams separately. Ultimately I reworked this software into a thread-safe MPEG decompression library, meaning that multiple MPEGs could be decompressed simultaneously in the background while the VRML browser maintained interactivity with the user.

In order to implement the MovieTexture node, I had to reorganize the Texture hierarchy (ImageTexture, MovieTexture, and PixelTexture), because previously ImageTexture had been the only implemented node of the three. One indication of whether this redesign was successful was the fact that it took one of the other engineers about three hours to implement the final texture node, PixelTexture, given the new class hierarchy.

VRML External Interface

The External Interface for VRML is designed to allow an external Java program (for example, an applet) to control the VRML browser. There are several reasons why this functionality is useful:

I assisted in the early design and implementation of the External Interface while at SGI. This included:

The latter modifications touched some of the lowest-level code in Cosmo Player, the notification mechanism. I worked several bugs out of my code, and hope there weren't too many left for the rest of the engineers to deal with...

The External Interface was undoubtedly the most challenging project I worked on while at SGI (even given my prior experience with a similar problem). My only regret about my internship experience was the fact that the Cosmo Player implementation of the External Interface was not stable when I left. I am still not convinced that all of the problems we saw were ours; I suspect there are at least a few bugs in Netscape's Java implementation relating to native methods making method calls back into Java.

What I Did During My Free Time

Most weekends I went running either at the beach or at Shoreline, a wildlife preserve at the northern edge of Mountain View. Shoreline was nice because it was so flat; there were no hills to tire you out, so you could just keep going and going. I also ran on the beaches at San Gregorio, Santa Cruz, Monterey, Sand City, and Santa Barbara. Sand City's beach was the best for taking a long run (the stretch I found was at least 6.5 miles long); Santa Barbara's was the best for a beautiful view and climate.

Hanging out with Alex Sherstinsky in San Francisco

Alex, sporting the Vismod t-shirt

Yours truly, at Muir Beach

Hamming it up at the Golden Gate Bridge

Road Trip to Santa Barbara

I took Highway 1 down to Santa Barbara. It was pretty foggy for most of the morning, which provided some impressive views of the surrounding landscape
The nice thing about California's weather, though, is that the fog almost always burns off by about lunchtime, leading to sudden transformations in the weather

A nice little cottage in San Simeon

Pencigraphic composite of the Santa Barbara coastline (work in progress)

Hearst Castle, San Simeon

Pencigraphic composite of the mantel in the "social room" in the main house (done with the help of Steve Mann)

One of the guest houses

The main house, viewed from the garden

The temple front framing the outdoor pool

The sculptures at the other side

The indoor pool and its extravagant decoration

An archway to the side
(Visitor number )
Kenneth B. Russell - kbrussel@media.mit.edu

$Id: index.html,v 1.6 1998/12/15 06:17:44 kbrussel Exp $