Description

If a virtual texture physical pool becomes oversubscribed the current behavior is:
Log a one time only warning: ''Failed to allocate VT page from pool...'
Continue to evict the least recently used textures as normal, but now this will start to thrash the cache.
This leads to flickering in the final image as available VT pages rapidly change.

A better behavior would be to:
Apply a mip bias for virtual textures (either globally or only the ones using the affect physical pool).
Show some persistent message to the user if appropriate (but don't spam the logs!).

Steps to Reproduce

Modify the DefaultEngine.ini file for a project to give a small DefaultSizeInMegabytes value and to comment out any pool specific values.

[/Script/Engine.VirtualTexturePoolConfig]
DefaultSizeInMegabyte=4
;+Pools=(SizeInMegabyte=16, Formats=(PF_G16))

Observe the behavior on any map that uses a lot of virtual texturing.

Note that sometimes the flickering is bad, but other times it is less visible because we can reach a relatively stable state. A non visual way to check the behavior is to use

stat VirtualTexturing

With a static camera, if the value for Num Page Update isn't converging to zero but remains at a high level then this means the cache will be thrashing.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-109349 in the post.

4
Login to Vote

Fixed
ComponentUE - Graphics Features
Affects Versions4.26
Target Fix5.0
Fix Commit16724487
Main Commit16724487
CreatedFeb 24, 2021
ResolvedJun 21, 2021
UpdatedSep 19, 2021