Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. // DEFINES IN CASE WE USE GL OR DX
  3. #if OPENGL
  4.     #define VS_SHADERMODEL vs_3_0
  5.     #define PS_SHADERMODEL ps_3_0
  6. #else
  7.     #define VS_SHADERMODEL vs_4_0_level_9_1
  8.     #define PS_SHADERMODEL ps_4_0_level_9_1
  9. #endif
  10.  
  11.  
  12. // DEFINE GLOBAL VARIABLES BELOW
  13. matrix World;
  14. matrix View;
  15. matrix Projection;
  16.  
  17. matrix LightView;
  18. matrix LightProjection;
  19.  
  20. float1 MaxClippingDistance;
  21.  
  22. Texture2D ShadowMap;
  23.  
  24. sampler2D ShadowMapSampler = sampler_state
  25. {
  26.     texture = <ShadowMap>;
  27.     magfilter = LINEAR;
  28.     minfilter = LINEAR;
  29.     mipfilter = LINEAR;
  30.     AddressU = clamp;
  31.     AddressV = clamp;
  32. };
  33.  
  34.  
  35. ///
  36. /// SHADOW MAP METHODS
  37. ///
  38.  
  39. // VECTOR SHADER INPUT
  40. struct VS_Map_Input
  41. {
  42.     float4 Position : SV_POSITION;
  43. };
  44.  
  45. // VECTOR SHADER OUTPUT / PIXEL SHADER INPUT
  46. struct VS_Map_Output
  47. {
  48.     float4 position : SV_POSITION;
  49.     float4 position2D : TEXCOORD0;
  50. };
  51.  
  52. // VECTOR SHADER METHOD
  53. VS_Map_Output VSShadowMap(in VS_Map_Input input)
  54. {
  55.     VS_Map_Output output;
  56.  
  57.     output.position = mul(input.Position, World);
  58.     output.position = mul(output.position, LightView);
  59.     output.position = mul(output.position, LightProjection);
  60.     output.position2D = output.position;
  61.  
  62.     return output;
  63. }
  64.  
  65. // PIXEL SHADER METHOD
  66. float4 PSShadowMap(VS_Map_Output input) : COLOR
  67. {
  68.     float4 temp = saturate(input.position2D.z / (input.position2D.w));
  69.     temp.w = 1.0f;  // set visibility to 100%
  70.     return temp;
  71. }
  72.  
  73. ///
  74. /// SHADOW SCENE METHODS
  75. ///
  76.  
  77. struct VS_Scene_Input
  78. {
  79.     float4 Position : SV_POSITION;
  80.     float4 Normal : NORMAL;
  81. };
  82.  
  83. struct VS_Scene_Output
  84. {
  85.     float4 position : SV_POSITION;
  86.     float4 lightPosition : TEXCOORD0;
  87.     float4 position2D : TEXCOORD1;
  88. };
  89.  
  90. // VECTOR SHADER METHOD
  91. VS_Scene_Output VSShadowScene(in VS_Scene_Input input)
  92. {
  93.     VS_Scene_Output output;
  94.  
  95.     output.position = mul(input.Position, World);
  96.     output.position = mul(output.position, View);
  97.     output.position = mul(output.position, Projection);
  98.     output.position2D = output.position;
  99.    
  100.     output.lightPosition = mul(input.Position, World);
  101.     output.lightPosition = mul(output.lightPosition, LightView);
  102.     output.lightPosition = mul(output.lightPosition, LightProjection);
  103.  
  104.     return output;
  105. }
  106.  
  107. float4 PSShadowScene(VS_Scene_Output input) : COLOR
  108. {
  109.     float visibility = 1.0f;
  110.  
  111.     float depth = input.position2D.z / input.position2D.w;
  112.     float shadowDepth = tex2D(ShadowMapSampler, input.lightPosition.xy).z;
  113.    
  114.     //if (depth > shadowDepth)
  115.     //{
  116.     //    return float4(1, 0, 0, 1);
  117.  
  118.     //}
  119.  
  120.     //return float4(0, 1, 1, 1);
  121.  
  122.     return tex2D(ShadowMapSampler, input.lightPosition.xy);
  123.  
  124. }
  125.  
  126.  
  127. // DON'T CHANGE ANYTHING BELOW HERE!
  128. technique GenerateShadowMap
  129. {
  130.     pass Pass0
  131.     {
  132.         VertexShader = compile VS_SHADERMODEL VSShadowMap();
  133.         PixelShader = compile PS_SHADERMODEL PSShadowMap();
  134.     }
  135. }
  136.  
  137. technique ShadowScene
  138. {
  139.     pass Pass0
  140.     {
  141.         VertexShader = compile VS_SHADERMODEL VSShadowScene();
  142.         PixelShader = compile PS_SHADERMODEL PSShadowScene();
  143.     }
  144. }
  145.  
  146. // EOF MARKER
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement