I've been able to implement a fast approximated soft shadows algorithm into my engine by using a noise texture for jittered sampling and then a screen-space gaussian blur rendered into a quad. I then render this into my forward renderer by sampling using gl_FragCoord.xy/vec2(screenwidth,screenheight):
Looks plausible at first, but there are some artifacts which occur - such as light bleeding at intersecting edges:
There's also the light bleeding at the edges caused by the gaussian blurring of the screen-space shadow texture:
I have tried addressing the second issue by using edge detection to prevent gaussian blurring of the edges, which had very little effect.
The only idea I can think of for resolving the first issue is to use ambient occlusion. I wonder if there is a faster alternative?
Is there a way of rendering a shadowmap that fades after a certain distance away from the occluder? Maybe I can use this to hide the artifacts?