This week I finished writing my thesis Procedural Generation of Content in Video Games. In it, I take a look at some examples of games applying Procedural Content Generation (PCG), as well as some recent research in the field. I also present a concept and discuss a proof-of-concept implementation of a modular system to procedurally generate content.
The code and a demo project can be found on github. You can read the abstract and summary here or take a closer look for yourself. I included a copy of the thesis in the repository.
In the context of video games Procedrual Content Generation (PCG) has shown interesting, useful and impressive capabilities to aid developers and designers bring their vision to life. In this thesis I will take a look at some examples of video games and how they made used of PCG . I also discuss how PCG can be defined and what misconceptions there might be. After this I will introduce a concept for a modular PCG workflow. The concept will be implemented as a Unity plugin called Velvet. This plugin will then be used to create a set of example applications showing what the system is capable of.
The basic idea for Velvet has been heavily inspired by an article by Dejobaan Games on gamasutra. It describes the concepts and systems they used to generate content within their series of AaaaaAAaaaAAAaaAAAAaAAAAA!!! base jumping games.
I guess you could best compare the concept to Unix pipelines. You create modules with specific responsibilities. Each module then accepts data and returns data in the same way. This allows modules to be arranged in a sequential order. This is called a chain in Velvet. The special thing here is, that a chain is also considered to be a module, which allows for a tree-like structure of modules. This idea is based on the composite design pattern.
For the prototype I made use of Unitys scene graph. A chain is basically represented by a game object and the modules would be the components associated with this object. You can then nest game objects creating your recipe for what ever content you want to generate. The type of data processed by modules can be any type (generically typed). Although the examples only use a list of game objects as the basic type of data processed by modules.
I would love to hear your thoughts. If you want to get in touch and talk about PCG, consider following me on twitter @blurryroots or sent me an e-mail!
You might also be interested in these posts: