In this lesson, you will learn how to leverage specific compression formats and streaming configurations to keep your mobile texture memory footprint within strict hardware budgets.
Texture Compression: Format Precision
On mobile hardware, bandwidth is your primary bottleneck. Using the wrong compression format doesn't just waste VRAM; it forces the GPU to work harder to decompress data on the fly. For Android (OpenGLES/Vulkan), ASTC (Adaptive Scalable Texture Compression) is the industry standard. It provides a superior balance of quality and size compared to legacy formats like ETC2.
In your Texture Editor, adjust the Compression Settings to match the asset’s function:
- Default (DXT/BC): Use only for desktop targets.
- UserInterface2D: Perfect for UI elements where you need high fidelity (RGBA).
- TC_Normalmap: Always use this for normal maps to ensure the engine packs the data into dedicated channels, preventing blocky artifacts that occur with standard compression.
Mipmap Streaming and Budgeting
Mobile devices suffer heavily from "texture thrashing"—when the GPU constantly swaps texture data because the memory pool is too small. To combat this, you must tune the Texture Streaming Pool. If your mobile target is 4GB of RAM, your streaming pool should generally not exceed 500MB–800MB to leave room for the OS and application overhead.
You can audit your current memory usage by running the console command r.Streaming.PoolSize 800. If you notice stutters, you may need to force lower-resolution mipmaps for distant objects by adjusting the Mip Gen Settings. For mobile, setting Mip Gen Settings to FromTextureGroup allows you to define global constraints via DefaultDeviceProfiles.ini:
[TextureGroup]
TEXTUREGROUP_World=(MinLODSize=1,MaxLODSize=1024,LODBias=0)
By capping the MaxLODSize to 1024 (or even 512 for background props), you prevent the engine from ever loading 2K or 4K textures into the pool, drastically reducing the pressure on the GPU bus and preventing frame drops during high-intensity scenes.
Key Takeaway: Prioritize ASTC compression to reduce bandwidth and use Mipmap bias settings in your Device Profiles to enforce a hard memory ceiling on your texture streaming pool.