Whatif Productions' rendering engine for the US Navy training game GeoCommander Master Training Station (GMTS) had the ability to quickly switch between different rendering styles. These were promoted as a visual aid to help find various targets in the game.
Shown above are the three main visual modes in the game: Normal, Thermal, and Radar. In early 2007 I worked with the lead programmer to develop a system that used 1D, 2D, and 3D bitmaps to colorize the game assets for each mode. These special bitmaps were sampled at the end of the rendering process to alter the output of the framebuffer.
download (8MB WMV file)
For the "Normal" photo-realistic mode we used a colorcube volume texture that I created in 3ds Max by animating a slice modifier through a vertex-colored mesh. The 3D texture had to be delivered as a series of 2D slices, each with its own mipmap chain, so I worked out a batch process to scale and name the files in the needed format.
For the Thermal and Radar modes we used 1D bitmaps, which were combined with specific color channels of custom bitmaps assigned to each asset. When the player switched to one of these modes the renderer would switch all the assets to their custom shaders, limit them to only display a specific color channel, then alter the output of the framebuffer by sampling the 1D colorizing bitmap.
Below is an example of one of the custom color-channel bitmaps. I created a process to make these by extracting and combining various layers from the diffuse PSD files.
The 3D colorcube provided a great way to finely-tune the quality of the final rendered image. Here are some comparisons of the raw framebuffer vs. the color-corrected result.
We had a list of other rendering modes available to the player as well. These we could be more fanciful with, have some fun and show what the engine could do. There were no tools for creating these rendering styles, so I worked with the lead programmer to understand the different math operations we had available.
I took screenshots of the various layers like wireframe, reflection only, world-space normals, etc. and combined these in Photoshop to create composites, using the engine's math rules (multiply, add, invert, etc.). I wrote out some rendering pseudo-code for each effect and worked with a junior programmer to get them working in the game.
As often happens with rushed development, some of the key math operations I had hoped to use weren't actually usable when we got down into the actual code, so some of the rendering styles didn't turn out as sexy as I had planned. But we strived to get the most out of what we had.




