Used this article but simplified it to 2D circles, skipped torque calculations and used compute shaders instead of vertex + fragment + depth test
No optimizations done, stats in editor on my laptop RTX 3060:
- 250k particles - 250+ FPS
- 1M particles - 60+ FPS