Hi. I created a realtime virtual texture using the method outlined in Epic’s recent video about environment production:
I wanted to see if I could apply the RVT technique to an ocean shader and read from it in a landscape material to basically determine when a wave was rolling over the land so I could modify the land as needed. In the Ocean RVT, I am just passing on the Absolute World Position (with material offsets) into the RVT WorldHeight output. The ocean material is tessellated.
Here is the what I am doing in the landscape material:
Here I am comparing the Z world space position in the landscape with the Z WorldHeight value in the RVT node. If the ocean z position is greater than or equal to the landscape z, then it is is colored pinkish. This sorta works:
This should not be happening:
As can be seen, as the wave rolls or recedes across the land, the RVT texture is not updating so the terrain color never updates.
Is this working as intended, do RVTs only output once?
I’ve had similar issues with RVT. I’ve found that you can fix runtime updates, by converting the RVT volume to a blueprint.
Could you please elaborate on that?
Oh my gosh you’re a hero; this has been such a pain.
For anyone else stumbling upon this, try doing the following:
- Create a new actor. When selecting its parent class, pick RuntimeVirtualTextureVolume
- Put your new BP in the level and set it up how you would any other RVT volume (for me I was using my landscape so I had to select my RVT for the virtual texture reference, select landscape for my bounds align actor, hit snap to landscape, then hit set bounds)
- Now, inside your new RVTVolume BP, you can call the “invalidate” node to refresh things after you’re done making major changes to your landscape (where things wouldn’t update before). Don’t do it on tick or anything… that would make a huge performance hit. In my case I only needed to do this when my weather or season updated in game so it was reasonable to invalidate the entire landscape.