Skip to content
The Technical ArtistArt. Code. Pipelines. Games.
perf 03
performance

Textures & Streaming

Workingguide~2 min read

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.

On this page Resolution Compression & Settings Streaming Auditing

3.1Resolution Discipline

From the master checklist: agree texture sizes with the artists based on gameplay views and memory cost. 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. Compare the result at the intended camera distance before reducing the asset’s limit. 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 colour, BC5 Normalmap for normals, Masks for packed data, BC7 sparinglyNormal maps as DXT1 shade blocky; uncompressed textures eat 4-8x memory
sRGBOn for colour, 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

Texture mip levels from 2048 to 128 pixels, halving width and height at each step; schematic sizes are not to scale.
fig 10 - mip dimensions halve at each step; schematic sizes are not to scale

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

Use scripts or bulk-edit tools when reviewing a large texture library. 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.