A low-poly rally racing game.
This project was my first videogame ever developed! I solo developed it and was the project that set my game development foundations. At the time I had a laptop with pretty poor specs to make it so game performance was key to me in this game.
My Work Highlights
I made this game as solo developer in Unity without any package or bought content, only thing not done by myself here is the music track and SFXs. In this project there are several aspects I find interesting to highlight:
This game was a great learning experience for me in terms of programming, but the special aspect of this game was car modeling. In this regard, I had to conduct extensive research and study to develop a vehicle mathematical model with the level of realism and feel I wanted to achieve. This taught me a lot about wheels friction, Ackermann steering, engine modeling, downforce, and other car physics concepts.
In a racing game, the geometry of the road is key, and the desired terrain solution was unreachable with built-in Unity tools. To achieve my desired terrain geometry, I entirely modeled it in Blender.
As a consequence, environment objects could not be instanced using Unity's built-in terrain tools, which made level design inefficient in terms of labor and game performance. To reduce the work time required to produce a level, I created a semi-automated pipeline using Blender Geometry Nodes, the Blender Python Script module, and Unity Scripts to:
Automatically and randomly position desired environment objects in the level with randomized scale and rotation, using a set of density parameters that allow me to control the number of objects of a certain type for a given area of the level. Using Blender Geometry Nodes.
Export that data to a readable file from Unity. Using Blender Python Script module.
Instantiate in Unity the population of trees, rocks, grass, etc. defined previously in Blender. Using Unity scripts.
This process was already efficient in terms of development time, but inefficient in game performance as all objects in the level were being indiscriminately instantiated by the processor. To address this, I implemented GPU instancing, LODs and frustum culling for all environment geometry, which heavily improved performance.
In this game I learn also about the basic concepts of: SFX implementation, modeling, VFX and UI implementation; that I would later expand in other projects.
Tools used