Download

UE4.26 Runtime Virtual Texture - Not refreshing correctly on material parameter change

Hi,

I am using a RVT on the landscape material. The material can add snow based on a parameter from a material parameter collection. If I don’t use an RVT the snow is layered onto the material correctly as it transitions from no snow to all snow. However, after changing the landscape to use an RVT, the snow is now not correctly refreshed in realtime. If I rotate the camera away from the current pixels it seems to update them and when I turn back around some of the pixels are refreshed but not all correctly.

Here are some images of the error:
This is how the landscape starts

This is after instantly adding all snow (shows patches incorrectly)

This is after turning around

I then turned off the snow and expected it to change back to the first image (more patches again)

This is after turning around again

I don’t understand why the material is not refreshed properly.

Any help would be appreciated :slight_smile:

Thank you.

Nobody tried adding snow to a RVT at runtime?

For anyone interested, the only way I could get the landscape to not look very patchy after changing a snow material parameter collection and have it totally update the material in the viewport was to “invalidate” the virtual texture asset using a blueprint.

Hi 3dev,

Thanks for this work around. I found that it’s ok for static switching but doesn’t seem suitable for animating season changes (due to a flash on RVT updates). Did you find this also?

George

I discussed this further with Epic. It seems the way to go about this is to add the snow function after the RVT-write (so after the RVT Output node). This keeps the dynamic part out of the RVT. I’ve had issues with the VT system on characters previously - it gets overloaded; even when using cards with a lot of VRAM to spare (for a myriad of reasons like D3D tile sizes being limited to 16K). So avoiding RVT for the dynamic parts (like snow) works well but I had to refactor materials to get snow at their base from MPCs rather than RVT lookups.