updateParticles function needs to be optimized is called every frame and is the bottleneck.
It made my CPU-fan go brrrrrrrr
a lot of calculations, on each frame, for many instances. this is not a rendering issue, but a CPU issue
when i set segments is 10 ,10k instance ,the fps is 60
Funnily enough you are GPU bound and even more vertex bound which is really rare
I would recommend to reduce the number of segments on your sphere. cause 500 generates 3024048 vertices * 500 = 1 512 024 000 vertices to process which is A BIG LOT !!!