Unreal 5.4.1 constant spikes on fps

Hello,

After an update to 5.4.1 from 5.2 we are starting to see constant stutter on fps and seems to be caused by the rendering thread. This behaviour didn’t happen before and is pretty annoying.

As you can see in the next image the spikes are originated by the Draw line in the graph.

unitgraph_spikes

Running a Unreal Insight Trace Session I think the spikes are generated by “STAT_GenerateDynamicMeshDrawCommands”.

I’m learning Unreal and don’t know much about what this means or what I can do to mitigate this behaviour.

Removing assets from the levels obviously reduces the problem, but the same levels in 5.2 didn’t had the stutters.

It happens also in Standalone mode and the engine I’m using is build from source.

Thanks.

3 Likes

I found this to be an issue when using the new ZenLoader DDC, for some reason it misses very often and needs to rebuild textures

When I switched back to the previous DDC this issue was resolved for me

I just used the 5.3 DDC settings in my DefaultEngine.ini:

[DerivedDataBackendGraph]
; Configure the hierarchy as the root of the cache. Reads access the nodes in order until satisfied. Writes go to every writable node.
Root=(Type=Hierarchical, Inner=Pak, Inner=EnginePak, Inner=Local, Inner=Shared, Inner=Cloud)
Local=(Type=FileSystem, UnusedFileAge=34, PromptIfMissing=true, Path=%ENGINEDIR%DerivedDataCache, EnvPathOverride=UE-LocalDataCachePath, EditorOverrideSetting=LocalDerivedDataCache, CommandLineOverride=LocalDataCachePath)
; Configure the shared cache that is accessed after local.
Shared=(Type=FileSystem, UnusedFileAge=10, FoldersToClean=10, ConsiderSlowAt=70, Path=?EpicDDC, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath)
; Configure the cloud cache that is accessed after shared.
Cloud=(Type=Cloud, ServerID=Default, EnvHostOverride=UE-CloudDataCacheHost, CommandLineHostOverride=CloudDataCacheHost, CommandLineOAuthSecretOverride="CloudDataCacheOAuthSecret", OAuthAccessTokenEnvOverride="UE-CloudDataCacheAccessToken", EnvHttpVersionOverride="UE-CloudDataCacheHttpVersion", CommandLineHttpVersionOverride="CloudDataCacheHttpVersion")
; Configure a Project Pak node. This is a pre-generated DDC data file for the project that can be distributed to reduce runtime fetches/generation
; See documentation for how to create a DDP via the DerivedDataCache commandlet
Pak=(Type=ReadPak, Filename="%GAMEDIR%DerivedDataCache/DDC.ddp")
; Configure a Project Pak node. This is a pre-generated DDC data file for the engine that can be distributed to reduce runtime fetches/generation
EnginePak=(Type=ReadPak, Filename="%ENGINEDIR%DerivedDataCache/DDC.ddp")
3 Likes

This was my theory also :slight_smile:

This definitely does fix it, in some cases, but not all… :thinking:

At least when I was bashing my head at it, the callstack always pointed to Zen DDC, and I didn’t notice it after I changed

But there might be other causes

1 Like

It seems to have solved the problem. Many Thanks.

I think you’re definitely on the right track. I’m gonna have some more time tomorrow to play with it… :smiley: