TA logoThe Technical Artist
Home/Unreal Engine/Performance/Textures
perf 03
performance

Textures & Streaming

Workingguide~2 min readreviewed 2026-07-05

Textures are usually the biggest chunk of memory in a project. This is how to keep resolution, compression, mips, and the streaming pool under control.

3.1Resolution Discipline

From the master checklist: use lower texture sizes than artists want. Most scene assets never fill enough screen pixels to justify 4K. A 4K BC7 texture with mips is ~21 MB; the 1K version is ~1.3 MB - a 16x saving that's usually invisible in game. Set Maximum Texture Size per asset (source stays high-res), assign correct Texture Groups so platform device profiles can scale everything for free, and reserve 4K for hero assets the camera gets close to.

3.2The Four Settings That Matter

CheckRuleFailure mode
CompressionDefault for color, BC5 Normalmap for normals, Masks for packed data, BC7 sparinglyNormal maps as DXT1 shade blocky; uncompressed textures eat 4-8x memory
sRGBOn for color, off for data (normals, roughness, ORM)Lighting subtly wrong everywhere
MipsOn for world textures; needs power-of-two sizesNo mips = shimmer + streaming can't work + full-res always resident
Never streamOnly for UI and special casesNon-streaming world textures permanently occupy pool

3.3The Streaming Pool

Diagram of a texture mip chain from 2048 down to 128
fig 10 - the mip chain

Unreal streams mips in and out of a fixed pool (r.Streaming.PoolSize). stat streaming tells you required vs available. When required exceeds the pool, textures go blurry - the correct fix is almost always reducing texture demand (sizes, groups, mips), not raising the pool, because the pool competes with meshes, audio, and gameplay for platform memory. Non-power-of-two textures can't mip or stream; they sit in memory at full resolution forever.

3.4Auditing At Scale

Nobody checks 3,000 textures by hand. Property Matrix (select all -> right-click -> Asset Actions -> Bulk Edit) fixes settings in bulk; the Asset Registry queries them by script - dimensions, format, sRGB, mip count, LOD group. That's exactly the texture pass in the Asset Health Dashboard: every oversized, wrongly-compressed, non-power-of-two, or sRGB-broken texture, ranked by wasted memory.