Devlog 6
Main map optimization and collision fixes
Having completed the fundamental gameplay mechanics—vehicle movement, turret targeting, and camera logic—it was time to introduce our main environment: the Gladiator Arena, which was conceived and agreed upon at the time of our concept presentation. I received the 3D map from the designers, and while it was amazing-looking, it was a huge performance problem. Clocking in at over 5GB, the scene contained high-poly meshes, extensive collider usage, and global shadow casting—elements that would be acceptable for cinematic or AAA-style games but not for an arena-style, low-latency multiplayer game. Being the gameplay programmer, I felt it wasn't just my responsibility to implement mechanics but also to ensure the game runs well, especially on low-end hardware. Performance issues can ruin player experience, and optimization is just as important as features.
Optimization Techniques
Things I did to bring the map in line with our performance goals:
- Removed unnecessary exterior mesh colliders: Some of the exterior objects used convex colliders, which are incredibly more GPU expensive than they had to be, especially for non-interactive geometry.
- Disabled shadow casting on background and out-of-reach objects: Shadowing is among the most GPU-expensive things to perform, and a huge number of objects were casting shadows but never being seen by the player.
- Removed unnecessary geometry: There were some unnecessary decorative items on the map that were not part of gameplay. I removed these items manually to reduce draw calls and memory load.
- Enforced LOD (Level of Detail): Wherever feasible for primary visual objects that were required to remain on-screen, I added custom LOD groups. Distant objects dynamically switch to reduced mesh detail copies (LOD1, LOD2), or are entirely culled when beyond the frustum of the camera. This shaved dramatically off overdraw and GPU stress within large scenes
The optimization was that extreme that the diff couldn't be pushed to my GitHub branch cleanly due to its size, I have found a way to push it using GitHub Large File Storage.
Collision problem and fixes
In playtesting on the newly imported Gladiator map, we encountered some problems with incorrect obstacle colliders. Vehicles were trapped on the boundaries of ramps, wooden obstacles, and rough terrain, disrupting gameplay and ruining the desired flow of battle. Because a rapid and non-corporeal fix, I placed custom box colliders by hand on areas of concern. These non-corporeal colliders were the same size and shape as the original objects, which smoothed out the play experience invisibly without modifying the visual look.
- Wooden bumps alongside ramps were aesthetically pleasing but possessed jagged collider geometry. I hid them with box colliders that would not allow wheels to clip or jam.
- Transitions between ramps and floors had little seams that cars would become wedged in. I filled them in with invisible colliders that serve as smooth bridges beneath the visual assets.
By turning off the mesh renderers on these colliders, the solution was completely transparent to the player. It's a small trick, but a neat one that allowed me to keep the visual design of the level intact while delivering a smoother and frustration-free driving experience. This was especially worthwhile with time constraints and map size, and it illustrates how gameplay programmers often have to generate creative, low-impact solutions that maintain immersion while solving technical problems.