HOUSE BUILDING TOOL
TECHNICAL DESIGN
Introduction
This tool is developed for the creation of urban environments with the Level designers workflow in mind.
Constructing urban environments can be a very time-consuming task, particularly when working with modular assets. However, this tool optimizes the workflow by providing designers with more flexibility and enabling them to quickly iterate on their buildings and cities as a whole
Project Breakdown
-
6 weeks half-time (4 hours/day)
-
Created in Unreal 5
-
Technical design
-
Assets
-
Made in Blender
-
Megascans (used for showcase purposes)
-
The Tool
Features
Foundation
The tool is based on two arrays of vectors, Starting points and the modifiable End points.
To offer the ability to quickly try out their design and layout, the user can drag these points in whichever direction they please and add as many stories they want.
Customizations
The tool enables users to customize their buildings by adding doors, balconies, windows, and trims. Additionally, users can change the colors of the components to their liking.
These customizations allow users to refine their level quickly, ensuring that buildings can go from a blockout state to a refined state in a shorter period of time
Modular
However, the tool doesn't require customizations. Users can also change the default meshes to their own assets of choice to alter the appearance of their buildings. This feature allows users to experiment with different assets in their level, making communication between artists and designers more effective
Development Process
First version: Splines
During the first three weeks I tried to develope my tool using splines and spline meshes. I believed it would make the tool feel responsive and satisfying to use.
While the intention was good it was the wrong choice. To create 90° angles with a spline component was, to say the least, frustrating.
I discovered that all walls placed in the same angle share the same End Tangent value. I could therefore create 90° corners by overriding their value. However, this didn't work when two corners were created beside each other, leading them to get deformed. I felt like too much of the logic was happening inside the spline's code, which made it hard to debug.
I realized that I was working against the splines purpose, trying to override what it was built for.
While struggling with the splines I learned that vector-variables could be edited from the editor, visualized with a gizmo.
I had previously done a protoype of my tool using vectors but I wasn't happy about the fact that the user had to interact with the details panel to create the structure of their buildings.
By being able to edit vectors from the editor, I based the logic on two arrays of vectors, Starting points and Modifiable points. The tool calculates the distance between one starting point and its corresponding modifiable point, adding walls along this distance. As soon as a new modifiable point is created, a corner is as well.
Now I could mimic a spline, allowing the user to drag points in any direction they want, while having more control over the points values.
Second version: Vectors
Inner and Outer Corners
My next challenge was to find out how to place a corner model with the correct rotation. I did this to hide the edge that's otherwise visible between two walls with different rotations. The main problem was that I needed to calculate inner corners and outer corners differently. This meant that I had to find out what made them differ from each other.
The answer was that inner corners are created when the current modifiable point's forward vector is the same as the previous point's right vector. This allowed me to identify which type of corner was created and implement the correct calculation for each of them.
Reflections: Further Development
At the start of this project, my plan was to implement the ability to build roofs. It was a bit ambitious to think that I would have time to complete it but I managed to create a first version.
Current solution
The solution for the sloped roof is based around two types of models. One right triangle and one rectangle. Based on the width, the rectangles are stacked upon each other, ending with a triangle.
The user can also switch between a flat roof and a sloped one.
This solution would however not work with a regular assetpack as modular roof tiles aren't normally built around these kinds of models.
Alternative solution
Another solution could be to divide the structure of the building into rectangles. By adding new points (blue circles in the gif) at the intersection of two corners, I could create a roof that was scaled accordingly the distance between these points.
This would of course require a solution to handle the scaling of the material as well.
Reflections: Closing Thoughts
I'm really happy with this tool! After these couple of weeks I feel like I've grown and improved my skills as a technical designer. However, there are some things that I'd like to improve.
Optimization
Customization modularity
The tool spawns static meshes which can cause the blueprint to run slower when you create a larger building. I believe that by using instanced static meshes, I could create an even more responsive tool.
The logic for all customizations (except for the colors) is handled very similarly. However, I didn't have the time to implement a more modular function, which led to each customization setting having its own function.
Thank you for reading!