Portfolio of Programming Projects

Word Mess

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


Word Mess

Word Mess is my very first iphone/ipad game! It's developed mostly in C++/OpenGL and features pixel accurately fitting word clouds. It's been getting great reviews from parents and teachers and has also been picked as the #1 Education game under App Store Staff Favorites! Get It Here

Flo: fluid-sim demoscene entry

flo is a fluid-sim demo that I did for Pixar's annual demoscene competition. It won the grand prize! The idea was to do a fluid sim that looked beautiful and artistic. Check out this video of flo

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.

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 XML recipe can be interpreted in different ways to achieve various stylizations. A "coloring book" style is shown below. The 2D-fied creatures can also be painted using a procedural texturing system much like that in Spore. Examples are shown below.

This work was presented at SIGGRAPH 2009, "Spore API: Accessing a Unique Database of Player Creativity"

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

Spore 2D-Fier: Stylization

Spore 2D-Fier: Procedural Painting

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:


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
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

Experimental Gameplay Project

I pitched this project at Carnegie Mellon University with Kyle Gabler and Kyle Gray. See experimentalgameplay.com
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
The project was a great success and we continue making these games.

This game was made for the theme "Bare Minimum". In this game you only click once per level. Power has gone out in the city and you must restore it by clicking one key electric pole.

Download Blackout (exe)

Bunny Blaster
I think shooting games are fun because destruction is juicy. I feel that construction is also atleast equally juicy.
So what if something got made every time you shoot? I tried that out with this prototype. The theme was"unexperimental shooter"

Download Bunny Blaster (exe)

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)                       

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)

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