Is There a Way to Force or Accelerate Streaming for Specific SVTs

Hi,

We have a question regarding Streaming Virtual Textures (SVT) and their streaming behavior.

For traditional textures and meshes, we are able to proactively load content using functions such as:

  • PrestreamTexture()
  • PrestreamMeshLODs()

These allow us to ensure certain assets are fully resident before they are needed (for example, when opening a menu or triggering a cinematic).

However, for Streaming Virtual Textures, we have not found an equivalent mechanism that allows us to:

  • Explicitly request higher mip levels in advance
  • Force residency of certain VT pages
  • Or otherwise accelerate their streaming process

Questions

  1. Is there currently an API or supported workflow to prestream or prefetch specific SVTs?
  2. If not, is this a known limitation of the current SVT system design?
  3. Are there any plans to support a mechanism similar to PrestreamTexture() for SVTs in the future?

Any clarification on recommended best practices would be greatly appreciated.

Thanks!

[Attachment Removed]

Hi,

There are a few options here, though some of them are only available in 5.6 and 5.7.

In 5.4 there are several functions IRendererModule::RequestVirtualTextureTiles() that can be used to trigger preload of virtual texture pages. You can find a couple of usages of this in the code. One that might be interesting is in MakeHLODRenderResourcesResident(). That function tries to warm up virtual texture and nanite data used by HLODs before showing them.

In 5.6 for RVT there is URuntimeVirtualTextureComponent::RequestPreload() that can be used to trigger preload of runtime virtual texture pages in a given world bounds.

In 5.6 it is also possible to expose specific virtual textures assets to the regular texture streaming system using the “Virtual Texture Prefetch Mips” setting on the texture. With this we stream the selected mip count according to the regular texture streaming rules (based on screen size of associated rendered meshes). Functions like PrestreamTexture() will also apply. Care needs to be taken because if this setting is applied to too many textures, then you are likely to oversubscribe the virtual texture streaming pools.

For cinematic sequences we also have the Cinematic Prestreaming plugin. Up to 5.7 this was still experimental. But very recently a number of improvements have been made in the UE5 Main branch so that it will potentially be moved to Beta in 5.8. This system allows you to record the virtual texture (and nanite) page requests for early playback at runtime. This then prestreams the virtual textures before camera cuts etc.

Best regards,

Jeremy

[Attachment Removed]