浏览代码

Fixed 'ComputeShadowCoord' function to return correct screen-space coords

/LW-LowEnd
Andre McGrail 7 年前
当前提交
f4e2ebd4
共有 3 个文件被更改,包括 12 次插入7 次删除
  1. 2
      ScriptableRenderPipeline/LightweightPipeline/LWRP/ShaderLibrary/LightweightPassLit.hlsl
  2. 15
      ScriptableRenderPipeline/LightweightPipeline/LWRP/ShaderLibrary/Shadows.hlsl
  3. 2
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders/LightweightScreenSpaceShadows.shader

2
ScriptableRenderPipeline/LightweightPipeline/LWRP/ShaderLibrary/LightweightPassLit.hlsl


half3 vertexLight = VertexLighting(o.posWS, o.normal);
half fogFactor = ComputeFogFactor(o.clipPos.z);
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
o.shadowCoord = ComputeScreenPos(o.clipPos);
o.shadowCoord = ComputeShadowCoord(o.clipPos);
return o;
}

15
ScriptableRenderPipeline/LightweightPipeline/LWRP/ShaderLibrary/Shadows.hlsl


inline half SampleScreenSpaceShadowMap(float4 shadowCoord)
{
shadowCoord.xy = shadowCoord.xy / shadowCoord.w;
shadowCoord.xy /= shadowCoord.w;
half attenuation = SAMPLE_TEXTURE2D(_ScreenSpaceShadowMap, sampler_ScreenSpaceShadowMap, shadowCoord.xy).x;
// Apply shadow strength

inline real SampleShadowmap(float4 shadowCoord)
{
shadowCoord.xyz = shadowCoord.xyz /= shadowCoord.w;
shadowCoord.xyz /= shadowCoord.w;
real attenuation;

return 4 - dot(weights, half4(4, 3, 2, 1));
}
float4 ComputeShadowCoord(float3 positionWS)
float4 ComputeScreenSpaceShadowCoords(float3 positionWS)
#ifdef _SHADOWS_CASCADE
#ifdef _SHADOWS_CASCADE
#else
return mul(_WorldToShadow[0], float4(positionWS, 1.0));
}
return mul(_WorldToShadow[0], float4(positionWS, 1.0));
float4 ComputeShadowCoord(float4 clipPos)
{
return ComputeScreenPos(clipPos);
}
half RealtimeShadowAttenuation(float4 shadowCoord)

2
ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders/LightweightScreenSpaceShadows.shader


float3 wpos = mul(unity_CameraToWorld, float4(vpos, 1)).xyz;
//Fetch shadow coordinates for cascade.
float4 coords = ComputeShadowCoord(wpos);
float4 coords = ComputeScreenSpaceShadowCoords(wpos);
return SampleShadowmap(coords);
}

正在加载...
取消
保存