UE4 Procedural Voxel World
This project was developed as part of my final year dissertation, which was entitled “Creating a voxel world in Unreal Engine 4 through the implementation of procedural generation techniques”. The analysis of the dissertation involved the research into five different procedural generation algorithms:
- Value noise
- Perlin noise
- Simplex noise
- Midpoint displacement
- Diamond-square algorithm
The product was then designed and developed in Unreal Engine 4.15 using two additional plugins – Devdad’s SimplexNoise plugin (which handles the generation of the noise) and Koderz’s RuntimeMeshComponent plugin (which was used to render the sections of voxels).
Blueprints are used to set the world’s seed and then generate the world around the player, as well as load the world in and out when the player moves around. I decided I would like to use C++ in Unreal, as I had not done so before, so the functions that set-up each chunk’s mesh (i.e. which blocks appear in the world and which are not drawn) and choose the correct voxel and biome materials are coded in the actor class.
- Generates seemingly infinite voxel worlds using simplex noise
- World seeder uses int max, so the application will generate one of over two billion worlds
- Support for multiple octaves of noise (which can be changed in Blueprints)
- World procedurally loads in and out when the camera is moved
- Render distance can be changed, which allows more of the world to be generated at one time
- Application can generate the world in one of four different biomes
The world generation program is a proof of concept inspired by Minecraft that was made as an example of the usage of procedural generation techniques in Unreal Engine 4. Because of this, it is not a fully fledged game and could be expanded on to include more features, such as the ability to add and remove voxels; generate trees, plants and bodies of water; and add gameplay elements and a menu system.
Copies of my dissertation, dissertation designs and final product are available upon request. Please use the contact page to get in touch!