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:
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.