I know how shadow mapping works but I am not getting the cause of shadow acne! Can anyone tell me cause of shadow acne in a simple way and how is it related to depth map resolution?
2 Answers
Image 1: A bad case of shadow acne. (Synthetic and a bit exaggerated)
Shadow acne is caused by the discrete nature of the shadow map. A shadow map is composed of samples, a surface is continuous. Thus, there can be a spot on the surface where the discrete surface is further than the sample. The problem does persist even if you multi sample, but you can sample smarter in ways that can nearly eliminate this at significant cost.
Image 2: A side cutaway of a shadow function and its discrete samples.
The canonical way to solve this is to offset the shadow map slightly so the object no longer self shadows itself. This offset is called a bias. One can use more smart offsets than just a fixed value but a fixed value works quite well and has minimal overhead.
Image 3: Shadow function biased (offset) forward.
-
$\begingroup$ And this discrete nature of depth map is created because of floating point precision. Right? $\endgroup$ Commented Mar 16, 2016 at 20:12
-
1$\begingroup$ No its created because images are discrete as in have only one value for a area that varies. $\endgroup$– joojaaCommented Mar 16, 2016 at 21:00
-
$\begingroup$ Images are different in camera and light space? $\endgroup$ Commented Mar 16, 2016 at 21:04
-
$\begingroup$ Ok is that zigzag line represents depth map? $\endgroup$ Commented Mar 17, 2016 at 14:14
-
$\begingroup$ It represents the function of the depth map, the dashed lines represent the pixel samples of the depth map. $\endgroup$– joojaaCommented Mar 17, 2016 at 14:16
As an addition to the answer of joojaa: Using a bias to offset the shadow function does indeed solve the problem with shadow acne, but it can introduce an additional problem: Peter Panning
As you see in the picture on the left the shadow is disconnected from the shadow casting wall. This gives the impression that the geometry hovers over the ground (just like Peter Pan can hover, hence the name Peter Panning).
To solve this problem you have to use "thick" geometry that has a volume and then render the shadow map using the back-faces. If the offset is smaller than the thickness of the geometry there will be no Peter Panning.
Both images are taken from this tutorial where you can also learn more about how shadow mapping works, how shadow acne is created and solved and what Peter Panning is.
-
$\begingroup$ One can also be more clever and render mid distance maps. $\endgroup$– joojaaCommented Mar 17, 2016 at 14:18
-
3$\begingroup$ I would have thought it's called Peter Panning because some films depict Peter Pan's shadow as having a mind of its own and detaching itself from Peter. $\endgroup$ Commented Mar 17, 2016 at 14:27
-
$\begingroup$ @MartinBüttner Well, yes. That seems to be a sensible reason to call it that way. The tutorial I refered to uses the explanation that I gave. $\endgroup$ Commented Mar 17, 2016 at 16:12