Procedural Project

1 / 7
2 / 7
Two cities surrounded by coral, with both cities using a different tunnel layout and buildings.
3 / 7
Example of procedurally generated buildings and tunnel network for the city.
4 / 7
The size of the diorama; without the fog enabled it looks quite bare; this is one of the future improvements.
5 / 7
Scene for the building generator; Sub-system testing was a major factor in development.
6 / 7
Another sub-system testing example: this was the scene for testing the generator of coral clusters.
7 / 7
Another sub-system testing example: the tunnel network for the settlements. They were specifically designed so they can attach to each other and enable merging.

This project was completed for a module at university. The objective was to create a procedurally generated diorama with it needing to fit a specific theme: 'The Beneath'. The diorama was developed using the Unity engine, and programmed using C#. A lot of effort and time went into this project to achieve different types of procedural generation such as terrain, buildings and implementing two L-Systems (Lindenmayer system), which essentially is used to generate procedural content based on a ruleset, for the settlement network and coral generation. Along with the diorama, another task was to create a report which included a diary, which included the developments each week, and the considerations and reasoning why the chosen designs were implemented, testing, like sub-system testing, evaluating algorithms and a short critique and reflection of the project.

The project focuses on an underwater diorama with cities and flora. The terrain is generated using 'Perlin Noise' and 'Multi-Fractal Noise' algorithms provided by LibNoise Unity, with the colouring of the terrain based of the height of every vertex on the terrain. Cities were achieved by having a complete procedural approach; the tunnel network uses an L-System which covers the entire terrain with the cities selecting points along the L-System to begin generation, and the buildings are generated based on a specific rule set, making it look different to the flora generation. The building generation also has a specific ruleset, to make sure they are properly generated. Finally, the flora system was also achieved by using another L-System using the 'Dragon Curve' ruleset. For placing all of these generated objects, the diorama had an underlying grid; named 'The Utilization Map'. This map split the world up into cells, with any instantiated objects coverting the selected cell to avoid objects being placed in the same locations.

In the future, I plan to add life and some lighting into the diorama, by adding it to the cities, some fish life, and maybe a rare chance of submarines which follow splines, post processing effects to add more of an 'underwater' feeling, as well as improving the buildings to add more variety and fix any visible geometry issues.

Developed Skills

  • Terrain Generation and Noise maps, using LibNoise.
  • General Unity Knowledge related to procedural content.
  • Techniques to optimize PCG alogithms, such as removing the need to use Raycasts.
  • Generating content with a Lindenmayer System which specific rulesets.