Symptoms
- I am finding that my MIP maps seem to be missing when I sample them in Metal or GLES on an Apple iOS device.
Cause
The issue you're finding is as designed. On iOS, GLES gets clamped (GL_TEXTURE_MAX_LEVEL=3), which prevents looking past the fourth MIP level in compressed Textures. This is due to the minimum MIP size being limited to 16 pixels by the driver. This doesn't occur on Metal, but has been capped by Unity to make functionality consistent.
Resolution
To get round this, you can switch to a non-PVRTC form of compression (Compressed and Crunched both use PVRTC).
This isn't the case if you use 16-bit or 24-bit (true color) for your Texture compression. This is will come with a larger memory footprint, but will behave as you expect.
More Information
For more information, consult the following documentation:
- CG Shader texCUBElod reference
- Texture importer override documentation
- Texture importer documentation