We recently reached the 100MB upload limit from Apple and started investigation why our binary is that big. We have 3 RGBA-32bit sprite sheets (204820484*3) which totals to 48MB. (We can’t reduce the size anymore or use compression or a lower bit rate). What I understand is that the spritesheets need 48MB in memory when loaded, which is ok. But for some reason the binary assets file for these spritesheets built from unity is also 48MB in size. Doesn’t Unity compress (PNG) the sprite sheet, does it really store the file uncompressed? Is there any way to enabled at least PNG compression for the file itself?
No, the import flow is that you open image files, they get converted to textures, maybe compressed etc, then the final result is stored in the project… unless you use ‘resources’ to open png byte streams at runtime.
I think though like in the webplayer, they LZMA compress everything which helps a lot… but not in the standalone etc I don’t think.
If you want to reduce the total size, you need to use some of the lossy formats available on each platform. To make them look good you need to do a bit of extra work on the art though. Dithering is a technique that maps the existing colours into smaller colour space, while attempting to keep it looking the same. I’ve found this helps a lot in getting fancy 2D art looking the same, while being able to use PVRTC compression to reduce both the file sizes and in-memory footprint immensely. Lossy compression doesn’t have to be visually lossy if done right