Elements was a piece of eye candy software I wrote way back when I was in university, in around 1995. The sole point of eye candy programs is to produce trippy imagery. Usually you’d watch them while listening to music. The imagery was often generated using simple mathematical formulae chosen to produce spirals and infinitely receding perspective effects.

Many of these kinds of programs used what was called colour cycling. Computer displays at the time were often palette-based, meaning that the pixel values contained in the image were only 8-bit values and, instead of containing actual colours, were just indexes into a look-up table, or palette. The palette could contain any colours you liked, but was of limited size. Colour-cycling exploited this by cycling the palette: shifting all the entries one place to the left or right in each animation step, with wrap-around.

In the case of Elements, I didn’t actually cycle the palette directly. Instead I would blit in a completely new palette in each frame, which I would cycle manually myself. This allowed me to blend between two different palettes, cycled in opposite directions — something that strict colour cycling didn’t allow. The palette was blended over time between successive palettes picked at random from a pre-defined set chosen for their pleasing colours. The blending between different palettes cycled in opposite directions helped to hide the use of colour cycling and resulted in new blended colours that weren’t in any of the predefined palettes. Usually, this was a good thing.

As well as colour-cycling, Elements also used a few more sophisticated tricks. While the palette was cycled and blended, the image on the screen blended slowly between successive pairs of key frames. A third key frame would be generated line-by-line in the background while blending between the current pair in the foreground, so that the next key frame was ready when the current blend was complete.

The equations that generated the key frames were structured carefully using a small number of well-defined parameters controlling the number of axes of symmetry, the spacing between concentric rings, and so on. The parameters of successive key frames were kept consistent (with only occasional random changes) to ensure that the structures of successive key frames were similar. This helped ensure that successive pairs of key frame images ‘fitted’ together. You can see the results in the video above.

Elements was quite well received in what were the early days of the web. I used to show it at parties where I mixed visuals with a mate, under the name Psynaptics. I also have fond memories of seeing Elements played at parties where I wasn’t doing the graphics, or walking into clubs to find it playing on a big screen above the dancefloor.

Posted by Ash

Coder and researcher in the games industry with a passion for meshes, computational geometry and 3D. Occasional photographer, web developer and bedroom DJ. Likes driving, coffee, mezcal, margaritas, swimming in the sea and cooking with fire.