| Context | Personal project exploring terrain generation |
| Role | Game programmer |
| Team size | 1 |
| Tools | Unity Engine – Git |
| Duration | 03/2026 – 04/2026 |
Download and read the paper I wrote for this project: [RnD_procedural_biome_system]
View the source code on GitHub: [https://github.com/SamLeguijt/procedural-biome-system ]
Project Overview
In this project, I explore procedural terrain generation using Fractal Perlin noise in combination with different biome configurations. The goal is to generate a coherent terrain mesh where multiple biomes are found, each with their own specific terrain characteristics that smoothly blend into other areas.
Because PCG technqiues were new to me, making the system flexible enough so I can experiment with different algorithms and techniques was a key focus for me. While not entirely in a asset-publishable state, the current system allows for extensibility with different algorithms and adding additional biomes without making changes, by seperating the generation process into a world layout and it’s terrain. This way, future iterations may explore different PCG techniques and algorithmes besides the currently explored fractal Perlin noise.
The associated paper demonstrates the workings of the system and the pipeline steps followed to get the desired results.
Vision & Scope
Originally, the vision for this project was to create a system to procedurally generate worlds. This not only incluyded terrain generation, but also biome-specific placement of flora, landmarks and creatures. Each biome would be configurable, from it’s terrain identity to placement rules for objects, flora assets and specific combat zones where creatures would be encountered.
The intended system would integrate the following:
- Biome distribution based on environmental rules
- Terrain generation based on biome configurations
- Procedurally place gameplay and other objects (landmarks, creatures, flora)
- Ensure naviagatability between biomes
In its current state, the implemented scope focuses on the first two layers: biome distribution and terrain generation. While biome blending is functional, object placement and navigatability have not been worked on yet.
Systems & Implementation
A world is generated by first generating a layout. The layout is generated by combining a set of noise maps. In the current system, temperature, elevation, humidity and erosion maps are used to generate these maps. Biomes are assigned based on BiomeRules, deciding how prominent a biome is based on the values in these individual maps.
Having a map of biome influences in each point, the height of each point is generated by using the biome influences to determine the final height of the point. Because perlin noise maps are coherent, this results in a final terrain mesh where each biome’s terrain characteristics are visible. Additionally, parameters to control when a biome’s influence should be considered, as well as the blend factor can be configured to steer the results.
Reflection
While the core terrain generatin features work as intended, the system does not fully meet it’s orginal scope. The current implementation is limited to layout and terrain generation, where additional objects cannot be placed yet. As system, the project is extensible but lacks proper tool features, now only being usable in-engine.
On the other side, the project serves as a good starting point for 3D world generation. The system is built with extensibility in mind, allowing future work to be done without making changes to the core architecture. This allows for experimentation with different algorithms and techniques to generate biome-based world.
To make this an actual usable tool and work it to a publishable state, I would refactor the systems to fully support biome worlds instead of biomes being an optional usage as it is now. Additionally, I would implement other techniques to generate a layout, explore different algorithms to generate terrain, and implement the population of terrain with flora, objects and creatures.
Retrospective
Looking back, the project was too ambitious for the available time. As a beginner with procedural generation, generating and blending terrain based on biomes in combination with the placement of gameplay elements was too big of a scope. Although the scope was rather big, I did learn a lot about terrain generation, noise and creating a system. Now knowing the basics of generating terrain with noise, I can further develop my knowledgde and skills in this area and experiment with different algorithms within the same system to try and get different results. Also, designing and implementing the architecture was fun and learningfull and definitely something I bring with me to future projects where creating a system is the main focus.
Although my vision for this project has not yet been realised, I did learn a lot from working on it and am excited to further develop this system at a later time.
