I have 2 prefab particle emitters which don’t use a lot of particles (max emmission 16 each) and when I put it on my iPhone 4 I get quite bad slowdown. They both use the same material. I’ve tried using different shaders - I didn’t get slowdown when using a non-transparent mobile shader so it must be the alpha blending on the shader. However I’ve tried all the mobile particle shaders, and Mobile > Transparent > VertexLit, and a lot of the non-mobile transparent shaders too and they all have the same problem. It seems odd that so few particles could cause such a bottleneck?
EDIT: My question is, which of the built in shaders is best for what I’m doing, on the platform on which I’m doing it?
Its probably has to do with overdraw and filtrate issues. Its a know fact that you want to avoid overdraw on iOS. Particles require quite some overdraw as well as being transparent which is also expensive. Given that you said the slowdown is worse on iPhone 4 which has the retina display, it is almost definitely overdraw related.
This page goes into some answers
- Avoid alpha, but if you have to, always use Alpha-Blended over alpha testing.
- Try to keep objects from overlapping, with particles this is difficult so you can do a few tricks.
- When your particle emitter gets right up next to the camera so that it takes up a majority of the screen you should try to:
- Release fewer particles. You will have to redraw everything behind them, so the fewer particles you have to draw, the better.
- Shrink the size of the particles for the same reason.
- Both these optimizations are really only necessary when you get up close to the particles because otherwise it looks unnatural.