Procedural Generation in Project Mountain
Updated: Mar 11
I learned a lot about procedural generation through Project Mountain. Both its advantages and problems. Here is my experience:
After we decided to add procedural generation the first thing I did was to do a lot of research and started the design of the systems. I am a visual thinker so I always like to make system diagrams. Here is the one for the procedural systems. I made all the concept visuals in Photoshop:
Once I have the systems in my head I then start making them in the order of importance.
Here are a few screenshots of the early generations of the mountain.
For the mesh generation, I learned from my research is best to generate a cube then normalizing it to a sphere and then apply Perlin noise for the terrain.
However, the mesh doesn't really look like a mountain and it is very hard to climb. So I had to add a filter system to apply the Perlin noise with different limitations. With some math and thinking, I figured out two algorithms that applied the Perlin noise in ways that generated super realistic mountain shapes. Mainly incrementing the strength of the noise as the vertex is closer to the center for the peak and having a flat transition at the midpoint of the mountain.
Generation tool for the mountain:
Once the mesh generation is finished, I began to work on the content generation system. We had enemies, environment assets and others to randomly generate around the mountain. The biggest problem is optimization, the mountain is huge and in the main game, there are four different ones.
Here are some screenshots of my progress over time.
The first time enemies generated on every vertex, this almost crashed unity.
Enemy scales, randomness, and density system.
After the content generation, I started the terrain visualization system which included a content activation system that solved the performance issue. Contents are activated based on the distance to the player and they are broken down into small sections. The game runs at around 80 frames in the end.
Terrain visualization system that displays the risk level of the terrain. I was inspired by Death Stranding.
Here is a final screenshot for the level:
Project Mountain Gameplay:
Thanks for reading.