During the recent Unreal Fest 2025 in Orlando, Florida, Senior Unreal Engine Software Engineer Ari Arnbjörnsson gave a talk dedicated entirely to PC gamers' nightmare: stuttering.
Over the last few years, we have had to report far too many times that newly released Unreal Engine games (but not only them, to be fair, as other engines are also affected) were plagued by stutters and hitches on PC. All the while, we asked ourselves: what is Epic doing about it?
That's essentially the primary focus, alongside best practice advice to developers, of the aforementioned talk, aptly titled 'The Great Hitch Hunt', where Ari Arnbjörnsson dressed in a witch hunter costume and encouraged fellow developers to 'kill the hitches'.
Arnbjörnsson identified seven primary causes of hitches and stutters. The first one, Level Streaming, is really more of a category that includes a family of hitches related to loading or unloading parts of game worlds. According to the Unreal Engine engineer, a common cause is the misuse of static mesh actors for static geometry. Oftentimes, artists and level designers drag in many static mesh actors, such as tables, books, cutlery, etc, which is fine for small games but potentially disastrous for big or AAA-sized worlds because they bring overhead, require memory load, and have to be scanned by the garbage collector.
Arnbjörnsson recommends using instanced static meshes (ISMs) or hierarchical instanced static meshes (HISMs) instead. The packed level actors feature can also be deployed to combine many static meshes into fewer actors, reducing overhead. The engineer then switched to what Epic is doing to improve level streaming hitches, such as the experimental Unreal Engine 5.5 Cell Transformers feature that converts static mesh actors into instanced meshes at runtime and the experimental streaming performance improvements introduced with Unreal Engine 5.6. Experimental features aren't turned on by default but will be once they're ready.
The second cause of hitches is actually Physics, because content teams tend not to optimize for them. The introduction of Nanite with Unreal Engine 5 made developers believe they could simply drop in complex meshes in their worlds and they would magically work without problems, but that isn't so. Simple collision shapes should be used instead of complex physics whenever possible, in this order: spheres (fastest), capsules, boxes, and (very last) convex polygons. Distant objects that cannot even be interacted with should be completely disabled. The Chaos Visual Debugger can further help with profiling performance issues caused by physics.
Regarding Epic's ongoing work in this area, Arnbjörnsson pointed to the Async Physics Initialization available in Unreal Engine 5.5/5.6, which is also still experimental. This offloads the physics calculation off the game thread, but the engineer recommended not to ship with it yet. He also warned that it could be counterproductive in that it could seemingly fix the problem until the physics scene grows up to the point that the problem returns even worse. Managing how large a physics scene should be remains a high priority for developers. Epic also continually improves Chaos physics with better multithreading and other optimizations.
Then there's the Actor Spawning hitch: complex actors with many components (skeletal meshes, animations) like characters can take several milliseconds to spawn, causing noticeable frame drops, especially if many spawn at once. Advices include limiting how many actors spawn per frame, delaying initialization of components like skeletal animation to run asynchronously after spawn, and pooling actors when possible instead of destroying and creating, and reusing hidden actors.
Arnbjörnsson said that several developers asked Epic to implement actor pooling as a standard Unreal Engine feature. While this is being investigated, it's very hard to actually make it happen, given that they'd have to support every single actor type for every single project in every single industry (Unreal Engine isn't just used by game developers nowadays). For now, developers should rather build custom pools per actor type.
The fourth one is perhaps the most common instance of stutter in PC games: Pipeline State Object (PSO) compilation. Modern low-level APIs like DirectX12, Vulkan, and Metal require fully compiled shaders before rendering. This is not an issue for consoles since they all have the same hardware configuration. However, shipping all compiled permutations is impossible on PC and mobile devices, and compiling shaders on the fly inevitably causes the hitches. Games have been trying to precompile using a bundle PSO cache, but it’s imperfect and hard, especially for open worlds or procedural content.
PSO precaching has been introduced with Unreal Engine 5.3 and should always be used, but it's not enough on its own. Arnbjörnsson urged developers to prepare their own PSO compilation strategy and also to profile their games with the PSO Cache Buster plugin he created (it's available for download here). Epic is still working to improve PSO precaching further. They have now caught all code paths for the major Unreal Engine sample projects and Fortnite.
The fifth cause is the Garbage Collection hitch. That happens when there are too many unused UObject instances, causing the Garbage Collector to take too long and provoke stutters. Developers should therefore endeavor to keep UObject counts manageable and strategically schedule GC to avoid hitch spikes. Epic's engineers are working on the currently experimental Incremental Reachability Analysis feature to spread the Garbage Collector's work over multiple frames, as well as focusing on multi-thread safe incremental GC for client builds in the future.
The sixth is called a Synchronous Loading Hitch, and it occurs when blocking (synchronous) assets loads stall the game thread until the asset finishes loading, causing very long hitches. Under no circumstances should this be allowed - only asynchronous loading should be used. Asset validators (like Arnbjörnsson's CommonValidators) can catch blocking load usage, and some studios even outright removed blocking load nodes from blueprints. For its part, Epic is adding warnings and tools in the Unreal Engine to inform users about blocking loads. Still, if one sneaks through, UE5.4/5.5 introduced the ability to partially flush async queues to reduce hitch impact.
Last but not least, there are the Blueprint and Content Hitches that are caused by developers doing too much work in blueprints or content scripts, such as too many timers, too many tick updates, bloated sequences, or audio/skeletal animators overloading the system. Examples of fixes on the developer's side include faking or simplifying distant objects and turning off unnecessary ticking and timers. For its part, the Unreal Engine maker continues expanding the Unreal Insights tool with better usability and features like region marking and screenshots to make it easier for developers to visualize and optimize performance.
In a closing note, Arnbjörnsson reminded all game developers that despite the many advancements in hardware and software, game development still has to embrace limitations. As such, hard optimization work and clever 'faking' are still very much necessary to get the best results. Hopefully, the talk will open the eyes of developers to this rampant issue and make our game experiences much smoother.
Follow Wccftech on Google to get more of our news coverage in your feeds.
