Description

The logic for selecting a page table texture in FVirtualTexturePageTable::Initialize() uses the indexing for texture layers (index 0-7) to fetch from the page table textures (index 0-1).
All RVT formats are 3 layers or less and use a single page table texture which may be packed to a single channel or not depending on "Enable packed page table setting".
This leads us to always find a null page table texture for texture layers greater than 0, so that we fail to sample those correctly.
A quick fix that happens to cover most cases would be to always force PageTableIndex=0 in this function.
A further thing to fix is to handle the case where "Enable packed page table setting" is off, and account for this in PCGVirtualTextureDataInterface.ush where we would need to sample different channels in the sampled VTPageTableResult.
It could also be worth looking at optimizing the current common case where we are sampling the same page table texture and location multiple times (once for each layer).

Steps to Reproduce

Set up a PCG graph which samples an the Normal from an RVT with format ERuntimeVirtualTextureMaterialType_BaseColor_Normal_Specular.
Observe that the result is incorrect.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-357664 in the post.

0
Login to Vote

Unresolved
CreatedDec 11, 2025
UpdatedDec 12, 2025
View Jira Issue