How can I use Streaming Virtual Texture in projects with MANY/MASSIVE textures without blurry them

Hi Everyone. I was recently enabling Streaming Virtual Texture in my project which has about 20k textures(UI textures not included) in it. However, these virtual textures got blurred in runtime. More informations are as follows:

  1. When typing r.VT.Residency.Notify 1 in console, There willl be yellow colored warning information saying that “VT Pool [DXT1] is oversubscribed. Setting MipBias 0”;
  2. When typing r.VT.Verbose 1 in console, there will be many output log says that “Space 0, vAddr 0@0 is not allocated to any AllocatedVT but was still requested” and “VT dropped -XXX loaded requests”. “-XXX” is a negative integer number.
  3. Camera is not moving when I try the above operations.
  4. I have tried to adjust the fixed pool and transient pool settings in editor and packaged builds but still get a blurred result.
  5. I did not change the Tile Size Setting of Virtual Texture in Project Settings. So I am still using the default setting.

So here are my questions:

  1. Are there any documentations or slides which talk about the insides of Streaming Virtual Texturing of Unreal Engine.
  2. How about increase the Tile Size Setting, cause I feel like the virtual page might not be enough.

It will be a great help if anyone know something about this. Many Thanks!!!

I think you might be having texture streaming pool error, which would be visible written red on your viewport.

Most probably something like this :

If yes then type “r.Streaming.PoolSize” in your console command and by default it should be 1000 if you’ve not changed anything, then increase it up to 3000 or 4000 but it will increase the use of your performance.

@malik_217 Hi, Thanks for your reply. So I’ve tried this already, but still not working. What you mentioned will work if I use regular texture(not Streaming Virtual Texture) because before I enable VTs for my textures, they will get blurred if “r.Streaming.PoolSize” is small. So Streaming VTs has different pools I guess.

Maybe try lowering resolution of your textures, like you might be having 4k or 8k textures for many tiny things in which it won’t matter that if it is 2k or 4k.

So try lowering those, that might help.

I wrote this for offline rendering but it could be helpful here.

r.Streaming.PoolSize will not affect Virtual Textures, as they have their own pool.

@comlys Great Post, THANK U! I managed to fix my issue by change the virtual texture tile size from the default 128x128 to 64x64 and repackage my project, the blurry textures are gone. Now I’ve come to another problem. So I understand that there comes a “Virtual Texture Tax” but I wonder if there is some way which makes this “Tax” low and gives much more quicker responses when camera moves around the scene. Meaning that the engine can streaming as quickly as possible when camera zooming while keeping relatively low performance costs. I will continue digging the CVars and other docs.

I would make sure that the pool size is configured as appropriately as possible. That should hopefully allow you to be optimized with any possible re-processing.