Advertisement
Guest User

Shadow Shader

a guest
Nov 26th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. cbuffer ConstantBuffer
  2. {
  3.     matrix worldMatrix;
  4.     matrix viewMatrix;
  5.     matrix projectionMatrix;
  6.     matrix lightViewMatrix;
  7.     matrix lightProjectionMatrix;
  8. };
  9.  
  10. struct VS_OUTPUT
  11. {
  12.     float4 pos : SV_POSITION;
  13.     float2 texCoord : TEXCOORD0;
  14.     float4 lightViewPosition : TEXCOORD1;
  15.     float4 worldPosition : POSITION;
  16. };
  17. VS_OUTPUT VS(float4 position : POSITION, float2 texCoord : TEXCOORD)
  18. {
  19.    position.w = 1.0f;
  20.  
  21.     VS_OUTPUT output;
  22.     output.pos = mul(worldMatrix, position);
  23.     output.pos = mul(viewMatrix, output.pos);
  24.     output.pos = mul(projectionMatrix, output.pos);
  25.     output.texCoord = texCoord;
  26.  
  27.     output.lightViewPosition = mul(position, worldMatrix);
  28.     output.lightViewPosition = mul(output.lightViewPosition, lightViewMatrix);
  29.     output.lightViewPosition = mul(output.lightViewPosition, lightProjectionMatrix);
  30.  
  31.     output.worldPosition = mul(position, worldMatrix);
  32.  
  33.     return output;
  34. }
  35.  
  36. Texture2D texture2d;
  37. SamplerState samplerState;
  38.  
  39. float4 PS(VS_OUTPUT input) : SV_TARGET
  40. {
  41.     input.lightViewPosition.xyz /= input.lightViewPosition.w;
  42.  
  43.     float4 ambient = float4(0.1f,0.1f,0.1f,1.0f);
  44.     float2 projectTexCoord;
  45.  
  46.     projectTexCoord.x = input.lightViewPosition.x / 2.0f + 0.5f;
  47.     projectTexCoord.y = -input.lightViewPosition.y / 2.0f + 0.5f;
  48.  
  49.     float3 normal = float3(0.0f,1.0f,0.0f);
  50.     float3 lightPos = normalize(float3(0.0f,3.0f,-3.0f) - input.worldPosition);
  51.  
  52.     if((saturate(projectTexCoord.x) == projectTexCoord.x) && (saturate(projectTexCoord.y) == projectTexCoord.y))
  53.     {
  54.        float depthValue = texture2d.Sample(samplerState, projectTexCoord).r;
  55.        float lightDepthValue = input.lightViewPosition.z;
  56.  
  57.        if(depthValue > lightDepthValue)
  58.        {
  59.            float lightIntensity = saturate(dot(normal, lightPos));
  60.  
  61.             if(lightIntensity > 0.0f)
  62.             {
  63.                return float4(1.0f,1.0f,1.0f,1.0f) * lightIntensity;
  64.             }
  65.        }
  66.     }
  67.  
  68.     return float4(0.0f,0.0f,0.0f,1.0f);
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement