Hi there,
Residency MipMap Bias and other virtual texture pool settings / setup are covered in this documentation.
From the docs:
“If a pool has been configured with the bEnableResidencyMipMapBias setting enabled, a mipmap bias is set to reduce residency when it is oversubscribed. This prevents unwanted IO and screen flickering at the cost of rendering virtual textures with a reduced resolution.
This setting is useful if residency is very rarely oversubscribed and you don’t want to allocate memory for the rare chance this could happen. The on-screen message for oversubscription includes any mipmap bias that is being applied.”
Basically, with this enabled, the engine will start dropping the texture quality when a pool is almost full. This allows the engine to evict the higher quality mips (that are no longer needed due to the MipMap bias), and keep the pool from completely filling up and causing IO trashing as tiles are constantly evicted / loaded.
Only the mip levels that are actually sampled in the shaders (the MipMap bias is applied here) will get streamed into the pool. Generally the system will not load mips outside those requested.
The scalability settings in BaseScalability.ini are just the defaults. You can create your own scalability settings which set the r.VT.poolSizeScale CVar, at each scalability level, to values appropriate for your project. You can do this by creating a DefaultScalability.ini config file in your projects Config directory, see here for details.
In terms of the relation to screen resolution, picture it like this: if you have an 8k display and an 8k texture, and the texture you’re looking at fits perfectly to the display, then you need to stream in all its mip 0 tiles. However, if I only have a 4k display, then I only need to stream in all the mip 1 tiles (the 4k mip tiles). If your tile size is 256x256, then the 8k display requires 1024 tiles to be loaded, while the 4k display only requires 256 tiles to be loaded. If you go closer to the object, you would have to steam in some of the mip 0 tiles on the 4k display. However, a bunch of tiles will also no longer be visible, so the requirement of roughly 256 tiles will be maintained. This is because we only need 256 texture tiles to fill a 4k display.
Other than r.VT.MaxAnisotropy, there are no settings in the BaseScalability.ini that affect virtual textures, but, as I mentioned above, you can create your own scalability settings to configure this. You can also override the scalability settings per platform as described here for Android (but the same applies to other platforms).
Regards,
Lance Chaney