Our games are for mobile / tablet, so it’s been a common experience to have a producer or engineer at demand that we reduce the size of or textures/meshes/animation
in order to squeeze into older/crappier devices. But our game is getting uglier and uglier, and we want some solid arguments for push back.
In addition to art, are there other common memory bloats in a game?
Or is this too case by case specific?
It’s certainly possible that there’s a memory leak in the game’s code that’s bloating memory usage, but that should be pretty easy to diagnose.
The other thing to look into is texture compression. If you’re loading in a bunch of uncompressed textures, that’ll bloat more than if they’re properly compressed.
In my experience, though, the biggest culprit of loaded memory is textures, then meshes, then animation.
Also when looking into textures, double check your GUI framework, and depending on the engine and/or platform you might have issues if any of your textures are non-power-of-two, or non-square (this one bit me real hard recently with a UE4 iOS project).
Textures and audio are usually the worst offenders. The amount of memory on the box is a hard limit, so once you hit it you have to start reducing. OTOH The key pushback is making sure that the game is not needlessly dependent on static loads: if you have some kind of audio and/or texture streaming you can generally have much higher quality assets.
Not all engines are good at streaming – it’s something that Unity for example is not good at out of the box – but you can be much more selective about how you manage your assets if you have a good streaming plan.
You should definitely invest in a MIP level visualization shader. A lot of the time artist think they are losing detail because you’ve thrown away big mip levels when the real problem is that the auto-generate mips down the chain are just poorly filtered and look muddy. It’s very useful to be able to see what mip of a texture actually gets used on screen – a lot of time throwing a way big mips is painless because they never get displayed