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.
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.
#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):
- Stream Mipmap Levels on each texture's import settings, and a Priority, where higher values win when the budget is tight (Unity Manual: Default texture import settings reference).
- A memory budget and camera settings in the project's quality settings (Unity Manual: Optimizing GPU texture memory with mipmap…).
#What does not stream
Some textures are always loaded in full, and they take up part of the budget:
- Terrain textures in Unity: "Unity doesn't support mipmap streaming on terrain textures", because terrain needs its highest levels at all times (Unity Manual: Introduction to mipmap streaming).
- Texture arrays, cubemap arrays and 3D textures in Unity (Unity Manual: Introduction to mipmap streaming). Unreal's Texture2DArray does have stream-in and stream-out functions, "Only usable if the asset is streamable" (Unreal Engine documentation: UTexture2DArray).
- UI and NeverStream textures in Unreal, which sit in the pool at full size (Unreal Engine documentation: Texture Streaming Configuration).
- Textures drawn without a mesh renderer (for example with
Graphics.DrawMeshNowin Unity), where the engine "doesn't have the information it needs to calculate a mipmap level" (Unity Manual: Introduction to mipmap streaming).
#Further reading and watching
Related: texture formats, compression and mipmaps, mipmaps, performance and profiling, virtual texturing.
References
- · Introduction to mipmap streaming · Unity Manual (6000.2) · docs · accessed 2026-10-21
- · Texture Streaming Configuration · Unreal Engine documentation · docs · accessed 2026-10-21
- · Your Textures Are Killing Performance, Here's Why · YouTube, 2026 · video · accessed 2026-10-21
- · Default texture import settings reference · Unity Manual (6000.2) · docs · accessed 2026-10-21
- · Optimizing GPU texture memory with mipmap streaming · Unity Manual (6000.2) · docs · accessed 2026-10-21
- · UTexture2DArray (API reference) · Unreal Engine documentation · docs · accessed 2026-10-21
- · 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
Pages that link here
- Checker maps Key term
- Mipmaps Key term
- Texture arrays Key term
- Virtual texturing Key term
- Texture memory (VRAM) Key term
Last updated 2026-10-22