Constant "Resizing Virtual Texture Pools" message after upgrading project to 5.4

Hi, after migrating my project to 5.4, I keep getting this message constantly popping up several times a minute:
image
I tried doing exactly what’s on the message:


Copied the transient pool to fixed one. Had no effect, the message kept appearing.

So I decided to read up on it:

All I am doing is a simple cinematic quality environment. Correct setup of fixed texture pools requires rendering engineer level of knowledge to do correctly. This is not anything average engine user/artist should ever come in contact with, be expected to interact with, or even be expected to be concerned with.

If the transient pools don’t get saved, then why just not make them fixed by default, and ditch this message?

I honestly think this is a bug, that it’s not something that should appear spontaneously, but something that should only appear if there’s an error in manual setup of fixed VT pools user has explicitly done beforehand.

6 Likes

Same thing is happening to me. I have searched a couple of hours for a solution with no luck. I might be looking in the wrong places though.

1 Like

I’m having the same problem and I couldn’t solve it. I really hate problems like this. It ruins the workflow. We are wasting time like crazy until we solve the problem. While rendering, my water add-ons do not appear and it constantly gives this error. I think we’ll have to buy 10 5090s.

2 Likes

You can get rid of this message by disabling “Pool Auto Grow in Editor”


After turning it off, message no longer appears, but since VT pool settings seem like deeply technical topic, I don’t have a good understanding how turning off this feature will affect performance or visual quality of the level.

If I have to make an educated guess, I’d expect it to cause issues with some materials not always displaying sufficient/full resolution of virtual texture if the memory pool is filled, even if GPU has more free VRAM available to fill.

But since it’s Editor-only setting, it’s probably relatively safe. The tooltip is implying the auto-growth is disabled in cooked builds by default anyway.

10 Likes

I ran into this issue when trying to enable landscape displacement and so far it fixed my issues, without any more problems

I try to increase the pool size without closing the notification, but it does not go away when I increase it. How can I increase the size of the pool and solve this problem? Textures go crazy when rendering. It goes back and forth. How can I fix this problem?

https://www.youtube.com/watch?v=W6W5roK9z98

1 Like

Just disable the Pool Auto Grow in Editor option as shown in the post above.

3 Likes

We’re having the same exact problem as well. Wasted several days and can’t find a solution.

We tried to convert the “Medieval Environment” from UE 5.3 to UE 5.4, and now we are constantly getting the same popup message every couple of seconds and it doesn’t stop.

If anyone finds a “correct solution” please post here and let us know. Thank-you!

I think i solved it.
In transitient pools i had dxt5 in just only one index0.
I increased the “Size in Megabyte” value to 250 and it was done.
To know the pool that needs more memory, i put this command: r.VT.Residency.Show 1
Then it showed dxt5 was on the memory limit. Then I increased the value as i told before and the problem with textures was solved.
Now my video memory is exhausted, but all textures are in the correct form.

4 Likes

With 5.4, this is just going to be a standard thing you need to tweak to make it work your combination of level/scene/map and your hardware when you’re using RVTs. I did a whole bunch of experiments with this over the past few days across multiple maps to make sure this is consistent.

The idea of the Transient Pool seems to be to continuously update the necessary pool size to facilitate the view you’re aiming for including all of the VTs.

It’s important to note that the message you get while moving the camera is telling you to use a Fixed Pool.

So, here’s an approach that should work in general.

  1. In your Project Settings, filter on “pool” and find the Transient Pools section shown in the screenshot

  2. Delete this pool! There’s a Bin icon on the row that says “Transient Pools 1 Array Element”. Don’t worry, the Editor is going to rebuild this for you. Keep the Project Settings tab open, you’re coming back here a few times.

  3. What you’re going to do now is allow a new pool to be built with a first attempt at finding your peak* requirement. Go to your Map, go high enough up to see however much of your map you normally do while working, and spin your camera round and round, fast - really! The aim here is to force the Editor to pool as much as it needs to quickly.

  4. Go back to your project settings and check out that same Transient Pool section. You’ll see the Transient Pool has been recreated. You’ll want to find the row that says “Size in Megabyte” - this is the dynamic size your pool is updating to try to load everything you want to see. Make a note of that number.

  5. At this point, I’d personally delete the Transient Pool again and repeat the spinning camera thing a few times, each time noting down the resultant number until you find a maximum number. You don’t actually need to delete the Transient Pool - the number will just keep updating as required, but I found it easier to capture the maximum this way.

  6. Let’s move on. It’s time to make a fixed pool. You’re going to click on the Fixed Pools “+” symbol to add a new Fixed Pool. You’re going to need to match whatever Formats you had in the Transient Pool Formats section, and then enter the Size in Megabyte that you captured in steps 4 and/or 5 as your peak requirement. You’ll end up with a Fixed Pool setup something like mine below. Remember this is going to be specific to your map and machine, so while I have a couple of DXT5 Format entries and a pool size of 512MB, your requirements may differ.

  7. Now it’s just a matter of repeating this - delete the Transient Pool, go back to your map, and start spinning that camera again. If the message pops up, your new Fixed Pool isn’t large enough, so go back, up the number in Size in Megabytes, and delete the Transient Pool. I’ve found it takes me 3 or 4 cycles of this to get the number right, but 512MB works well. Sure, I’m locking in half a gigabyte of VRAM for the textures when maybe a couple of hundred MB would do, but that’s a cost I’m willing to pay - I can see through perfmon my VRAM usage go up by 300MB (when I up the pool from 200 to 500) so this is a direct, measurable cost. You will want to tune for your own setup.

That’s it. The Transient Pool is going to get recreated sometimes - do something crazy to your scene, add a bunch of new textures, painting on your landscape and darting around the map - overall though, the message is going to be eliminated and you can be confident you’re not going to push your machine beyond what it can do because you spent time tuning it.

It sure is easier to just untick “Pool Auto Grow in Editor”, so if you’re doing a quick job then that’s your best solution. However, for a Map you’re actually spending time on, this is just going to force a queue to build on your in-Editor textures, so your screen is going to update a lor more slowly when you move your camera around. Like everything in UE, it’s up to you to choose the best option for your specific needs :slight_smile:

17 Likes

This is absolutely unacceptable amount of steps and technical knowledge tinkering to have to figure out when starting each new project out of the box. Especially given that the pools aren’t set up globally, but per texture format.

Even users who understand intricacies of virtual texture memory allocation, and how it relates to individual texture formats (which there are dozen plus of) won’t be willing to put up with this.

This needs to be a heuristic that has one or two simple tweakable variables, but decides what to do under the hood. Being forced (not just have an option) to manually interact with such a low level concept as texture memory allocation in a third decade of 21st century in a game engine marketed to end users, and not game engine developers, is truly ridiculous prospect.

I am still 99% sure this is a bug. No one in their right mind would expect things kind of thing to have to be manually wrangled by average user.

In fact, the steps you are describing sound so tedious and ridiculous I am questioning whether you are being sarcastic, poking fun at the ridiculousness of this all, or whether you are serious :slight_smile:

I mean why would the feature be named Pool AUTOgrowth when it requires you to grow the ****ing pool manually, to get rid of annoying message constantly covering bottom right part of your editor UI. If it was truly AUTOgrowth then it would keep setting the max pool size automatically to whatever the peak usage was, and have some “max size” constant, set to some high enough number.

1 Like

I hear you - it’s crazy, and yes, I’m sure it will be vastly improved. I 100% agree with you!

There’s a general thing with Unreal that a wise developer said to me recently - treat the latest release as bleeding-edge. It’s there for the people who want to jump in and learn the newest features. Game/Movie dev studios in 99% of cases have not made the switch yet. You’re an early adopter, you’re going to find bugs, you’re going to find things that need to be improved. The people who immediately adopt 5.4 are expected to work with what they’ve got, and find solutions to the issues until 5.4.2 or 5.4.3 comes along. Like or not, this is a deeply technical, complex engine - using it does require you to learn constantly.

3 questions, I don’t want answers, just have a think:

  • Do I really need 5.4? Is something like motion matching so great today that I can no longer bear to be in 5.3?

  • I don’t know what you’re doing, but do you need to be using cinematic quality in the Editor? Best practice suggests that’s a “use to check out a specific view, then switch back to Epic or lower for routine work”. Likely doesn’t matter cos I’m getting the message on Epic too.

  • Do you really need to use Virtual Textures? If you’re build out a game landscape, sure, they’re great, but it’s something to enable when you’re nearly done and heading towards shipping.

Again, like everything, it depends on your needs - if you need the RVTs, if you need to be using 5.4, then you have your choices - disable the auto-grow, or spend 10 minutes setting up a fixed pool.

Whatever you decide, I wish you well and good luck!

3 Likes

I do high end cinematics, so I do need VTs, I never switch to Cinematic scalability, always use Epic, which is default.

Basically I am using engine out of the box except turning on VTs at the start of each project. I should not ever come in contact with this. There should just be a simple constant value, of how much GPU memory I am willing to dedicate to VT pool, ideally a percentage of max GPU VRAM, and Engine should intelligently distribute the memory under the hood, based on how much which pool needs it. By default it would be set to let’s say 30%. :slight_smile:

1 Like

You don’t need to manually increase it, that’s what the notification is there for.
It notifies you the transient pool has been increased by size because it was necessary. IF you want to keep this size, copy it to the persistent pool.

Note: “IF” - There are probably situations when you do NOT want to make the persistent pool this size, e.g. if it’s a temporary increase caused by some temporary changes.

You have to do nothing if you do not want to have a persistent pool. If, the only thing you have to do is to adjust it to the max size you want.

The notification is a bit stupid because it notifies you with each update, but what ever. Once the transient pool has reached the max usage, it will stop.

There’s no chance of doing nothing about it when the notification is so frequent the bottom right part of your editor UI is constantly covered.

Second, why in the world would I, as a user even have to know about it? There’s like dozen of other pools in the engine that get resized dynamically without a single UI message, having some hard limit in megabytes dug somewhere deep in the project settings or hidden under some cvar.

Third, the useless message just tells you to go to preferences and do what should be done automatically yourself, but then you arrive in the right section of preferences and see cryptic parameters like all the texture formats, min tile size, max tile size, and three megabyte sizes.

If you are an average user, you have no idea what the implications of modifying these values are, you don’t know if they are correctly set up, and to know what you are doing, you’re in for at least a week of learning about rendering engineering.

Bottom line is that something so deeply technical really should not be expected to be interacted with by an average engine user. So the fact this doesn’t work right out of the box using some heuristic is really embarrassing UX failure.

1 Like

Had the same annoying popup after upgrading to 5.4.1, so I copied transient settings to fixed settings, but it was still popping up.

Transient size was 71 megabytes, so i set all the sizes to 128 megabytes to be on the safe side and the message doesn’t popup anymore

this is just ridiculous, would be a simple setting like “show virtual texture pool warning / changes”, disable that no more popup.

It is like 30sec development to do an if before calling the .show() of whatever component is doing that.

But I guess they do that for us

Thanks for the great guide!

Thank you! It honestly doesn’t take too long to work around

I think we need a response from UE5 team on this topic

1 Like