Environment loading stuttering


(Wezelkrozum) #1

This is an issue I get in a few modern pc games, so I have a strong doubt if this is fixable. But if you guys could fix it that would be awesome!

Currently I have to rotate 360 degrees in every single match so my graphics card loads all the environment in the map to prevent a lot of little stutters of 0.5 to 1 seconds (The higher the video settings, the longer the pauses). It seems that the engine only streams the environment within the BSP block and only the objects that I’m facing. To prevent those stutters from appearing when I’m in a battle I have to move my camera around (360 degrees) so it loads a big part of the environment within the BSP block I’m currently in. Then I run as far as possible to the first objective to make sure I have loaded the whole path.

Another moment this stutter is visible is when I shoot for the first time with a gun. The animation of the first shot is always replaced by a 0.25 seconds frozen frame and after that I can just view the animations perfectly smooth.

Now I don’t know everything about the Unreal engine but for me it looks like the engine only loads the BSP structure and/or lowest LOD level actors (without textures) within it at the moment I face them.

If my theory is correct I would love to see some kind of option in the video settings to load the whole environment in the beginning. I rather have a 2 seconds stutter at the beginning of each match than 0.5 second stutters in the middle of battles. Btw, I have no idea if there is already such option available in the config files.

PS: I’m using 2 AMD HD 6870 graphic cards. And my average GPU workload is only 25-30% in crossfire AFR friendly mode.

Here is a screenshot of the performance of the GPU’s and CPU in the attachements. The long stable lines is the part when I was in-game.



(Wezelkrozum) #2

//youtu.be/qN8P4yQJ1RA

Here is a (private) video of the stuttering I get in every single match. In a few cases you see big stutters while entering a new space. You can also see the huge stutters at the very first rotations. Every recording begins with me Alt+tabbing into the game to make sure the video memory is cleared. While recording draft matches I check the 1-frame interval because it does resolve a decent amount of the tiny stutters. But I don’t play with it because of the extra input lag it introduces. Also, V-Sync seems to make the stuttering worse.


(Wezelkrozum) #3

My GPU is definitely bottle-necked by the lack of CPU power used by the game. I overclocked the CPU from 3.4GHz, to 3.8Ghz and my GPU’s had both a load of 90%-100% during an empty game while the total load of CPU power is still around 40%. The framerate has also improved and seems to be more stable.

Enabling the 1-frame interval option in the video settings results in a FPS gain of around 20%. This combined with using the Borderlands 2 crossfire profile brings my FPS in the highest settings very close to the FPS in the lowest settings. (Making me enable to record the next matches in the highest settings :cool:)

So, to sum it all up in the worst corner of Whitechapel:
no 1-frame interval + AMD default crossfire profile + no cpu overclock = 35fps
1-frame interval + AMD Borderlands 2 crossfire profile + cpu overclock = 50fps

That’s an insane 43% performance boost :slight_smile:

I’m sure tweaking the game to use almost 90% of my CPU load would make the fps boost even higher.


(ailmanki) #4

You should be able to tweak a lot, not sure if you can get completely rid of those things popin in.

The texture pool is set to 160, you can easily raise that to 512 or more, I guess depends how high AA you use.
I don’t know about the world geometry though, or if that where just baked lights mipmaped.

I have the feeling the engine is spending a lot of time, deciding which textures and lightmaps to load or to unload, or which mipmaped version of them.


(Wezelkrozum) #5

[QUOTE=ailmanki;459447]You should be able to tweak a lot, not sure if you can get completely rid of those things popin in.

The texture pool is set to 160, you can easily raise that to 512 or more, I guess depends how high AA you use.
I don’t know about the world geometry though, or if that where just baked lights mipmaped.

I have the feeling the engine is spending a lot of time, deciding which textures and lightmaps to load or to unload, or which mipmaped version of them.[/QUOTE]

I tried your suggestion and changed the PoolSize to 512 but couldn’t identify any changes in the stuttering. Even a PoolSize of 10 doesn’t change anything! I’m wondering if the PoolSize in the ini file is used by the engine at all.


(ailmanki) #6

Kinda unexpected that it has no effect. Yet, the original settings probably are done so that all fits in that memory, So even if its bigger - that does not change a thing. Yet if you use the Numstreamedmips=0, maybe more memory is required - no idea actually. As such keep the pool size around 50% of your gpu ram. You can also test setting it back to default, and see if that makes any change.

Well the rest there is to tweak, are the mipmaps.
Try changing these to 0:
MipFadeInSpeed0=0
MipFadeInSpeed1=0

And lastly you could also add “NumStreamedMips=0” to the Texturegroups, the rest of it you can leave as is, just having posted this full code line, so you know where to put it :). It should have the effect that all Mipmaps are loaded and ready for use. So if you take out for example the medpack for the firsttime, there should be no textures popin in. But maybe the above mipfadein thingy would have fixed it already.
TEXTUREGROUP_World=(MinLODSize=1,MaxLODSize=64,LODBias=0,MinMagFilter=Point,MipFilter=Point,NumStreamedMips=0,MipGenSettings=TMGS_NoMipmaps)

Btw for some eye candy, try setting this one to true: bUseMaxQualityMode=true
And I am curious what are you using to record this?

edit: btw I could not try these things myself. But when I was looking for how to get more fps from this engine, I stumbled over many guides showing how to make the game looking even better. Quite often actually people also posted things how to get rid of texture popin in, but it seems to be not consistent. Maybe its because many games share this engine, but still have major differences.


(Mustang) #7

Other than reducing my FPS I don’t notice any difference.


(ailmanki) #8

Shadows and small details in the distance should be better - in theory.


(Nail) #9

buddy, 114 processes, what the F are you running ?, I run 60 and only cause I need “stuff” for work I do. You probably have things polling for updates, better connections, latest software etc. turn that poo off


(Wezelkrozum) #10

[QUOTE=ailmanki;459503]Kinda unexpected that it has no effect. Yet, the original settings probably are done so that all fits in that memory, So even if its bigger - that does not change a thing. Yet if you use the Numstreamedmips=0, maybe more memory is required - no idea actually. As such keep the pool size around 50% of your gpu ram. You can also test setting it back to default, and see if that makes any change.

Well the rest there is to tweak, are the mipmaps.
Try changing these to 0:
MipFadeInSpeed0=0
MipFadeInSpeed1=0

And lastly you could also add “NumStreamedMips=0” to the Texturegroups, the rest of it you can leave as is, just having posted this full code line, so you know where to put it :). It should have the effect that all Mipmaps are loaded and ready for use. So if you take out for example the medpack for the firsttime, there should be no textures popin in. But maybe the above mipfadein thingy would have fixed it already.
TEXTUREGROUP_World=(MinLODSize=1,MaxLODSize=64,LODBias=0,MinMagFilter=Point,MipFilter=Point,NumStreamedMips=0,MipGenSettings=TMGS_NoMipmaps)

Btw for some eye candy, try setting this one to true: bUseMaxQualityMode=true
And I am curious what are you using to record this?[/QUOTE]

I tried the NumStreamedMips a week ago, but sadly it resulted in even larger stutters. I guess the engine is doing something like this:

  • Me entering a new room
  • The engine detects a face with a texture that isn’t loaded in the memory
  • The engine stops rendering until the lowest possible MipMap is available (because you don’t want invisible faces)
  • The engine sees a mipmap is available and continues rendering the frames
  • Further highres mipmaps are loaded in the background

I don’t know that much of game engines and memory use, but wouldn’t it be better to have a basic color for every texture in the map saved in the memory so it doesn’t have to skip frames? (Of course I have no idea if that’s already the case and so the stutter has another cause)

MipFadeInSpeed didn’t change the stutter behavior, it only pops the mipmaps directly.

Thanx for your help so far ailmanki. Sadly enough no improvements.

I can assure you that doesn’t affect my pc’s performance :wink:


(ailmanki) #11

Lol, I hope you don’t mind me spamming you with ideas…

When you used numstreamedmips - did you have the default pool size? Or did you also try that?

tbh its apparently like that in borderlans, lol they even got a cfg maker… http://online-source.net/tools/cfg-makers/borderlands-2-cfg-maker-2/


(Wezelkrozum) #12

[QUOTE=ailmanki;459656]Lol, I hope you don’t mind me spamming you with ideas…

When you used numstreamedmips - did you have the default pool size? Or did you also try that?

tbh its apparently like that in borderlans, lol they even got a cfg maker… http://online-source.net/tools/cfg-makers/borderlands-2-cfg-maker-2/[/QUOTE]

Well, I monitored my GPU’s memory and it was all full when I tried the numstreamedmips. So, I doubt changing the default pool size would help. Anyway, it could be that I changed it. I have no idea what my settings exactly were when I tried it out.

PS: Not at all. Dont worry, I’m thankful for your help! Keep them tips comming! :smiley: