Per-particle soft particles, I suppose

When it comes to soft particles implementations, I found many resources online that implement it merely by calculating the depth difference between the current particle and the “opaque” geometry (previously rendered in a framebuffer). This does not however account for collision of particles among each other. From the perspective of the camera, this would still result in an instantaneous and ugly “swap” as a particle moves in the direction of the camera through another particle (i assume that a particle is implemented as a quad facing the camera).

I’m looking for a way to make such transitions smooth as well. I thought about using imageLoad / Store to update a screen-sized texture for every new particle but this sounds painfully slow.