Procedural generation

Procedural generation

Procedural generation is a widely used term in the production of media, indicating the possibility to create content on the fly rather than prior to distribution. This is often related to computer graphics applications and video game level design.


The term "procedural" refers to the process that computes a particular function. Fractals, an example of procedural generation, dramatically expresses this concept, around which a whole body of mathematics—fractal geometry—has evolved. Commonplace procedural content includes textures and meshes. Sound is often procedurally generated as well and has applications in both speech synthesis as well as music. It has been used to create compositions in various genres of electronic music by artists such as Brian Eno who popularized the term "generative music".

While software developers have applied procedural generation techniques for years, few products have employed this approach extensively. An exception is Will Wright's "Spore", a recently released video game entirely populated with procedurally generated content. Procedurally generated elements have also appeared in earlier video games: the first "" randomly generates terrain and NPCs, creating a world roughly the actual size of the British Isles. "Soldier of Fortune" from Raven Software uses simple routines to detail enemy models. It could also be said that the lighting in "Doom 3" from id Software is procedurally generated because it does not rely on lightmaps precomputed with a radiosity process. More recently Avalanche Studios employed procedural generation to create a large and varied group of tropical islands in great detail for "Just Cause".

The modern demoscene uses procedural generation to package a great deal of audiovisual content into relatively small programs. Farbrausch is a team famous for such achievements, although many similar techniques were already implemented by The Black Lotus in the 1990s.

Contemporary application

Procedurally generated content such as textures and landscapes may exhibit variation, but the generation of a particular item or landscape must be identical from frame to frame. Accordingly, the functions used must be referentially transparent, always returning the same result for the same point, so that they may be called in any order and their results freely cached as necessary. This is similar to lazy evaluation in functional programming languages.

Video games

The earliest computer games were severely limited by memory constraints. This forced content like maps to be generated algorithmically on the fly: there simply wasn't enough space to store a large amount of pre-made levels and artwork. Pseudorandom number generators were often used with predefined seed values in order to create very large game worlds that appeared premade. For example, "The Sentinel" supposedly had 10,000 different levels stored in only 48 or 64 kilobytes. An extreme case was "Elite", which was originally planned to contain a total of 248 (approximately 282 trillion) galaxies with 256 solar systems each. The publisher, however, was afraid that such a gigantic universe would cause disbelief in players, and eight of these galaxies were chosen for the final version.cite news | url=,3605,1064107,00.html | title=Masters of their universe | publisher=Guardian | author=Francis Spufford | date=October 18, 2003] Other notable early examples include the 1985 game Rescue on Fractalus that used fractal technology to procedurally create in real time the craggy mountains of an alien planet and River Raid, the 1982 Activision game that used a pseudorandom number sequence generated by a linear feedback shift register in order to generate a scrolling maze of obstacles.

Today, most games include thousands of times as much data in terms of memory as algorithmic mechanics. For example, all of the buildings in the large game worlds of the "Grand Theft Auto" games have been individually designed and placed by artists. In a typical modern video game, game content such as textures and character and environment models are created by artists beforehand, then rendered in the game engine. As the technical capabilities of computers and video game consoles increases, the amount of work required by artists also greatly increases. First, high-end gaming PCs and current-generation game consoles like the Xbox 360 and PlayStation 3 are capable of rendering scenes containing many very detailed objects with high-resolution textures in high-definition. This means that artists must invest a great deal more time in creating a single character, vehicle, building, or texture, since gamers will tend to expect ever-increasingly detailed environments.

Furthermore, the number of unique objects displayed in a video game is increasing. In addition to highly detailed models, players expect a variety of models that appear substantially different from one another. In older games, a single character or object model might have been used over and over again throughout a game. With the increased visual fidelity of modern games, however, it is very jarring (and threatens the suspension of disbelief) to see many copies of a single object, while the real world contains far more variety. Again, artists would be required to complete exponentially more work in order to create many different varieties of a particular object. The need to hire larger art staffs is one of the reasons for the rapid increase in game development costs. Some initial approaches to procedural synthesis attempted to solve these problems by shifting the burden of content generation from the artists to programmers who can create code which automatically generates different meshes according to input parameters. Although sometimes this still happens, what has been recognized is that applying a purely procedural model is often hard at best, requiring huge amounts of time to evolve into a functional, usable and realistic-looking method. Instead of writing a procedure that completely builds content procedurally, it has been proven to be much cheaper and more effective to rely on artist created content for some details. For example, SpeedTree is middleware used to generate a large variety of trees procedurally, yet its leaf textures can be fetched from regular files, often representing digitally acquired real foliage. Other effective methods to generate hybrid content are to procedurally merge different pre-made assets or to procedurally apply some distortions to them.

Supposing, however, a single algorithm can be envisioned to generate a realistic-looking tree, the algorithm could be called to generate random trees, thus filling a whole forest at runtime, instead of storing all the vertices required by the various models. This would save storage media space and reduce the burden on artists, while providing a richer experience. The same method would require far more processing power (though somewhat less disk access), but with CPUs getting faster, the problem is gradually becoming smaller. However it is not easy to develop such an algorithm for a single tree, let alone for a variety of species (compare Sumac, Birch, Maple and its species), moreover assembling a forest could not be done by just assembling trees because in the real world this introduces interactions between the various trees which dramatically change their appearance (although this is probably a minor detail).

In 2004, a PC first-person shooter called ".kkrieger" was released that made heavy use of procedural synthesis: while quite short and very simple, the advanced video effects were packed into just 96 Kilobytes. In contrast, many modern games are released across several CDs, often exceeding 2 gigabytes in size, more than 20,000 times larger. Naked Sky's "RoboBlitz" utilized procedural generation to maximize content in a less than 50MB downloadable file for Xbox Live Arcade. Will Wright's "Spore" also makes use of procedural synthesis.


As in video games, procedural generation is often used in film to rapidly create visually interesting and accurate spaces. This comes in a wide variety of applications.

One application is known as an "imperfect factory," where artists can rapidly generate a large number of similar objects. This accounts for the fact that, in real life, no two objects are ever exactly alike. For instance, an artist could model a product for a grocery store shelf, and then create an imperfect factory that would generate a large number of similar objects to populate the shelf.

Noise is extremely important to procedural workflow in film, the most prolific of which is Perlin noise. Noise refers to an algorithm that generates a patterned sequence of pseudorandom numbers.

Cellular automata methods of procedural generation

Simple programs which generate complex output are a typical method of procedural generation. Typically, one starts with some simple initial conditions like an array of numbers. Then one applies simple rules to the array, which determine the next step in the evolution of the output - that is, the next array of numbers. The rules can be fixed, or they can be changing in time. One can let the program run, and given the right update rules and initial conditions, one can obtain a non-repeating evolution starting from an initial array.

Cellular automata are discrete computer models of evolutionary behavior which start from an array of differently-colored cells, then apply update rules to determine the colors of the next array of cells. Typically one starts with a two-color program, and a random finite array of black and white cells. Then one defines a neighborhood --- for the simplest case, just the two neighboring cells of any one cell ---- and creates a so-called "update rule" to determine what the next cell in the evolution will be. Typical elementary update rules are of the form, "If the current cell is black and the cells to the right and left are white, then the next cell in the evolution shall be white."

It is an astonishing fact that such simple rules, even in the simplest case of two colors, can produce a complex evolution. But, in fact, they can (see Rule 30 and Rule 110).

What does this mean for game developers? It means that, starting with finite initial conditions and extremely simple rules, one can generate complex behavior. That is, content can be nearly spontaneously generated from virtually nothing, which is the idea behind procedural generation. Evolving cellular automata is one way of generating a large amount of content from a small amount of input.

oftware using procedural generation

* MaPZone/ProFX – a middleware product designed to create and generate procedural textures in games (used in RoboBlitz).
* "Houdini" - a procedural 3D animation package. A free version of the software is available.
* Filter Forge – an Adobe Photoshop plugin for designing procedural textures using node-based editing.
* Art of Illusion – an open source and free 3D modeler, has an internal node-based procedural texture editor.
* SpeedTree – a middleware product for procedurally generating trees.
* Terragen – landscape generation software. Terragen 2 permits procedural generation of an entire world.

Procedural worlds and universes for space simulations

* "Elite" (1984) - Everything about the universe, planet positions, names, politics and general descriptions, is generated procedurally; Ian Bell has released the algorithms in C as text elite [ [ Ian Bell's Text Elite Page ] ]
* "StarFlight" (1986)Fact|date=April 2008
* "Exile" (1988) - Game levels were created in a pseudorandom fashion, as areas important to gameplay were generated.Fact|date=April 2008
* "" (1993) - Much as the game Elite had a procedural universe, so did its sequel.Fact|date=April 2008
* "" (1995)
* "Noctis" (2002)Fact|date=April 2008
* "" (Not yet released)

Procedural levels

Arcade games

* "The Sentinel" (1986) - Used procedural generation to create 10,000 unique levels.
* "Darwinia" (2005) - Has procedural landscapes that allowed for greatly reduced game development time.Fact|date=April 2008

Role-playing games

* "" (1996)
* "Diablo" (1998) and "Diablo II" (2000) both use procedural generation for level design. Fact|date=April 2008
* "" procedurally generates the game's world.
* "Dark Cloud" and "Dark Cloud 2" both generate game levels procedurally.
* "" (2007)
* Nearly all roguelikes use this technique.

trategy games

*"Seven Kingdoms" (1997) - Uses procedural generation for levels.

Procedural third-person shooters

* "Just Cause" (2006) - Game area is over convert|250000|acre|km2, created procedurally Fact|date=September 2007
* "RoboBlitz" (2006) for XBox360 live arcade and PC (Textures generated on the fly via ProFX)

Almost entirely procedural games

* ".kkrieger" (2004)

Games with miscellaneous procedural effects

* "Jade Cocoon" (1998) - The merged minions were procedurally generated based on body part sizes.Fact|date=April 2008
* "Spore" (2008)
* "" (2002) - Water effects are generated on the fly with procedural animation by the technique demonstrated in NVIDIA's "Water Interaction" demo. cite web|url= | title=NVIDIA Water Interaction Demo | publisher=NVIDIA |accessdate=2007-10-08 |year=2003]
* "ToeJam & Earl" (1991) - The random levels were procedurally generated.


ee also

*Procedural modeling
*Procedural texture
*Procedural animation
*Fractal landscape
*Cellular automata
*Perlin noise
*Random dungeon
*Generative Modelling Language
*Iterated function system
*Generative art

External links

* [ The Future Of Content] - Will Wright keynote on Spore & procedural generation at the Game Developers Conference 2005. (Scroll down 3/4 of page, registration required to view video).
* [ Generating Procedural Clouds in real time on 3D HW]
* [ Darwinia] - [ development diary] procedural generation of terrains and trees.
* [ Filter Forge tutorial at The Photoshop Roadmap]
* [ Procedural Graphics - an introduction by in4k]
* [ Texturing & Modeling:A Procedural Approach 3e 2002]
* [ Ken Perlin's Discussion of Perlin Noise]
* Eric W. Weisstein, " [ Elementary Cellular Automaton] " at []

Wikimedia Foundation. 2010.

Look at other dictionaries:

  • Procedural programming — can sometimes be used as a synonym for imperative programming (specifying the steps the program must take to reach the desired state), but can also refer (as in this article) to a programming paradigm based upon the concept of the procedure call …   Wikipedia

  • Procedural — Procedural, as an adjective, refers to the concept of procedure. It may also refer to: *Procedural programming, a computer programming concept *Procedural generation, a term often used in connection with computer graphics applications to indicate …   Wikipedia

  • Procedural animation — A procedural animation is a type of computer animation, used to automatically generate animation in real time to allow for a more diverse series of actions than could otherwise be created using predefined animations.Procedural animation is used… …   Wikipedia

  • Procedural texture — A procedural texture is a computer generated image created using an algorithm intended to create a realistic representation of natural elements such as wood, marble, granite, metal, stone, and others.Usually, the natural look of the rendered… …   Wikipedia

  • Generation effect — The generation effect refers to the robust finding that information will be better remembered if it is generated rather than simply read.cite journal |last=Jacoby |first=L. L. |year=1978 |title=On interpreting the effects of repetition: Solving a …   Wikipedia

  • Random number generation — A random number generator (often abbreviated as RNG) is a computational or physical device designed to generate a sequence of numbers or symbols that lack any pattern, i.e. appear random. Computer based systems for random number generation are… …   Wikipedia

  • Fourth-generation programming language — A fourth generation programming language (1970s 1990) (abbreviated 4GL) is a programming language or programming environment designed with a specific purpose in mind, such as the development of commercial business software.[1] In the history of… …   Wikipedia

  • Langage de quatrième génération — L4G Un L4G ou langage de quatrième génération est un langage de programmation ayant un haut niveau d abstraction. Ils sont généralement utilisés pour les applications de gestion. Un L4G doit offrir : un langage déclaratif de manipulation de… …   Wikipédia en Français

  • Binary Pattern (Image generation) — Binary pattern is an image produced by a formula that includes binary operations and results in a 32bit integer number. These patterns are closely tied to the 32bit RGB color system. These patterns may be used with any integer numbers.The most… …   Wikipedia

  • Development of Spore — Spore is a video game developed by Maxis and designed by Will Wright, released in September 2008. The game has drawn wide attention for its ability to simulate the development of a species on a galactic scope, using its innovation of user guided… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”