The Main Idea
Doing research in rendering algorithms usually means writing a lot of code to test out your ideas and make pictures. Over the years I found myself programming the same things over and over, in slightly different ways, as I experimented with different ideas.
I decided to create an architecture where everything that you might want to change was encapsulated in its own class. The overall rendering process was modeled on the physics, not programming expediency, so it was easy to try out wild new ideas (like participating media that bend the light passing through them, or objects that change shape based on the light striking them). The idea was to support research in real-time rendering, ray tracing, radiosity, and any combination of those techniques. Then my coding work could be limited to developing new objects that were directly involved in the ideas I was studying.
The result was Spectrum. Since this was the early 90’s, I wrote the system in the most popular language of the time: vanilla C. I did a ton of work to hide the limitations of C, and presented a memory-managed, object-oriented architecture to the user. I developed the system while at the Xerox Palo Alto Research Center (PARC), and in a very unusual move at the time, got approval to share my system freely and without restriction. I placed it on a public FTP server where it could be downloaded and freely modified by other researchers around the world.
On the left is a mostly ray-traced image produced by Spectrum. Note that we have all the usual nice distribution ray-tracing effects, like diffuse shadows and depth of field (I deliberately kept the number of rays low in this image to demonstrate the nature of the sampling algorithm I used).
Just for fun, I made the image on the right by replacing the camera shader’s geometry with a cylinder, giving us a version of an insect’s-eye view of the environment.
One of my favorite features was that the system offered built-in classes for many different multidimensional sampling and reconstruction techniques for arbitrary vector signals, and new algorithms could be easily added. Unfortunately, I’ve lost track of my copy of the source code, though I’m sure there are copies floating around out there somewhere between the 0’s and 1’s of cyberspace.
Glassner, Andrew S., “Spectrum: An Architecture for Image Synthesis, Research, Education, and Practice”, in course notes for “Developing Large-Scale Graphics Software Toolkits”, Siggraph 1994
Glassner, Andrew S., “Spectrum: A Proposed Image Synthesis Architecture”, in course notes for “Frontiers in Rendering”, Siggraph 1991