Cities: Skylines 2 Autopsy Reveals The Reason For Its Terrible Performance

cities skylines 2 city
It's almost impossible to imagine it now, but city builders were once PC gaming royalty with Maxis' SimCity 2000 moving over 4 million copies. These days, the mantle of SimCity has almost entirely been handed off to Colossal Order's Cities: Skylines. That game just got a sequel, but unfortunately instead of the wide acclaim that publisher Paradox would no doubt have preferred, Cities: Skylines 2 has mostly been making headlines for its awful performance.

Lest you think we're being dramatic, to put things in perspective for you, Cities: Skylines 2 is similarly or more-demanding than Cyberpunk 2077 in the latter's RT Overdrive mode. This is despite the fact that it's a DirectX 11 app that doesn't support any current-generation features like ray-traced lighting or virtual geometry. It's strictly an 8th-gen game, technology-wise.

nighttime cities skylines 2

So, why does it run so poorly? Typically in a simulator title like this, you'd expect a brutal CPU limitation as the game attempts to keep track of hundreds of thousands or millions of individual events. Indeed, the original Cities: Skylines has performance problems on older CPUs thanks to its heavy reliance on single-threaded CPU speed.

That's not the case here. Cities: Skylines 2 makes use of some of the latest Unity engine technology to spread its workload across multiple CPU cores quite evenly, and the CPU performance of the game is outstanding. Instead, the game is suffering under a serious GPU bottleneck the likes of which are rarely seen outside of path-traced games like Alan Wake 2.

teeth pedestrian
These detailed teeth are always rendered, even though the pedestrian is four tiny pixels (purple).

Players have been positing all kinds of theories as to why the game runs so badly. One popular theory has been that the title is actually as heavy as it seems to be, but not for any good reason. Early on, players pointed out that pedestrians pointlessly have teeth. That's right: every single pedestrian has fully-rendered teeth with over 6,000 vertices. Compare this to an entire low-density residential building, which has around 10,000 vertices.

Sadly, the peds' teeth are just the tip of the iceberg. In fact, the game is kind of a mess performance-wise, as revealed by Finnish developer Paavo Huhtala in a surprisingly-deep analysis over at his personal blog. After getting the game from Microsoft's Game Pass and noting how awfully it ran on his reasonably-beefy gaming system sporting a Ryzen 7 5800X CPU and a GeForce RTX 3080 GPU, Paavo decided to break out some disassembly and profiling tools to figure out what the actual problem was.

parking booth cities skylines 2
Despite that players will likely never see the inside of this parking booth, it even renders monitor cables!

Using Renderdoc, Paavo walks the reader through the genesis of a single frame that took nearly 90 milliseconds to render on his PC (around 11 FPS). That's atypically-bad performance, according to him, but he says that the title rarely runs above 40 FPS on his machine, even with the settings tanked in accordance with the developer's official optimization guide.

What he reveals is quite shocking. It's not just the teeth; there are quite a lot of objects in the game that have too many vertices for items that either take up a half-dozen pixels or even literally do not appear on screen at all. Worse, most objects also don't have any LODs. For those who don't know, "LOD" stands for "Level of Detail" and it refers to lower-detail models that are used as placeholders when an object is too far away for the full-detail model to be worth rendering.

gastanks citiesskylines2
This extremely detailed model of a pallet of gas tanks is barely even visible normally.

This might be excusable if the game had a proper culling system, where objects that aren't visible are simply not rendered, but it doesn't, really. It has frustrum culling, where objects that are completely outside the camera view aren't rendered, but it doesn't have occlusion culling, so even if a dozen of the above gas tank pallets are hidden from view behind or inside a building, they're still being rendered at full detail.

As Paavo points out, having highly-detailed models in and of itself isn't a flaw, but Cities: Skylines 2 isn't a first-person shooter or open-world RPG where players are likely to pore over every individual object while exploring. It's a city builder, and using characters and objects with detail akin to those you'd find in a game like Cyberpunk 2077 is absurd when you're trying to render an entire city.

It turns out that fully half of the game's render time is spent on shadows. The title uses high-resolution cascaded shadow mapping, and Paavo says that it seems to treat every single individual 3D object as a potential shadow-casting object. This means that all of that unnecessary geometric detail above causes an innumerable number of draw calls as the game attempts to shade millions of polygons per frame. Incredibly, the shadow detail setting in the menus is broken and only the "Low" setting actually makes any difference by disabling terrain shadows.

suburbs cities skylines 2

We won't reproduce all of Paavo's article here; if you're really interested we strongly recommend you head over to his blog and check out the full post. It's a fascinating and well-written article; a great way to spend a coffee or break. Hopefully Colossal Order can get the performance problems under control, because Cities: Skylines 2 seems to be a welcome step forward for the franchise in a lot of other ways.