- Home /
Getting depth value from Shadow map in shader
I am trying to modify Internal-ScreenSpaceShadows.shader
and to achieve what I want, I need to be able to read the actual depth values from the Shadow map, rather than just doing depth testing to see if it is in shadow or not.
As I am using DirectX11, the shadow map that is defined in Internal-ScreenSpaceShadows
is as follows: UNITY_DECLARE_SHADOWMAP(_ShadowMapTexture)
where #define UNITY_DECLARE_SHADOWMAP(tex) Texture2D tex : register(t15); SamplerComparisonState sampler##tex : register(s15);
. The SamplerComparisonState
allows it to do hardware PCF which returns a value, either 0 or 1, if is being occluded or not, however I am trying to sample the actual depth value instead.
I have tried:
(coord is a float4)
tex2D(_ShadowMapTexture, coord.xy) -> Error
tex2Dproj(_ShadowMapTexture, coord) -> Error
_ShadowMapTexture.Sample(sampler_ShadowMapTexture, coord.xy) -> Error
_ShadowMapTexture.Sample(sampler_ShadowMapTexture, coord) -> Error
I have also tried making a separate sampler2D and Texture2D (with SamplerState sampler) and then using command buffers to blit the current shadowmap to that texture, but it only gives me a depth of 0 (all black). However, if I blit the shadowmap into a seperate Texture2D and then use
UNITY_DECLARE_SHADOWMAP(_ShadowBlit); _ShadowBlit.SampleCmp(sampler_ShadowBlit, coord.xy, coord.z)
it then works because it is using PCF. Does anyone know how to get the actual depth value from the shadowmap? Any help will be greatly appreciated
Your answer
Follow this Question
Related Questions
Shadows being received by non-shadow collectors that are depth culled by a shadow collector. 1 Answer
How to prevent holes in shadows without generating Shadow Acne? 1 Answer
Accessing other points in shadow map from shader 0 Answers
How to correctly sample a shadow map from a render texture? 1 Answer
Transparent objects and shadow 0 Answers