The 3D Handbook
Key term

Texture streaming

Loading only the mip levels each texture needs for the current view, within a memory budget; how Unreal and Unity do it, the pool size and mip bias settings, why over-budget scenes go blurry, what cannot be streamed, and how artists keep streaming healthy.

texturingoptimisationperformanceengines

Texture streaming loads only the mip levels each texture needs for what the camera can see, and keeps the rest on disk. A crate across the room needs its 512 × 512 level; the same crate at your feet needs the full 2048. Unity describes the goal as limiting "the size of textures in GPU memory" by transferring only "some mipmap levels per texture from disk to the CPU and the GPU" (Unity Manual: Introduction to mipmap streaming).

Streaming allows open worlds to fit in memory. It also explains why a scene can suddenly turn blurry when it holds more texture than the budget allows.

Four columns, each showing the mip chain of the same crate texture as stacked bars. At 2 metres all levels are loaded, 2048 squared, 5.3 MiB. At 4 metres the top level is dashed, meaning left on disk, 1024 squared, 1.3 MiB. At 8 metres two levels are left on disk, 512 squared, 341 KiB. At 16 metres three, 256 squared, 85 KiB. A note says that over budget the streamer drops more top mips everywhere and the scene turns blurry.
Each doubling of distance halves the needed resolution and quarters the memory. Memory figures for a BC7 texture with its remaining mip chain.Diagram by the handbook author

#How it works

For each texture, the engine works out from the camera which mip level is enough, and loads that level and everything below it; Unity "automatically calculates and loads mipmap levels only up to a specific level" (Unity Manual: Introduction to mipmap streaming). Each step down halves the resolution and quarters the memory, so the savings are large: dropping one level from a 2K texture saves 75% of it.

Then the budget is applied. Unity "uses lower mipmap levels if higher resolution mipmap levels don't fit in the memory limit you set" (Unity Manual: Introduction to mipmap streaming), and caches levels on the GPU "to avoid repeatedly loading mipmap levels from disk" (Unity Manual: Introduction to mipmap streaming). In Unreal, r.Streaming.PoolSize sets "The pool size in MB available for textures in the engine" (Unreal Engine documentation: Texture Streaming Configuration). When the wanted textures do not fit, Unreal can give each texture its own mip bias, "ranging from 0 to MipBias, depending on the budget computation" (Unreal Engine documentation: Texture Streaming Configuration).

Hugh Chew's video Your Textures Are Killing Performance, Here's Why walks through streaming alongside VRAM, compression and channel packing in UE5, aimed at artists (YouTube: Your Textures Are Killing Performance, Here's…).

#Streaming settings

Unreal Engine (console variables, set per platform) (Unreal Engine documentation: Texture Streaming Configuration):

  • r.Streaming.PoolSize: the texture budget in MB. NeverStream textures also live in this pool.
  • r.Streaming.MipBias: "a global mip bias used to prevent the streamer from loading the biggest mips for each texture". A cheap way to build a lower quality setting.
  • r.Streaming.Boost: "a global boost affecting the 'wanted' resolution of textures".
  • r.Streaming.FullyLoadUsedTextures: "stream all used textures to their max available resolution", useful for cinematics and screenshots.

Unity (per texture and per project):

#What does not stream

Some textures are always loaded in full, and they take up part of the budget:

#Further reading and watching

An artist-level overview of how streaming, mipmaps and texture memory fit together in UE5. Watch on YouTube

Related: texture formats, compression and mipmaps, mipmaps, performance and profiling, virtual texturing.

References

  1. Unity Technologies · Introduction to mipmap streaming · Unity Manual (6000.2) · docs · accessed 2026-10-21
  2. Epic Games · Texture Streaming Configuration · Unreal Engine documentation · docs · accessed 2026-10-21
  3. Hugh Chew · Your Textures Are Killing Performance, Here's Why · YouTube, 2026 · video · accessed 2026-10-21
  4. Unity Technologies · Default texture import settings reference · Unity Manual (6000.2) · docs · accessed 2026-10-21
  5. Unity Technologies · Optimizing GPU texture memory with mipmap streaming · Unity Manual (6000.2) · docs · accessed 2026-10-21
  6. Epic Games · UTexture2DArray (API reference) · Unreal Engine documentation · docs · accessed 2026-10-21
  7. Stephane Etienne (High Moon Studios / Activision) · Large Scale Terrain Rendering in Call of Duty (Advances in Real-Time Rendering 2023) · SIGGRAPH 2023 Advances in Real-Time Rendering in Games, 2023 · talk · accessed 2026-10-21

Last updated 2026-10-22