All pastes #934654 Raw Edit

Untitled

public text v1 · immutable
·published 2008-03-08 23:57 UTC
rendered paste body
float4 PixelShader(PixelShaderInput input) : COLOR
{
    float2 ProjectedTexCoords;
    
    ProjectedTexCoords[0] = input.ShadowMapPos.x / input.ShadowMapPos.w / 2.0f + 0.5f;
    ProjectedTexCoords[1] = -input.ShadowMapPos.y / input.ShadowMapPos.w / 2.0f + 0.5f;
	
	float4 ColorComponent = tex2D(ModelTextureSampler, input.TexCoords);
	float DiffuseLightingFactor = DotProduct(xLightPos, input.Position3D, input.Normal);
    
    float4 result = {0,0,0,0};
    if ((saturate(ProjectedTexCoords.x) == ProjectedTexCoords.x) && (saturate(ProjectedTexCoords.y) == ProjectedTexCoords.y))
	{
		float len = input.RealDistance.x;
		
		float4 moments = tex2D(ShadowMapSampler, ProjectedTexCoords);
	
  		float E_x2 = moments.y;
		float Ex_2 = moments.x * moments.x;
		float variance = min(max(E_x2 - Ex_2, 0.0) + 0.00003f, 1.0);
		float m_d = (moments.x - len);
		float p = variance / (variance + m_d * m_d);
	    	
		float shadow = p;//max(step(len, moments.x), p);
		
		result = ColorComponent * DiffuseLightingFactor * xLightPower * shadow;
	}
	else
		result = ColorComponent * DiffuseLightingFactor * xLightPower; //Lo que está fuera de la visión de la luz
    
    return result;
}