Optimizing midcore games: Balancing high-quality graphics and performance. Polygon management

In the realm of midcore gaming, players have come to expect not just engaging mechanics but also high-quality visuals, all within the constraints of varying device capabilities. Unfortunately, I’ve observed games struggling to perform on even mid-range devices. This can be a critical issue at launch; players might abandon a game not due to its design but because of optimization problems. Here, I’ll outline a few key principles aimed at delivering visually appealing graphics without significantly impacting performance.

Disclaimer: Achieving “impressive graphics” in mobile games doesn’t have a one-size-fits-all solution. Depending on their goals, some projects might prioritize complex physics, others aim for realism, and some rely solely on UI Canvas. Achieving all these elements is typically only possible on flagship devices, which not everyone owns. Hence, optimizing performance to support a wider range of devices is essential. The tips below aren’t secret tricks but following them can significantly enhance midcore game optimization.

Polygon management and beyond

3D artists often navigate tight constraints set by initial concepts. However, there are techniques to achieve desired volume and depth without overwhelming the model with polygons. Surprisingly, some textures don’t even require a Normal Map due to the detail lost in basic Albedo textures. Here’s the first tip:

1. Focus on Albedo textures

Rather than modeling minor details like buttons on a character’s jacket, incorporate them into the texture instead. For a AAA mobile shooter, a character model capped at 5000-8000 triangles is generally adequate. An experienced 3D artist prioritizes this polygon budget on elements more significant than buttons or zippers. For instance, the Jon Bull train in Railroad Empire features a character at the controls with merely 1000 triangles, and it only takes up 166 KB.

Concept art

2. Implement crunch compression

Crunch compression is a handy tool. It can reduce a 5 MB image to 250 KB without sacrificing the original 2048×2048 resolution.

One downside is the potential for artifacts to appear on textures with heavy compression. This is particularly noticeable on white textures, though it’s much less evident on colored textures.

3. Remember: Concepts are guidelines, not blueprints

The goal of a 3D model is to faithfully represent the concept’s shape and color using the minimum polygons and textures necessary. Avoid extremes of over-simplification, which can lead to elements like barrels being reduced to flat billboards, or the other extreme of excessive detail unnecessary for the game’s perspective.

Railroad Empire strikes a balance by using Ambient Occlusion maps in the Albedo alpha channel to imply volume without the need for extra textures.

4. Monitor triangle counts per frame

On less powerful devices, aim to keep the triangle count between 100,000 to 150,000 per frame. Although devices are becoming more robust each year, the demands on them are also increasing.

With each OS update, new services start running in the background, consuming RAM – from automatic app updates you might not be aware of to active geolocation services and numerous other processes. Often, you’re left with only half of your device’s RAM for gaming, sometimes even less.

5. Leverage LOD

The strategic use of LOD has been a crucial optimization technique for Railroad Empire. By judiciously implementing LOD, we’ve seen a significant FPS boost. For instance, the initial LOD (LOD0) for a skyscraper might feature around 7000 triangles. This number is reduced to about 2000/1500 for LOD1 and further down to 700/300 for LOD2. While these practices might not align with industry standards, they’re tailored to our project’s unique requirements. This approach, especially considering the game’s building density, has enabled us to achieve an optimal 30 FPS performance on mid-range devices, predominantly thanks to effective LOD management.

6. Reuse 3D models in the engine

Every 3D model you add to the engine consumes memory. Having 20 instances of the same prefab doesn’t equate to having 20 different houses on your map. In Railroad Empire, despite the unique nature of much of our content, we enhance map loading speeds by resizing existing models.

Stay tuned for our next discussion, where we’ll delve into strategies for managing textures and animations.


Back to blog