Hexton Hills Tile Generator
October 2024 - April 2025
Project Demands
- Developing a complete product to a clients specifications.
- Collaborating within a group with artists, a designer, other programmers and producers.
- Understanding the needs of the client, and effectively communicating with them.
Noteworthy Contributions
- I developed the terrain manipulation and spline path tools.
- To enable the terrain manipulation, I also programmed a function that generates a procerdural mesh of any number of subdivisions.
- I developed a method for saving a created tile as a .csv file, as well as a method for importing a tile by reading the data within a given .csv.
- I developed methods that allowed the terrain mesh and objects placed in the tile to interact.
- I worked on integrating many of the UI elements with their associated functions, as well finalising the main menu.
Developed Skills
- This was my largest project to date using Unreal engine, and I have definitely improved with the softwares tools, and C++.
- Working with a team was a valuable experience regarding collaboration with other roles and utilisation of tools, such as Jira and Perforce.
- Understanding a clients requirements and adapting to feedback allowed me develop my client interaction skills.
Project Description
The Hexton Hills Tile Generator was developed as a group client project for my final year of university. I was personally developing procedural tools for creating and manipulating tiles.
It was made using Unreal with C++.
The client was
Graven Guild. They requested us to develop a program that allowed a user to create a hexagonal tile, decorate it in a variety of ways, and export either the tile data for sharing, or the tile mesh for 3D printing.
Contribution: Terrain Manipulation Tools
- The terrain tools I developed were:
Brush tool: Raises or lowers a group of vertices concurrently.
Vertex tool: Raises and lowers a single vertex.
Noise tool: Randomly raises and lowers a group of vertices concurrently.
Flatten tool: Averages and sets the height of a group of vertices.
- I also programmed clamps that stop vertices from going any higher or lower than their current height when applied.
- Developing this further, I would have liked to have optimised the tools that deal with a group of vertices, as performance can suffer when working with high complexity mesh.
Click the icon below to view the tool code:
Contribution: Spline Path Tools
- The path tools I developed were:
Add point: Creates a new path at a point, or adds onto a pre-existing path.
Select point: Grabs a nearby major spline point and moves it, as well as the connected edges.
Delete point: Deletes a nearby major spline point and connected edge if it is on an end of the path.
Delete path: Deletes the entire spline path associated with a nearby major spline point.
- Additionally, the spline will automatically segment itself into a number of points, so that it can bend with the terrain with varying terrain.
- The spline also has a number of mesh components across it, connecting each spline point to create a solid model across the entire length.
- Developing this further, I would have liked to have developed procedural functionality that updated the spline mesh based on external conditions, such as an intersecting path, or nearby object.
Click the icon below to view Blueprint code:
Contribution: Procedural Mesh Generator
- In its current state, this tool can procedurally generate a hexagonal mesh of any size and "complexity".
- It can also take a given padding value, and create of list of mesh vertices that are on the tile edge that cannot be manipulated
- Developing this further, the code could definitely be optimised. During development I didn't have much time for optimisation, thus I had to accept its state as long as it worked. I would have also wished to develop a function that allows the user to change complexity during runtime.
Click the icon below to view the generator code:
Contribution: Terrain and Object Communication
- In its current state, placed objects can move with the terrain below them, and be toggled to rotate to always be flush with the floor or not.
- Buildings placed in a specific way also create plateau's beneath them, shaping the terrain.
- Developing this further, It would make sense to procedurally determine the size of the created plateau based on the size of a place object.
Contribution: File Manipulation
- In its current state, the user can save all essential data about a tile to a .csv, and on a name and location for local storage.
- These .csv files can also be imported to recreate the tile based on the data that has been recorded.
- Developing this prototype further, it would be interesting to find more efficient ways of abstracting the save data for recording.
Click the icons below to view the C++ and Blueprint code:
Contribution: Stamp Tool (partially complete)
- Near the end of the project, I was working on a new terrain tool that would take image data from a heightmap, and apply it onto the tile mesh to create naturalistic terrain.
- It could select a random image from a collection of .png files (from a selected directory), access it's pixel data, and apply it to the tile to create various terrain patterns.
- This feature was unfinished, as I could not complete the work needed to translate laying a rectangular image over the hexagonal tile.
- Regardless, working on this feature was a good opportunity to practice file manipulation and utilising image data.
- Below are images from the development of this tool. It shows image data being applied to the terrain, but in a disorganised fashion.