I'm using weighted blended order independent transparency
You basically accumulate all transparent fragments and take a weighted average of the final color based on stuff like depth, opacity, and brightness. And you store how much coverage there is so you can blend in the opaque geometry based on that value (more transparent = less coverage = more of the background visible)