Pre-pass continued, featuring the high poly hall of shame
The egregiously unoptimized character models are not the sole cause of the game’s poor performance (because it’s never that easy), but they are an indicator of the broader issues with the game’s assets and rendering. The game regularly draws too many objects with too many polygons that have quite literally zero impact on the final image. This is not specific to the pre-pass, as the same issues seem to affect all rendering passes which rasterize geometry. I think there are two main causes for this:
Some models don’t have any LOD variants at all.
The game’s culling system is not very advanced; the custom rendering code only implements frustum culling and there’s no sign of occlusion culling at all. There is some culling based on distance but it’s not very aggressive, which is great for avoiding pop-in but bad for performance.
Here are a few other examples besides the character models.
This highly detailed pallet of gas tanks consists of over 17K vertices.
These densely packed clotheslines are made from 25K vertices per piece and feature dozens of individually modelled clothespins, or laundry boys as we call them in Finland. There’s also an even more dense variant featuring over 30K vertices.
This parking booth mesh is technically not used in my example frame’s pre-pass, but it is still present in the scene and later used in the shadow mapping pass. This mesh consists of over 40K vertices with no LODs, and features luxurious details you don’t even get in most AAA games, like individually modelled cables connecting screens and keyboards. They are even routed through a (relatively round) hole in the desk! Combining the building and the furniture into one mesh saves on draw calls, but it also means that the props can’t be culled individually.
This mesh of a pile of logs is similarly only used in the shadow rendering pass, and features over 100K vertices. It is the highest poly model in the game I’ve encountered so far, though I haven’t played for more than a few hours.