Robert Kooima

Control Panel Boxes

Spring 2012

In pursuit of the highest quality controls for use in my visualization work, I’ve designed and build a pair of boxes using Ultimarc arcade controls, 8020 extruded aluminum, and laser-cut acrylic. Photos, CAD drawings, and laser-cutting templates are provided here.

MAME “Cabinet”

Spring 2012 work-in-progress

My ongoing MAME cabinet project is a departure from the norm. I want to preserve the form factor of the 1980s vertical arcade experience, but reinterpret it using lighter materials available today: LCD instead of CRT, 80/20 extruded aluminum and HDPE instead of MDF or plywood, LED instead of fluorescent lighting, and laser-cut acrylic instead of printed vinyl. I started by doing some CAD and previsualization. The current state of the real article is very slim, self-contained, and fully functional using an X-Arcade Tankstick. All graphics and lighting remain to be done, and I’ll upgrade to a hand-made control panel as the project proceeds.

2×2 Tiled Displays


In order to have on hand the barest minimum infrastructure necessary for research in cluster parallel rendering, I constructed a mobile 2×2 80/20 LCD mount with four 30′′ Apple Cinema displays. This simple structure has proven useful, and served as a 4K display simulator for my course CSC 4263 Video Game Design as well as Prof. Brygg Ullmer’s course CSC 4700 HCI Design & Technology. As of this writing, four copies of the 2×2 design have been produced at LSU, including the 5120×3200 array in 3 Johnston Hall (shown at left) and the 3840×2400 array in 167 Coates (at right).

Kennedy Space Center Panoramas

June 2009

In June of 2009 we were invited to Kennedy Space Center to view the launch of the Atlas V rocket carrying LRO and LCROSS to the moon. While awaiting the launch at the Saturn V Center, I captured a few high-resolution panoramas: the view from the VIP viewing stand including both Shuttle pads (and Shuttle Endeavour), the Atlas pad, and the VAB, a view of the Saturn S-II second stage, view of the Saturn S-IVB third stage, and finally a photo of the Saturn’s five F–1 engines.


May 2003—present

From 2001 to 2004 I worked 9-to–5 as a real-time visualization researcher at NASA Langley Research Center in Hampton, VA. In my free time during this period I developed a game similar to SEGA’s Super Monkey Ball. I ported it to Linux, Windows, and Mac OSX, and I released it as freeware under the terms of the GNU General Public License. Its popularity grew rapidly. It has had millions of users and is included on a number of Linux distribution installations. An international community of players, level designers, and Open Source developers formed around the game, meeting at the Nevercorner Forum. Work continues to this day, in open source fashion. Our project site tracks bug reports and hosts a public source code repository and wiki. The game has become a favorite platform for hackers working with motion sensing devices such as the Nintendo Wiimote, the Apple Motion Sensor, and others. Numerous videos may be found on YouTube.



Having developed Neverball’s ball physics simulator and OpenGL renderer, I set about creating a second game using these resources. The result is the miniature golf game Neverputt, for 1-to–4 players. Neverputt is distributed as a part of the Neverball source. Work on Neverputt continues alongside work done on Neverball. Players, level designers, and developers meet at the Nevercorner Forum.

Helvetica vs. Arial

December 2009

Many people feel deeply about the use of Helvetica and Arial. The prevailing opinion is that Helvetica is a thing of beauty while Arial is an affront to the eye. These opinions may be rooted more in the history of these two fonts than in their design, and the scorn may be more toward Microsoft than toward the angled terminals. Discounting range, the differences are slim. To make these differences clear, I’ve overlaid Helvetica in magenta with Arial in cyan, and shown their intersection in black. Here is a 152K PDF of the ASCII repertoire.

The Contents of the Universe

October 2009

Here’s a little infoviz showing the relative proportion of the contents of the universe. At a glance, it gives an impression of the relative rarity of normal matter in a universe full of not-yet-understood matter and energy, and the extreme rarity of the heavy elements that comprise our planet and ourselves. This image was algorithmically generated by a Haskell program which output SVG to be loaded into Adobe Illustrator for titling. Here’s a PDF.

Color themes

Here are a few custom syntax color themes that I find useful.

“Working” (for TextMate or Sublime Text) is a light-on-dark theme resembling Zenburn but without any overly-saturated colors. I use this theme heavily.

“Aperture” (for XCode 4 or for TextMate or Sublime Text) is unique in that it is defined entirely in terms of a single hue, amber at 45°. Syntax categories are distinguished by brightness, with keywords set in bold, program text in regular, and comments in italic (if available). This theme is reminiscent of a VT420 MicroVAX console I used many years ago, but it’ll probably remind most of the displays found at Aperture Laboratories.

GPU Day-Night Illumination Tutorial

Spring 2006

My final project for UIC’s GPU Programming course provides a tutorial on day-night surface illumination using GLSL. It displays four dynamic light sources (two positional and two directional) illuminating a navigable animated scene with full shadow mapping. This application has been ported to the Personal Varrier virtual reality system.

GPGPU Knot Simulation

Spring 2006

My third project for UIC’s GPU Programming course crossed over with Lou Kauffman’s course on Knot Theory, which I attended concurrently. The project implements a constrained particle dynamics system using GLSL pixel shaders. It simulates an electrically charged loop of ribbon. This was motivated by an ongoing collaboration between Kauffman and EVL co-founder Dan Sandin. They simulated knots in an effort to support the hypothesis that electrostatic repulsion would necessarily untie any non-knot loop. This GPU-based simulation allowed them to scale up their data set size by two orders of magnitude. The ribbon representation also enabled investigation of an apparent property of conservation of twist and coil in physical knots. This application has been ported to the Personal Varrier virtual reality system.

GPU Water Simulation

Spring 2006

My second project for UIC’s GPU Programming course combines CPU-based physics, GPU-based physics, and real-time GPU rendering. An ODE rigid body dynamics system simulates junk littered about an abandoned quarry. Physical objects interacting with the surface of the water drive a Verlet integration of the water’s surface, implemented using GLSL pixel shading. GLSL shaders render the scene with per-pixel illumination and shadow mapping. The water surface is rendered with correct Fresnel mixing of reflected and refracted geometry, drawn to off-screen framebuffer objects. Submerged surfaces are rendered with approximated caustics and volumetric fog.

3D Game with a Guy Flying a Pedal Plane

Fall 2004

In the fall of 2004 I started the Ph.D. program at UIC. My first class was Jason Leigh’s CS426 Intro to Video Game Programming. The focus of this class was the development of a complete video game by a two-person team. The fall 2004 class was required to develop a 3D game to be run on EVL’s GeoWall stereoscopic 3D display. We implemented a game similar to Nintendo’s Pilot Wings. The jury voted it the winner. The semester’s platform was BlitzBasic, and my dissatisfaction with BlitzBasic was the impetus for the creation of Electro. Since then, Nintendo has developed their own stereoscopic Pilot Wings and I’ve gone on to lead the game design course at LSU.

Nibble Magazine Two-Liner

September 1990

As a teen-age Apple II programmer, I was a huge fan of Nibble Magazine. Every issue contained deep technical knowledge and working code. Toward the back they’d print cleverly-tiny reader-submitted AppleSoft BASIC programs, and in September 1990, they printed my very first published code: BLOX, a program that assembles a Nibble logo out of sliding squares. Source. Screenshot. As printed, there’s a bug in it!