Proper method to pack data into RVT normal z and get it back intact(ish)

So I’ve made an RVT for a landscape. I’d like to use the normal blue channel to pack in some extra data for my grass blend to use then derive the normal z after the fact. The question I have is what exactly does the RVT do to the normal z hidden transform wise when it brings it along?

The documentation says it does nothing (Runtime Virtual Texturing in Unreal Engine | Unreal Engine 5.3 Documentation), but I know this isn’t true because anything I drop into there disappears unless I remap it into -1 to 1 range. Trouble is, when I do that it blows the contrast through the roof. The closest thing to looking right I’ve come up with is below, but I’d like to get a 1 = 1 situation. If I knew what was being done to it I could undo it.

Here’s a splat texture dropped into basecolor:

Here’s what comes out when you put it through the z channel of the RVT normal:

Here’s what it does when you map it to -1 to 1 then go through the RVT normal then remap it back:


Here’s the result of the above code snippet (notice my lack of weird artifacts down in H8, but the huge contrast difference from the original:

There might be an issue as well where anything plugged into the Normal of the RVT also comes out as World Space Normals on the other side, so, that means you would have to transform into Tangent Space again before using it for whatever your purposes.

Not sure if that actually helps you but worth trying in your situation