Fixing ‘Texture Streaming Pool Over Budget’ in Unreal

Although the warning ‘TEXTURE STREAMING POOL OVER BUDGET’ (including a value in mebibytes) uses intimidating red text and is written in shouty capital letters, it’s not something to panic over. This is a very common warning that appears when the textures you currently have loaded are using more memory than they’ve been allocated, and as a result the engine is automatically decreasing their resolution to compensate.

There are two productive ways to fix the ‘Texture Streaming Pool Over # MiB’ warning message. The first is to increase the size of your texture pool either via the console or your project’s configuration files. The second option is to optimize your levels/materials to keep the size of your textures down.

Disclaimer

There are a number of unproductive ways to clear this error as well. If you absolutely must, in a pinch you can enter the command DisableAllScreenMessages into your console and all of these warning messages will be suppressed.

Just keep in mind that this isn’t actually solving anything and those warnings (and the actual problem) will still be there the next time you open the editor. Don’t sweep dust under the carpet. Fix it properly!

Don’t suppress your problems. Believe in yourself!

What is texture streaming?

No matter what kind of game you’re making your project is going to have textures, and if you’re making something anywhere close to substantial you’re going to have a lot of them. Even if you’re not using 4k texture maps for every single asset the amount of data these textures contain adds up really fast. It’s a lot of information to keep in memory at any one time.

This is where Unreal’s texture streaming system comes in. It uses a combination of clever techniques to dynamically load textures in and out as required to improve the performance of your game. It uses a level-of-detail optimization method called mipmapping to increase or decrease the resolution of your textures on the fly, ensuring that the least amount of texture data is loaded at any given time without sacrificing visual fidelity.

A texture with its associated mipmap chain, each iteration being half the size of the one preceding. The texture streaming system will determine which mip level to load based on its size on screen, among other considerations.

Using mipmaps will make your textures take up 33% more space on disk, but less data will be in video memory at any one time. Mipmaps also make your textures look a lot better when viewed at oblique angles or at a distance, like in this example.

Streaming data (including mipmap information) is precomputed as part of the Build all levels procedure. It can be generated on its own by selecting Build Texture Streaming from the Build menu.

Unreal Engine 4

Unreal Engine 5

The texture streaming system has been designed to make your textures look as good as possible at any distance with the least possible overhead. Moreover, it is highly customizable to fit your project’s performance specifications with a wealth of configurable options.

You can wholesale disable texture streaming via your Project Settings, but I have no idea why you’d want to!

You can find this setting under the Rendering subsection.

What is the Texture Streaming Pool?

The TEXTURE STREAMING POOL is a virtual storage container for all of the textures that are currently being drawn by the streaming system. It is composed of several different allocations of VRAM that operate together to make sure textures can be streamed in and out safely.

You can enter the command stat streaming into your console to see a comprehensive breakdown of the texture streaming system’s memory allocation.

You can see each pool’s maximum capacity in the far right column of the Memory Counters section. By default the size of the texture streaming pool is conservatively set to 1000 MB.

Just in case…

It’s worth mentioning that the texture streaming budget doesn’t just encompass the textures in your game levels. It also includes any you will have loaded during the course of working on your project that session.

Sometimes a quick restart is all you need to clear the warning!

The Fix

Option A: Increase your texture streaming pool memory allocation

This is the quick and easy solution. If you increase the size of your texture streaming pool to encompass the maximum size of your texture data you’re all set. Of course, this is only advisable if your hardware (and your target spec) has that kind of memory to spare.

You can change the size of your streaming pool in the editor with the following console command, where # is the value you want to set in megabytes.

r.Streaming.PoolSize #

You can check that your change was accepted by using the stat streaming command.

r.Streaming.PoolSize 0

Don’t be tempted to set your streaming pool to zero to make the warning go away. This is telling the engine to assume an unlimited amount of VRAM budget, a luxury you definitely don’t have.

Your game will crash.

Check the bottom of this article for a quick and easy method of finding out how large your texture pool needs to be to meet your texture requirements.

Remember, like many config commands entered via the console, altering the size of the pool this way is only temporary. It will reset to the default value of 1000 whenever you reopen the editor. If you want this change to persist you’ll need to navigate to your project’s DefaultEngine.ini config file and add r.Streaming.PoolSize=# to the [/Script/Engine.RendererSettings] section. If it doesn’t exist you’ll need to create it.

You’ll know it worked on editor restart because there will be a line in the output log marking the change, and you’ll see it reflected in your stat streaming profiler.

That’s it. Problem solved, assuming you have a bunch of spare VRAM lying around.

If not, there is always…

Option B: Reduce your texture overhead

If you don’t want to raise the size of the pool to meet the demands of your textures, then you’ll need to reduce the amount of data your textures require. It’s one way or the other.

Texture & material optimization is a huge topic that we’re not going to deep dive here, but here are a few quick tips to help you on your way to reducing your texture overhead.

  • Reduce the resolution of your textures via the Maximum Texture Size value in your texture settings.
    It’s very common for artists to author textures at up to four times their anticipated use-case resolution as a contingency. This means there are often 4k textures floating around that would look just as good at a quarter of that size.
    Have a close look at your texture maps in the context of your level, and play around with reducing their resolution by half (and then half again if you can). You might be surprised at how little quality is lost for such a significant gain in performance.

Remember to keep this value power of two. A value of zero means the size is uncapped, and Unreal will match the resolution of the source file.

  • Check your compression settings! You’ll need to decide on a case-by-case basis as your texture compression settings will depend highly on how each specific texture is used.
    Going into detail on what each of these compression settings does is beyond the scope of this post, but you can start by checking out the official documentation here.
Your Guide to Texture Compression in Unreal Engine

I have since written a much more comprehensive guide to the Texture Compression Settings that Unreal Engine offers. Hope it helps!

  • Reduce or reuse your texture channels. Remember, most textures you’ll be working with have 3 channels (4 with alpha), and you may not be using all of them to full effect. Utilize texture packing where possible to combine multiple masks into one.
  • If you’re using static lighting then your lightmaps likely take up a huge amount of your available texture memory. Even medium-sized levels can have hundreds of lightmapped objects packed into several atlases. Where possible, keep your lightmap resolution at an appropriate minimum to reduce this impact.

How big does my texture streaming pool need to be?

Here is a quick tip for figuring out the minimum size in MB that your texture streaming pool needs to be to encompass your level’s texture data.

Input r.Streaming.PoolSize 1 into your console to set the size of your texture streaming pool to 1 MB. All of your textures will immediately be mipped out of existence, but this is okay. It’s just temporary!

As you navigate around your level you’ll notice the texture streaming pool over budget warning message will be updating to tell you just how over-budget you are. Zip around your level and pick out the highest number. That value (plus 1) should be your new minimum pool size.

Huge thanks to YouTuber OneUp Game Dev and their video on texture streaming for this tip!

Further reading

Thanks for checking out my article. I hope it’s helped you understand why the texture streaming system is such a vital part of the engine, and why that warning message can get so persistent.

If you’re interested in further information on texture streaming I absolutely recommend combing through Epic’s extensive documentation on both how it works and how you can best bend it to your will.

If you’re keen to learn more optimization tricks for textures, materials, and more; VFX extraordinaire Luos_83 has been collating those he has discovered in a document which you can read here. Super useful!

I am a technical artist from Adelaide, Australia. I created techarthub to share my knowledge and love for this industry. I hope you feel it too!

Welcome to techarthub

Hey there, I’m Nick!

Within these digital walls you’ll find a collection of guides and tutorials on a range of topics, as well as the assets, projects, and other resources I’ve created over the years.

Thank you so much for taking the time to look through my work.

I hope you find what you’re looking for!

Join the Community

Join the techarthub Discord Server, a community of technical art enthusiasts just trying to figure it all out together.

If you would like to support the creation of more techarthub content please consider becoming a Patron.

More from techarthub
A Technical Artist is an important member of a production who forges that vital link between engineering and art teams - but how?
A practical guide to Unity's units of measurement, why they are important, and how you can alter them to suit your project's needs.
An exploration of three different ways to create a hexagonal sphere in Maya.
A closer look at how to get the most out of Unity's diverse selection of project templates.

Related Posts

If you're a technical artist, animator, or visual effects artist working within Unreal Engine, you're going to love Animation Curves.
Exploring techniques for dynamically changing audio playback speed in Unreal Engine.
This beginner-level Unreal Engine 4 tutorial will show you how to make a simple Distance Measurement Tool using Blueprint.
Scroll to Top