Shadow.hlsl 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "Uniforms.hlsl"
  2. #include "Samplers.hlsl"
  3. #include "Transform.hlsl"
  4. void VS(float4 iPos : POSITION,
  5. #ifdef SKINNED
  6. float4 iBlendWeights : BLENDWEIGHT,
  7. int4 iBlendIndices : BLENDINDICES,
  8. #endif
  9. #ifdef INSTANCED
  10. float4x3 iModelInstance : TEXCOORD4,
  11. #endif
  12. #ifndef NOUV
  13. float2 iTexCoord : TEXCOORD0,
  14. #endif
  15. #ifdef VSM_SHADOW
  16. out float3 oTexCoord : TEXCOORD0,
  17. #else
  18. out float2 oTexCoord : TEXCOORD0,
  19. #endif
  20. out float4 oPos : OUTPOSITION)
  21. {
  22. // Define a 0,0 UV coord if not expected from the vertex data
  23. #ifdef NOUV
  24. float2 iTexCoord = float2(0.0, 0.0);
  25. #endif
  26. float4x3 modelMatrix = iModelMatrix;
  27. float3 worldPos = GetWorldPos(modelMatrix);
  28. oPos = GetClipPos(worldPos);
  29. #ifdef VSM_SHADOW
  30. oTexCoord = float3(GetTexCoord(iTexCoord), oPos.z/oPos.w);
  31. #else
  32. oTexCoord = GetTexCoord(iTexCoord);
  33. #endif
  34. }
  35. void PS(
  36. #ifdef VSM_SHADOW
  37. float3 iTexCoord : TEXCOORD0,
  38. #else
  39. float2 iTexCoord : TEXCOORD0,
  40. #endif
  41. out float4 oColor : OUTCOLOR0)
  42. {
  43. #ifdef ALPHAMASK
  44. float alpha = Sample2D(DiffMap, iTexCoord.xy).a;
  45. if (alpha < 0.5)
  46. discard;
  47. #endif
  48. #ifdef VSM_SHADOW
  49. float depth = iTexCoord.z;
  50. oColor = float4(depth, depth * depth, 1.0, 1.0);
  51. #else
  52. oColor = 1.0;
  53. #endif
  54. }