So, my game is almost finished when it comes to content and ready for beta. When I am playing the game through from start to finish, I am starting to get resourse problems which are displayed by “texture streaming pool over xxxx”.
The thing is, I have optimized all the levels to work at 90+FPS/Epic Settings/ at r.Streaming.PoolSize 1500. All the invidual levels work fine and cause no problems. But when I play from start to finish, the error message starts to pop up constantly, and I am getting texture hiccups and even whole terrains not loading properly.
All of the levels are opened from a Mega Man style menu 1 by 1, via “Open Level” command, not “Load Level”. This should open the levels as separate entities, not keep themselves loaded in the memory correct? When completing a level and returning to the level choosing menu, I want everything from the past level to be handed to the garbage.
So, now I am looking for a debugging workflow how to iron things up. Since the error complains about “texture streaming” I assume its as it says, and some textures or models stay forever in the cache once loaded, or something? Or could it be UI and graphics in it, I have tens of different UI widgets, which all contain many many textures, all textures in them set as UI in compression and texture group. All of them are “removed from parent” after they have served their purpose though.
So, I ran command line “memreport -full” twice. Once right after opening the project, and once I had finished the game once, and was back into the start menu.
Biggest difference was in textures:
Start: Total size: InMem= 206.57 MB OnDisk= 262.84 MB Count=182
After playing : Total size: InMem= 1798.39 MB OnDisk= 1153.14 MB Count=2377
Also in particles etc. though.
Does the report tell that those textures are still in memory, or that those were loadad at some point? I assume that still in memory, since after playing I get the texture streaming pool notification even at black screen with no characters.
So, should I go through the textures to adjust some streaming methods or something to them, or is the problem solved somewhere else?
Im pretty newb with the issue so bear me and my basic questions. I havent paid too much attention to overall memory usage this far, as I have focused just optimizing the levels to work within the limits I have set them…
Edit: Is there a BP node or a console command I could execute between levels, to clear the texture pool?
Oh dear. I found out that hundreds upon hundreds of my textures are set in “Never Stream” automatically, and I cannot turn them off from it, since they are not in “power of two” size, and streaming is only working for textures which are in power of two acording to one answer I found via google. These are mostly UI textures obviously, but fixing repairing all the texture to power of two sizes in photoshop, rearranging all the UIs again, and making new UI animations I have made for the current textures… Easily 100s+ hours of work… ugh. If there is no other solution I probably will spend turning into an alcoholic for 100 hours first though.
I have like flat and long pictures that are like 100x1920 pixels, never thought that I should make those 2048x2048 and fill with transparency, sigh. Or the fullscreen UI borders that are 1920x1080, or small animations I made in after effects that are of various size, cropped as small as possible. Now I am hitting my head and hard. Setting them up to fit each other in the UI and animating them was pain in the first time, Ill have a mental breakdown doing it all again…
Didnt take as long as I feared, so I fixed all the textures to be in power of two, and “never stream” turned off, from every single texture.
Still, I am getting 2.5 gigs of texture memory usage and way above my texture streaming pool after finishing the game. Every single level works well within the memory limits I made them with, but when playing through, they dont get streamed out of memory for some reason. What could this be? I have not tested with built game, only in play in editor.
Power-of-two doesn’t mean they have to be square, you could have a 2048 x 128 texture for the example you gave.