Portfolio of Programming Projects

Index:
Spore Creature 2D-fier
Procedural Texturing and Ambient Occlusion
Filter Chain System
Depth of Field Rendering
Edit Capture
Panoramic Screenshots
Word Clouds
Experimental Gameplay Project
Advanced Graphics course work


 
Spore Creature 2D-fier

An XML "recipe" for every Spore creature is stored on the Spore servers and is publicly accessible via the Spore API. The 2D-fier reads in this XML information and renders animated 2D creatures using Flash in a web browser.

2d creatures
In the figure above:
Top Left- 3D Spore creature
Bottom Left- Visualization of skin, limbs and part transforms
Top Right - 2D-fied creature!
Bottom Right - stylizing by swapping part palettes

                    
                     
The 2D creatures are articulated as ragdolls using hierarchy information available in the creature XML.
Here are some more 2D-fied creatures:
      

                                                                         back to the top
Procedural Texturing and Ambient Occlusion
Spore's "baking" technology


            

As a part of Spore's core engine team I helped deliver our procedural texturing and asset baking systems

Player Driven Texturing

Creatures have a particle based texturing system where players get to select combinations of effects such as stripes, dots etc. of various kinds. The system is sensitive to the morphology of the player's creature and applies three layers -base, coat and detail parameterized by player chosen colors. Buildings and vehicles have a region/swatch based paint-by-numbers scheme. For one-click painting both systems have preset themes.

Check out
our Siggraph sketch on Player Driven Texturing!


Ambient Occlusion
Spore's art director calls this the "special sauce" of our aesthetic. The ambient occlusion map is generated at run time, post processed and baked into the diffuse texture of the asset.

128 shadows are collected from lights distributed uniformly on a sphere.




For buidlings and vehicles we distribute more lights in the upper hemisphere:

          


Baking
A key component of Spore is it's asset sharing functionality where players' creations can be easily "pollinated" across the web. Baking refers to the process of converting a compressed XML representation of a Spore asset into a fully textured, animated and optimized game model without interrupting game play. This includes a mesh simplification step, single compressed texture page generation with automatically generated UVs and ambient occlusion.

Here's a series of screenshots showing a splattered texture for a building:

back to the top

Filter Chains
Real Time Image Processing

a) film noir                                       b) original                                        c) watercolor

Spore's Filter Chain system is a script-driven, real time, image processing toolset that is used to shape the final look of every frame rendered in the game. Here is a collection of fun effects generated with this system:

Andy Warhol Print for Spore Creatures (compress, threshold, colorize and tiled rendering)
                    

Film Noir filter (threshold and mix in noise grain)



Oil Paint filter (image space lighting with 3 lights, use "strokes" normal map to distort the scene)



Crayon Outlines
Thresholding, distorted edges using noise texture, and noise grain

                      

Paper Cut-out
effect
Adding uneven white outline (edge detect + noisy distortion texture) to oilpaint effect. Inverted color.

             

back to the top

Depth of Field

After many iterations and approaches, I was able to develop a depth of field system for Spore that performed well on a wide variety of graphics hardware. I render the scene twice but split it into two parts in each render by offsetting the near and far planes of the viewer. The "far" scene is rendered into a texture, processed for atmospherics and blurring and composited with the "near" scene. The plane at which the split occurs is dynamically tuned based on camera height on the planet.


back to the top

Edit Capture GIFs

I wrote all the off-screen capture systems for Spore such as screenshots, thumbnails, super high res renders etc. One of the coolest captures in Spore is the Edit Capture. Every time a player makes or edits something in Spore, a 36 frame GIF summarizing their creative choices is automatically generated. Below are some examples. Our fans loved this system and made creative uses of it like re-enacting Pong and Tetris!
                              
                                      

back to the top

Panoramic Screenshots

Another cool capture technology I added to Spore is a one button panorama capture tool. The panoramas can then be rendered in a Flash app I developed using Papervision 3D. Here's one such panorama:

Drag to rotate

      

back to the top

Word Clouds


This is a work in progress application that fits images and words pixel accurately into a word cloud. You can try the prototype here. Click to add words.
     

back to the top

Experimental Gameplay Project

I pitched this project at Carnegie Mellon University with Kyle Gabler and Kyle Gray.
The idea was to have 1 person per game making 1 game per week and build over 50 prototypes in a semester
.
BusinessWeek article   Gamasutra whitepaper   G4TV interview
My member page on the Experimental Gameplay website

IK Trees
This is probably the most beautiful thing I have made. It's a simple prototype where you grow a tree by winding each node around it's parent. Number of turns = number of branches that pop out. Built in 7 days in OpenGL/C++

Download IK Trees (exe)

On a Rainy Day

The IK trees prototype led to this game about building a tree of hands holding umbrellas that protects paper boats from the rain. This was one of the most popular games on the experimental gameplay website and is often referenced in articles and discussion about "art games". Built in 10 days in OpenGL/C++

Download On a Rainy Day (exe)
post-mortem (doc)                       

Cytoplasm
This is a simplified RTS game featuring extremely juicy multi agent control. Built in 7 days in OpenGL/C++
 
Download Cytoplasm (exe) post-mortem (doc)

Crowd
I built this game with Kyle Gabler at the Indie Game Jam 05. The theme was "people interacting". Built in 4 days in OpenGL/C++

Download Crowd (exe)                              

Springy Systems Editor
More of a fun little physics tool than a game
. Features spring loaded metaballs and springy characters dancing to music using beat detection. Built in 15 days in OpenGL/C++

back to the top

Advanced Graphics course work
class website

Real Time Graphics: Cg shaders
Experiments in illumination, materials and visual effects using programmable shaders. Made with OpenGL and Nvidia's Cg shader language.


Spherical Harmonic Lighting with specular term


Subdivision Surfaces Tool
A subdivision surfaces tool with multiple resolution control mesh editing and sharpness features at per vertex, edge and face level. I extended the tool to make a creature breeding game that propagated sharpness/curvature traits through the lineage.

 
                       
Download Evolution Trees (exe)
Download the subdivision tool (zip)

back to the top


For a full list of all my projects since 1999 click here