Dynamic shadows artifacts

Yeah, receiver plane depth bias, (which is used when r.Shadow.FilterMethod is set to 1) generally looks much better overall, but it is also prone to two major flaws. First being over-biasing on convex edges and under-biasing on concave edges. This is due to the nature of how partial derivatives with respect to screen-space work.

It looks like that:

https://image.prntscr.com/image/bTcXheRiRNCzRqH1tQJqCg.png

Sad part is that to completely cure these artifacts, you would need to add almost the same amount of flat bias, that would otherwise be sufficient enough to cure acne everywhere alone.

The second flaw of this biasing is that faces, facing away from the light would have completely wrong biasing. Is not a problem, but occasionally you may observe lonely unshadowed faces in shadow areas. This one can be and is dealt with by using only positive biasing and clamping the bias, but it reduces effectiveness overall.

There is no ultimate fix in existence, sadly. Only trade-offs so far exist.

I don’t like temporally unstable jitter myself. It does not have to be like that, when using PCSS.

Sometimes I wonder, why more shadow filtering options are not included in the engine by default, like it was the case with UDK. For example, I always used to prefer random sample placement, rather than box filter, which is now default for ordinary shadows.