11. Night Bus to Graphics Town
Toronto in the 1980’s was a very fertile venue for the burgeoning CG field. Not only did we have a major production company and two startups, but we also had two universities with strong graphics programs (University of Toronto and the University of Waterloo) as well as Sheridan College, with one of the best CG animation programs in North America.
And Sheridan used Neo-Visuals software in their animation program, which made it a natural place for us to hire artists.
The artists we hired helped flesh out the business. They produced marketing materials, did sales calls, wrote documentation (back then your software was expected to come with physical documentation — several binders worth), and did demos for prospective clients, as well as doing customer support.
I make it sound like we had an army of artists, but Neo-Visuals was always a lean operation. At the peak I think we had a dozen staff total.
One thing I learned early on was that I really enjoyed working with and being around artists. At MIT I was doing my graphics pretty much solo, but here I got to collaborate with the people who were the first users of my software. Ideas flowed freely and imaginations were put to use. It was exciting to show off some new feature I had developed and get feedback on it.
It was an exciting time as we flew by the seat of our pants. Developing a turn-key 3D animation system was new territory. There were maybe a half dozen companies around the world doing this in 1986.
And the technology was evolving rapidly, both software techniques (each Siggraph proceedings was a gold mine) and hardware platforms. At the company, we obtained computers such as a DEC MicroVAX, SGI 2400 and 3030 workstations, Sun machines, and even a Pixar Image Computer.
And each year seemed to bring about new hardware (Stellar, Ardent, Meiko, Connection Machine), established companies that wanted to get into 3D CG (Sun, Apollo, HP), and even new chips and architectures (Geometry Engine, Alpha, Sparc, MIPS, Transputer).
My first major undertaking was to rewrite the Neo-Visuals renderer. The quality of the images was the biggest differentiator between software packages, and the most powerful marketing tool. You had to have impressive images to show if you were going to be taken seriously.
I wrote a polygon scanline render with antialiasing, specular shading, depth attenuation (colored fog), texture and bump mapping, and cast shadows. In addition I implemented ray-tracing, though it was too computationally expensive to be of practical use on the CPU’s of the day.
I recall using the DEC code profiler to analyze my code, and ended up speeding the renderer by around 30 percent as a result.
My excitement at developing software was such that one night when I couldn’t sleep due to all the ideas bouncing around in my head, I took the bus to work at 1am, let myself into the office, fired up the computer, and sat down to program in the dark.
Design & Code
Once I started playing with my old Perlin noise code, I extended it to computing gradient values with an eye towards creating a vector field for particle systems I was experimenting with.
Then I thought of procedurally coloring the heightfields, and thought of a color noise field. I wrote “color-noise” to take a vector value and create a color from it. Once I saw the first test image, I decided to normalize the noise point values before converting them to colors, resulting in more uniform color intensities.
The final expression in the listing is what generated the image above.
This nicely demonstrates why I love developing in CL. The time between my having the ideas and writing (and testing and revising and testing again) the functions was minimal. This allows me to immerse myself in the code.