A brief history of procedural media

Procedural media has been a part of computer games since the very beginning. The early days of computer games were a time of great ingenuity and in order to squeeze large amounts of level data into tiny memory footprints[21] the pioneers of the demoscene exploited generative fractal geometry, reducing seemingly endless landscapes and mazes into a handful of equations written in skillfully optimised C code[12]. This can produce seemingly infinite universes [20]. One team of pioneers, Bell and Braben produced Elite [2] employing procedural universe generation for a space game. Early examples can be seen on Robert James site [16]. Landscape generation an interesting subject. When I built levels for the Unreal game back in the 1990s it quickly became apparent that random meshes, even when filtered nicely were not at all natural for terrain, so generative methods using predictable and properly contained functions became part of the toolkit to create meshes for UnrealEd, using its Java like UScript capabilities for geometry builders. Today no games world editor would be complete without a natural terrain generator that can produce fantastic but believable natural landscapes modelling erosion and displacement by rivers and glaciers, and applying constraints to ensure that passable routes always exist between specified points[29]. See the Gamasutra article by O'Neil[22] for a practical summary. Plants[9] and even animals[33] have long had procedural generators, one well known algorithm is L-system branching for creating trees. Textures such as fire, water and brickwork are also produced procedurally.

The problem for procedural sound is that while fractal methods lead to meaningful geometry in 3D space they don't necessarily map onto meaningful sound, which is either a very high dimensional space, or the same folded into a 1 dimensional time function depending on how you look at it. Therefore there aren't number sets which just happen to contain the sound of a car engine or blackbird song, or if there are we currently have no way of searching the space of generated sets to find them. Producing sound requires more traditional mathematical approaches based on wave equations, calculus, linear algebra and operator theory, it is essentially the mathematics of old school engineering and physics.

It's important to point out another difference between procedural audio and synthetic audio, which is that synthetic audio is not necessarily compact. A method such as additive synthesis requires a huge number of parameters to approximate a sound, in the limiting case it requires exactly the same amount of data as if the sound were sampled, so that the data has simply been moved from the time domain to the frequency domain. That doesn't mean that efficient and compact representations don't exist, simply that they are more difficult to obtain. Procedural synthetic sound attempts a high degree of efficiency. It attempts to reduce the large amounts of data into a few rules. It can do this using similar techniques to fractal geometry, or by using cellular autonoma such as the Chaosynth built by Eduardo Miranda. It can also achieve efficiency by simplification, employing heuristic physical approximations that hit on just the important psychoacoustic cues as in my own work with simplified synthetic sound effects. But in all cases it relies on a careful partition between the synthesis model and the synthesis method. The former is the mapping that makes sense of the parametric data derived from input, and the latter is the DSP system which produces the waveform data. As a 3D graphics analogy, one is the matrix that represents a mesh and the other is is the rendering program that turns this into a meaningful image for the human visual senses.

Andy Farnell
http://obiwannabe.co.uk/