Project Type
Engine Used
Languages Used
Primary Roles
Main Skills Developed
University Grade Received
|
University Final Year Project
Unreal Engine 4
C++, Blueprints
Everything - this was a solo project.
Unreal C++, technical knowledge primarily surrounding procedural generation, planning, communication and time management skills, confidence both technically and socially.
73% (Provisional)
|
The Wave Function Collapse algorithm is a greedy procedural generation algorithm capable of taking a small example input and producing a similar output. This can be anything ranging from video game characters to item pickups to even poetry. In my project, I have focused on implementing a custom Wave Function Collapse algorithm and then extending it with custom constraints, allowing the user to partially create a level and then have the algorithm analyse their scene and fill the rest of the environment out, in such a way that complies with the given scene.
I did this project as my final year project within University, and thus wrote a 10,000 word report alongside it, researched it thoroughly, compared and contrasted my project to existing solutions already available and finally presented it to my supervisor and examiner. I found that my project filled a niche in constraining a 3D Wave Function Collapse algorithm to build surrounding environments. There are areas I found I could improve such as how user-friendly it is overall, and thus if I were to continue developing this project I would work upon these, however for the most part I am satisfied with this project.
I did this project as my final year project within University, and thus wrote a 10,000 word report alongside it, researched it thoroughly, compared and contrasted my project to existing solutions already available and finally presented it to my supervisor and examiner. I found that my project filled a niche in constraining a 3D Wave Function Collapse algorithm to build surrounding environments. There are areas I found I could improve such as how user-friendly it is overall, and thus if I were to continue developing this project I would work upon these, however for the most part I am satisfied with this project.
Example levels
Taking the following input...
And an output grid that looks like the following...
These following outputs have been generated!
As can be seen, all of the given outputs abide by the rules within the input grid and look similar to the original input! Additionally, they all feature the house at the same location every time, showing that the user can fill in parts of a level before generation.
This is just an example of outputs that could be generated from this input. There are likely countless more possibilities.
This is just an example of outputs that could be generated from this input. There are likely countless more possibilities.
As another scenario with the same input grid, take the following output grid:
The above highlighted part of the grid is a spline, previewing where a river will be present.
When combined with the WFC algorithm, the following outputs are generated:
When combined with the WFC algorithm, the following outputs are generated:
As can be seen, all of the produced levels contain the river bend that was specified by me in the output grid, but have also generated the surrounding environment in a way that connects the river to the rest of the game map.
However, we can also edit the frequencies of how often each mesh should spawn. Lets say for example that we wanted more trees. This frequency can be adjusted within my weighting editor, like so:
Which results in the following:
As we can see, the river is still there, but with far more trees this time! Utilising these systems, the user can build a partially completed game map, set frequencies for each mesh and control the output!
Demo and Source Code
The demo and source code for this project are currently withheld due to it being a part of my university module. It will be added after this university year has finished.