Henry Foley revealed the working process behind the Houdini-powered race track generator for Unreal Engine 5, explained how its tools were set up, and spoke about the generator's parameters.
Introduction
Hello everyone! My name is Henry Foley, I am a Game Art student from Central Massachusetts. I am currently a Junior at Champlain College, where I am beginning my specialization in Tech Art.
Right now, I am employed at the Emergent Media Center at Champlain College, where I am working as a Technical Artist on a project about Data Visualization using XR. Outside of that, I am currently going through the process of applying and interviewing for summer internships.
I am currently working on an AGP (Advanced Game Project) team with USC. I am the Technical Artist on Manas, a third-person action-adventure based on the Kyrgyz epic of the same name. It is being developed in UE5 and will be showcased at the USC Game Expo in May 2023.
Getting Started With Houdini
I originally learned about Houdini from watching the Corridor Crew YouTube channel. They were making some really cool projects that made me curious to learn more about the software. I first learned about Houdini within the context of game development from upperclassmen at my school. So before the end of the semester, I reached out to one of my professors, who gave me plenty of learning resources over the summer. Most of my summer was spent following the resources they gave me and watching plenty of tutorials on YouTube. Once I understood what I was doing, I then started working on my own projects.
I was motivated to use Houdini because of its procedural workflow. It was far easier for me to grasp than other 3D softwares like Maya and Blender. I also kept track of projects that other artists were working on, and I began to recognize the potential of the software.
The Race Track Generator
The idea came from my love of racing games. I’m a huge fan of the Forza Horizon series. I originally wanted to make a tool that would allow users to create a racetrack environment in the shortest amount of time possible. I wanted to focus on rapid prototyping and iteration while also setting it up in a way that allowed users to still experience and drive through what they created.
I also knew that I wanted it to be playable. This meant that it had to work in Unreal Engine 5, have materials, and collision.
The toolset contains four tools in total, with each serving a different purpose. They are all used in Unreal Engine 5.
- Track Generator: This entire system is built on a curve-based input. From that input, the banking angle is calculated, and a road is placed. Along with this two types of barriers are generated, either speed bumps or rails. This allows you to quickly ‘sketch’ out designs for tracks that can then be driven on.
- Grandstand Creator: This is a drag-and-drop tool that allows you to create customizable grandstands for your racetrack. There are two main modes: Covered and Uncovered. The tool has many parameters that allow you to adjust everything from height, width, amount of chairs, the width of the walkway, and so on.
- Fences and Barriers: This tool is also based on a curve-based input. You draw a line that is then generating Jersey Barriers along it. It also contains the option to create an adjustable fence on the barriers.
- Tire Stacking: Lastly is the tire stacking tool. It also uses a curve-based input within Unreal. You simply draw a line on which columns of tires are placed. The height, distribution, width, and pattern of the stacks can all be adjusted to create an entirely unique row of tire columns.
Setting Up the Racetrack Tool
The racetrack tool was by far the most complicated to create out of the entire toolset. It involved plenty of vector math and VEX coding to create each output. I will say to any beginner of Houdini that once you grasp both of those concepts, they will take you very far. Without learning VEX coding, you are really only using half of the program. A great resource that I used for a lot of the coding and vector math on this tool was the JoyOfVex tutorial series. I highly recommend it to anyone beginning to learn Houdini.
The banking angle of the track was handled almost entirely using vector math in VEX. For the barriers on either side of the track, I used the Measure node to help detect what was an inside and outside curve, that way, I could assign meshes to either one. I then set the normals of both outside curves to face away from each other and then used a Peak node to set their distance from the track. The meshes themselves were created using a combination of the Sweep node and the Copy to Points node.
Another important part of each tool that I make is ensuring that it can be used quickly. So I added a Switch node that allows me to generate a low poly, non-UVd mesh, which can be edited in real-time. Once you get a shape that you like, you can then switch to the final track, which has all the UVs and higher-resolution meshes. If you also want an in-depth breakdown of all the other tools, I have some blog posts on my website talking about how I created each tool.
The final generator is as simple as drawing lines and dragging and dropping in Unreal! I created a set of basic materials with each tool that are automatically assigned to each mesh when they are in the scene. Each generated mesh has collisions as well.
The material assigning and collisions were all done using the Attribute Create node. Houdini can generate most attributes of meshes within Unreal. I also put each of these attributes into the tool parameters so they can be toggled on and off within Unreal. This allows you to create fully usable, game-ready assets in seconds.
The Toolkit's Parameters
I could probably fill up a whole article with the number of customization options that all the tools have. I can list some of the primary ones for each tool:
- Racetrack: Banking angle, Track Width, Style of mesh on interior and exterior curves, the distance of meshes from the track, preview mode which allows for quick editing.
- Grandstands: Style of stands (Covered, Uncovered), the style of side walls, the height of stands, angle of stands, the width of stands, amount of rows, the density of seats, the width of the walkway, fence controls, type of collisions.
- Fence/Barriers: Togglable fence, the direction of the fence, the height of the fence, the overhang of the fence, the angle of the fence, the distance of barriers from each other.
- Tire Stacking: Amount of unique stacks, the height of stacks, stacking pattern, tire width/height/diameter, the pattern of stacks along the curve.
Challenges
The most time-consuming tool was most certainly the racetrack tool. I went into it with nearly no understanding of vector math and very little in terms of VEX understanding. A lot of time was spent trying to figure out how to derive as much information as I could from a single input curve.
Another problem I encountered was getting feedback and technical support. While forums and YouTube are great places to find answers, sometimes you encounter problems that you cannot find the solution for. My school has a great alumni/student network for everyone within the Game Art major, but among the network, there are only 4-5 people who have used Houdini.
Houdini is still new to many devs, so there is a limited amount of support for it compared to other 3D software like Blender.
I would also frequently encounter what I call "Single Node Issues". These are problems that you know are localized to a single node, yet you cannot determine how to fix them. In instances like this, I found the easiest way to troubleshoot is by rearranging the node graph, trying out similar nodes, or tweaking the setting of the problem node. Like other softwares, there are 100 ways to do the same thing in Houdini. There is often a node for your problem, you just need to find it.
Conclusion
In my opinion, the best way to get started in Houdini is to begin watching some foundational videos that teach you how to navigate node-based systems. Once you get a decent understanding of some of the more basic concepts, start messing around to see what each node does. Once you have a good understanding of how nodes work, you can start diving into VEX. Learning VEX will open a lot of doors for you. Once you make a tool that you are happy with I would suggest trying to implement it in-engine by creating your first HDA.
The best advice I can give is to find people with a common interest. Having another person to bounce ideas off of will be your greatest asset in learning any new software. Houdini artists are a small, but tight-knit community. I highly recommend joining some online communities either through Discord or the SideFX forums. Also, don’t be afraid to reach out to artists online! I’ve learned so much from sending emails or LinkedIn messages to fellow Houdini artists. Most people are very willing to provide you with some advice. We are all one big community, and we grow by helping each other.
Big thank you to 80 Level for giving me the opportunity to talk about this toolset. Thank you for reading and I hope you enjoyed what I made! Feel free to reach out to me with any questions either about this project or anything Houdini related!