Optimizing texture atlases for mobile games

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.
Showing 1 of 1 servicesAll 242 services
Optimizing texture atlases for mobile games
Medium
~2 business days
FAQ
Our competencies
What are the stages of Game Development?
Latest works
  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    663
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    859
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    533

Texture Atlas Optimization for Mobile Games

Sprite Atlas in Unity is an understandable tool, but improper setup consistently adds 40–100 MB to mobile app memory and kills batching where expected. Typical mistake: developer enabled Sprite Atlas, combined all UI sprites into one atlas, satisfied — Draw Calls dropped from 80 to 12. But forgot to enable Include in Build in atlas settings. Result: atlas generated in Edit Mode, but in Release build each sprite loads as separate texture.

Or another story: atlas configured correctly, batching works, but atlas size 2048×2048 RGBA32 — that's 16 MB per texture without mipmaps. On device with 2 GB RAM, total UI atlas from 4 sheets consumes 64 MB. When switching languages (different character sets) — all 4 sheets in memory simultaneously.

Compression formats — most loss happens here

This is most underrated part of texture optimization. Developers often leave RGBA32 or RGBA16 for all textures without thinking.

ASTC — standard for modern mobile (iOS A7+, Android 2015+). Supports block compression with adjustable quality: ASTC 4×4 gives high quality at 8 bpp, ASTC 8×8 — acceptable quality at 2 bpp. For UI atlases use ASTC 4×4 or 6×6. For background textures without fine detail — ASTC 8×8.

ETC2 — fallback for Android without ASTC support. Supports alpha channel (unlike ETC1). Still relevant for old projects with minimum Android API level = 19.

PVRTC — formats for iOS (PowerVR GPU). Requires square textures with side in powers of two. If atlas 1024×512 — can't apply PVRTC without resizing.

Real case: casual puzzle game, Android+iOS. UI atlases occupied 128 MB in memory (RGBA32, 4 sheets 2048×2048). After switching to ASTC 6×6 for iOS and ETC2 for Android: 128 MB → 22 MB. On-screen quality — indistinguishable. UI scene load time dropped from 1.8s to 0.4s.

Atlas splitting strategy

Not all sprites in one atlas — path to problems. Right strategy:

Split by scene/screen. Sprites used only in menu — menu_atlas. Gameplay sprites — gameplay_atlas. Common elements (buttons, frames, icons) — common_atlas. Allows unloading unused atlases when switching scenes.

Atlases by usage frequency. Hotpath sprites (HP-bar, crosshair, timer) always in memory → core_hud_atlas. Rare screens (settings, shop) — unload via Addressables on screen close.

Atlas size limit. 2048×2048 — maximum for mobile. Some Android 4.4 devices don't support 4096×4096 for compressed formats. In Sprite Atlas Settings set Max Texture Size = 2048.

Duplicates in multiple atlases. Unity Addressables Analyze → Check Duplicate Bundle Dependencies detects sprites in multiple atlases. Means one sprite loaded into memory twice. Typical cause: shared sprite (currency icon) used in both menu and gameplay without explicit atlas specification.

Mipmaps for mobile atlases

For UI atlases disable mipmaps. UI renders in Screen Space, objects don't move from camera — mipmaps useless and increase texture size by 33%. In Texture Import Settings: Generate Mipmaps = false.

For game textures (3D objects, 2D background with scaling) — mipmaps mandatory. Without them aliasing and excessive texture fetch bandwidth.

Atlasing workflow in project

Use Sprite Atlas V2 (Legacy V1 outdated, but found in old projects). V2 supports Work with Packages and works correctly with Addressables.

Settings for mobile project:

  • Pack on Play Mode = Always Enabled (correct Preview in Editor)
  • Allow Rotation = true (tighter packing)
  • Tight Packing = true (less empty space)
  • Padding = 4 (prevents texture bleeding with ASTC)
Task scale Estimated timeline
Atlas audit + recommendations report 1–2 days
Rework atlas strategy (1 platform) 3–7 days
Full texture optimization for Android + iOS 2–4 weeks
Addressables integration + memory management 2–3 weeks

Cost calculated individually after asset audit and target platforms.