Procedurally Generating 3D Platformer Levels
3D platformers have been around since the 1990s, first to start getting popularity in “1996” with the release of “Super Mario 64” (Nintendo, 1996) and “Crash Bandicoot” (Naughty Dog, 1996), with more releasing not too far after “Spyro the Dragon” (Insomniac Games, 1998). Each of these games brought their own vision of what a 3D platformer is, expanding the genre, but keeping the fundamentals on what a 3D platformer is.
With the amount of time that 3D platformers have been about there has been a lack of research done towards the goal of creating fully procedurally generated 3D platformer levels. Whereas in 2D platformer the research has been done much more extensively utilising various techniques and design principals. The limited research on PCG for 3D platformers could be attributed to the complexity of working in three-dimensional space. Unlike 2D generation, which primarily deals with two dimensions of axis, the transition to 3 dimensions introduces additional complexities that must be addressed. With added complexity this can affect both the technical implementation and visual aesthetics of the generated content. This provides extra challenge in both balancing and having a coherent level.
For my 4th year Project and Dissertation, I researched and investigated different games level design as well as various procedural techniques, to see how I could implement those techniques into a method to generate a level. I implemented two separate methods utilising the procedural techniques to base the design of the games "Super Mario 64" and "Crash Bandicoot".
Implementation
The application was built in Unity. The two methods created focus towards a technique each, the first methods focuses around Perlin Worm to create a level similar to Super "Mario 64 - Bowser in the Dark World". Whereas the second method focuses around Voronoi Diagram and Delaunay Triangulation to create a level inspired by "Crash Bandicoot" levels.
Method 1: Perlin Worm Generation
Perlin Worm generation was the first method that I developed with the focus towards creating a level with focus towards creating the basic building block that can make up a level, avatar, start, goal, path and obstacles. The generation focused towards creating a level similar to "Bowser in the Dark World". it does this by creating a path using Perlin Worm then spawning a random obstacle at the end of the path, and repeat this a certain amount of times until a full level is generated. Each obstacle consists of a start and end point in which the start is where the obstacle should spawn in respect to the end of the path and the end point is where the new path should spawn. It is easy to create more obstacles since it only needs those two points two make an obstacle and all of the obstacles are stored in a storage.
​
Techniques/Features
-
Perlin Worm
-
Procedural Mesh
-
Obstacle Variety
​
Perlin Worm Generation Demonstration
Method 2: Voronoi/Delaunay Generation
Voronoi/Delaunay generation looked to expand from the first method focusing more on a visuals for the level to make if feel more natural. It does this my creating terrain in which the level will be generated on. The inspiration for this generation are the "Crash Bandicoot" utilising an inner boundary and outer boundary where the inner boundary is the playable level and the outer boundary is the scenery that fills out the level.
​
Techniques/Features
-
Voronoi Diagram
-
Delauney Triangulation
-
A* Pathfinding
-
Loyd Relaxation
-
Poisson Disc Sampling
-
Level Preset
​
Voronoi/Delauney Generation Demonstration