Focused reference · Unreal Engine 5.8

Streaming and runtime virtual texturing

unreal-memory-streaming/references/virtual-texturing.md

Use Streaming Virtual Texturing (SVT) for large cooked textures/UDIMs when tile-level residency beats whole-mip streaming. Use Runtime Virtual Texturing (RVT) for GPU-generated/cacheable surface data such as landscape blending. Do not convert content solely because conventional texture streaming is poorly configured.

Physical pools

  • Page-table memory grows on demand and generally remains until all related content is released.
  • Each VT physical pool is a fixed-size LRU cache matched by format/tile configuration.
  • Configure serialized pools under Project Settings -> Engine -> Virtual Texture Pool.
  • Transient auto-grown pools exist only for the editor session; copy validated estimates into Fixed Pools for cooked builds.
  • If visible tiles exceed a matching pool, continual eviction produces low-resolution/flickering tiles.

Use stat virtualtexturing for update/upload cost and page-table counters; use stat virtualtexturememory for pool memory. Inspect each format/layer pool independently.

Larger pools reduce eviction but permanently reserve more GPU memory. Increasing upload limits/feedback resolution can reduce latency while increasing CPU/GPU/upload work. Tune a repeatable traversal and test camera cuts, fast motion, multiple views, and every device profile.

RVT low mips for large worlds may require far-away actors to remain resident. Bake/stream low mips when that trades runtime generation and residency for acceptable disk/streaming cost.