Unity Android compression – ETC2 vs. ETC1

I’ve been working on a Unity project for Android and iOS lately. For Android we had been using ETC2 for the texture compression. The ETC2 benefits were:

  • Better performance on devices where it’s supported.
  • Supports non power of 2 textures.
  • Works with all Unity UI canvas types.

The UI canvas support was particularly important to us as the project uses Unity UI extensively and almost entirely built with it.

Unfortunately it turned out that there are still quite a few modern, popular, low end devices that don’t support ETC2 (it’s supported on OpenGL ES 3.0 devices), like the Samsung J1.

When a device doesn’t support ETC2 the textures are uncompressed and because they are low end or old devices it increases the likelyhood that they will run out of memory when you load alot of assets in a scene. Not a good scenario.

Realistically this makes ETC1 the better choice for now as it’s supported by all devices. However ETC1 does come with its own pitfalls:

  • Doesn’t work with Unity UI Overlay Canvas types
  • Can’t be loaded from Resources with Alpha intact
  • Requires a packing tag to support alpha channel
  • Renders alpha channel seperately making packed sheets hard to preview.
  • Performance is not as good as ETC2, but this won’t matter as much for devices that support ETC2 as they should be capable of handling it since they are better devices.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.