Alternatives to PVRTC on iOS

Most of our content is 2D graphics.

PVRTC looks terrible most of the time.

16 bit looks decent only sometimes, if there are no gradients.

Truecolor (32 bit) is huge.

Therefore, in the past we had used ETC2 on almost everything. We used it on both Android and iOS.

ETC2 is NOT supported by hardware in iOS and various Android devices, and therefore was decompressed by the CPU at runtime.

We completely understood this, but chose it anyway because it would decrease our file sizes a TON!

Now Unity has decided to take this away from us. Since 5.2.2p2, in editor if you select ETC2 while on the iOS build platform, your compression choice is forced to PVRTC.

What can we do?! PVRTC makes our graphics look terrible, yet without it, the app size is HUGE.

I have filed bugs, started various threads, with NO answer from Unity. At least give us an alternative…

1 Like

I’m facing the same problem and there is no good news here.

I’d tell you to toss a few votes up on this feedback item supporting other texture storage formats but it was asked for 5 years ago and already has decent support so there must be some bigger reason why they’re not implementing it.

What can we do?! PVRTC makes our graphics look terrible, yet without it, the app size is HUGE.
If you haven’t read it already, I would recommend referring to our PVRTC & Texture Compression User Guide doc.

If you’re still having issues after following those recommendations, please share example images with us so we can investigate the artefacts: https://community.imgtec.com/forums/cat/powervr-insider-graphics/

A big problem is that unity only provides very limited options for PVRTC compression settings.
I can compress a file for ios myself to PVRTC in the pvrtextool with much better results (but longer time needed):
https://community.imgtec.com/developers/powervr/tools/pvrtextool/
The problem is that if the game is for multible platform its a pain to handle.
Normally i can do compression settings just a overwrite per platform, but with converting the files per hand unity sees it as an extra file and i can not assign the texture in the editor and test it…

If unity would allow more / custom settings for PVRTC compression (even if its blowing the conversion times by 10x ) i could get much better results without breaking the unity workflow.

Even if its a option to put a file into some unity folder with custom compression settings would be ok, just any way we can decide if we are ok with lower quality or can blow 5 minutes per image without any problem.

This needs to be integrated into Unity so that everything else in Unity (like sprite packer) can still works.

Unity needs some colour reduction tools built into the sprite packer, really. I use ImageAlpha to reduce things down to mobile-friendly levels and still maintain OK (sometimes even visually identical) quality on PVRTC.

1 Like

The user guide is over my head.

As mentioned in Unity PVRTC is either on or off, no extra settings. Do I need to prepare my graphics in a different way before importing to Unity?

Should pretty much all cases of 2D graphics be able to take advantage of PVRTC without significant quality issues? Gradients, transparency, etc?

In this example the content is made of of layer sprites (2D Toolkit). See how PVRTC messes up the gradient transparency?

True Color:

ETC2:

PVRTC:

That set was with premultiply turned ON in 2DToolkit. Here is a set with premultiply turned OFF. As you can see PVRTC does improve, however, there is still a terrible banding in the transparent gradient.

TrueColor:

ETC2:

PVRTC:

Hi dustinbahr,
I just try to reproduce this issue in PVRTexTool, But I can not reproduce it. I got the result as attachment.
Is that mean I can only reproduce it on device(and compress it in Unity)?

Thanks,
Kevin

![2521592–174819–$WLAW]5UUN1PISO~U1XZZ$4.png|1105x593](upload://3kIhUc35EpwOKYyHjH9FYVMhNaN.png)

ASTC, part of the OpenGL ES 3.x standard, is an alternative format, but it’s not (yet?) available for Unity iOS (Only Android at the moment). iOS 7.0 and above appear to support the format.

1 Like

I think ASTC also has hardware requirements (A8 and up), not only iOS 7+. It’s kinda bummer that we only get PVRTC for iOS, as it often looks like shit for (vector) sprite graphics. :frowning: I had to use uncompressed for iOS, whereas on Android I can happily use ETC2 in all but UI sprites.

Would appreciate an official response from Unity on this. Previous to 5.2.2p2 we could use ETC2 even though it had the downside of decompressing on load.

To those talking about other tools for compressing:

A) I don’t see why we should have to add another tool to our workflow.
B) The issues arise mostly with layered transparent PARTS of graphics, this is why you cannot reproduce my issues. Each character is made of layers parts.
C) We use 2D Toolkit to dice our images.

1 Like

Good for graphic, spend some load time.
from 2s → 7s