something i discovered: emitters may have a limit to how much particles they can emit. in my code, i made it so that when the amount of particles reaches a specific number then a new emitter will be created. storing emitters and replacing them when they cant emit anymore is faster than making a new emitter every pixel.