- Home /
I can't Rendering DirectionalShadow from SRP.
Hello.
I want to render with directional shadows. However, even if I use Shadowmap of DrawShadows, it is not drawn correctly. Regarding Shadowmap, we have confirmed that it is drawn by Frame Debugger. What are the problems with the following sampling methods?
Shader "SRP/ShadowCastObject"
{
Properties
{
_Color("Color", Color) = (1,1,1,1)
_SampleTexture("Texture", 2D) = "white" {}
[Toggle(SHADOW_RECEIVE)]_ShadowReceive("Receive Shadows", Float) = 1
}
SubShader
{
Pass
{
Tags { "LightMode" = "Opaque" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ SHADOW_RECEIVE
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float3 pos : TEXCOORD0;
};
struct v2f
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float3 pos : TEXCOORD0;
float4 shadowPos : TEXCOORD1;
};
float4x4 _ShadowLightVP;
UNITY_DECLARE_SHADOWMAP(_ShadowMap);
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.normal = UnityObjectToWorldNormal(v.normal);
//o.pos = o.vertex.xyw;
o.pos = (v.vertex);
return o;
}
float4 frag(v2f i) : SV_Target
{
float3 normal = normalize(i.normal);
float3 light = normalize(_WorldSpaceLightPos0.xyz);
float diffuse = saturate(dot(normal, light));
#if SHADOW_RECEIVE
float4 shadowProj = mul(_ShadowLightVP, i.pos);
shadowProj = UNITY_PROJ_COORD(ComputeScreenPos(shadowProj));
float shadow = UNITY_SAMPLE_SHADOW(_ShadowMap, shadowProj);
diffuse *= shadow;
//return float4(shadowProj.x * 0.5 + 0.5, shadowProj.y * 0.5 + 0.5, 0.0f, 1.0f);
//float2 uv = float2(shadowProj.x * 0.5f + 0.5f, shadowProj.y * 0.5f + 0.5f);
//return UNITY_SAMPLE_TEX2D(_SampleTexture, uv );
#endif
return diffuse;
}
ENDCG
}
Pass
{
Tags { "LightMode" = "ShadowCaster" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 vertex : POSITION;
};
float4x4 _ShadowLightView;
float4x4 _ShadowLightProj;
float4x4 _ShadowLightVP;
v2f vert(appdata v)
{
v2f o;
//o.vertex = UnityObjectToClipPos(v.vertex);
o.vertex = mul(_ShadowLightVP, v.vertex);
return o;
}
float frag(v2f i) : SV_Target
{
//return float4(1.0f,0.0f,0.0f,1.0f);
return i.vertex.z;
}
ENDCG
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Shadows being received by non-shadow collectors that are depth culled by a shadow collector. 1 Answer
Missing shadows on custom steppedAtten shader 0 Answers
Raymarching - bad shadows/light quality on fractals 0 Answers
Shadows in my rendered "Portal" Don't Render 0 Answers
Unity Shader Render Queue Causing Various Problems. 0 Answers