Advertisement
Guest User

Untitled

a guest
Oct 17th, 2014
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. // shadow_add2.fx
  2.  
  3. #ifndef ZBIASOFFSET
  4. #define ZBIASOFFSET 1.0f
  5. #endif
  6.  
  7. const float shadowMapFilterSizeN = 1;
  8.  
  9. #ifdef USE_SHADOWMAP_CSMN
  10. #include "shadow_csm.fx"
  11. #else
  12. #ifdef USE_SHADOWMAP_DYNLMN
  13.  
  14. #else
  15. #ifdef USE_SHADOWMAP_STLMN
  16. #else
  17. const float4x4 ShadowMapViewProjN;
  18.  
  19. float4 GetShadowCoordsAndEpsilonN(float4 pWorld,float smdata)
  20. {
  21. float4 ProjCoords = mul(pWorld,ShadowMapViewProjN);
  22. ProjCoords.xy /= ProjCoords.w;
  23. return float4(ProjCoords.xyz,shadowMapEpsilon);
  24. }
  25.  
  26. #include "shadow_simple_common.fx"
  27.  
  28. #ifndef SMShadowedOutput
  29. #define SMShadowedOutput
  30. #define OutputShadowCoords(p)
  31. #define InputShadowMap(p,check) GetShadowMap(p,0,check)
  32. #endif
  33. #endif
  34. #endif
  35.  
  36. #endif
  37.  
  38. texture ShadowMapN;
  39. sampler2D shadowmapN = sampler_state
  40. {
  41. Texture = (ShadowMapN);
  42.  
  43. #ifdef USE_SHADOWMAP_NODEPTHN
  44. MAGFILTER = LINEAR;
  45. MINFILTER = LINEAR;
  46. MIPFILTER = NONE;
  47. #else
  48. #ifndef USE_SHADOWMAP_VARIANCEN
  49. MAGFILTER = POINT;
  50. MINFILTER = POINT;
  51. MIPFILTER = NONE;
  52. #else
  53. MAGFILTER = LINEAR;
  54. MINFILTER = LINEAR;
  55. MIPFILTER = LINEAR;
  56. #endif
  57. #endif
  58.  
  59. AddressU = Border;
  60. AddressV = Border;
  61. BorderColor = 0xFFFFFFFF;
  62. };
  63.  
  64. #ifdef USE_SHADOWMAP_PCFN
  65. #include "shadow_pcf.fx"
  66. #endif
  67.  
  68. #ifdef USE_SHADOWMAP_VARIANCEN
  69. #include "shadow_variance.fx"
  70. #endif
  71.  
  72.  
  73. float getShadowMapN(float4 pWorld, float smdata=0, float check=1)
  74. {
  75. #ifdef USE_SHADOWMAP_DYNLMN
  76. //return tex2D(shadowmapN, pWorld.xz/64+0.5f).x;
  77. float4 dynlm = tex2D(shadowmapN, pWorld.xz/64+0.5f);
  78. if (pWorld.y <= dynlm.g*2.5f )
  79. {
  80. return dynlm.r;
  81. }
  82. else
  83. {
  84. return 1.0f;
  85. }
  86. #else
  87. #ifdef USE_SHADOWMAP_STLMN
  88. return tex2D(shadowmapN, pWorld.xz/64+0.5f).x;
  89. #else
  90.  
  91. #ifdef USE_SHADOWMAP_NOISEN
  92. float x = pWorld.x * pWorld.z * pWorld.y *1000;
  93. x = fmod(x, 13) * fmod(x, 123);
  94. float dx = (fmod(x, 0.01) / 8) * shadowMapFilterSizeN;
  95. float4 ProjCoords = GetShadowCoordsAndEpsilonN(pWorld,smdata);//,dx); // wtf was that?
  96. ProjCoords.xy += dx;
  97. #else
  98. float4 ProjCoords = GetShadowCoordsAndEpsilonN(pWorld,smdata);
  99. #endif
  100. if ((ProjCoords.x<0)||(ProjCoords.x>1)||(ProjCoords.y<0)||(ProjCoords.y>1)) return 1;
  101. ProjCoords.z *= ZBIASOFFSET;
  102.  
  103. #ifdef USE_SHADOWMAP_VARIANCEN
  104. #ifndef USE_SHADOWMAP_PCFN
  105. // Variance, no PCF
  106. return getVarianceN(ProjCoords,check);
  107. #else
  108. // Variance + PCF
  109. //return getVariancePCF(ProjCoords,shadowMapFilterSizeN);
  110. return getVarianceN(ProjCoords,check);
  111. #endif
  112. #else
  113. #ifndef USE_SHADOWMAP_PCFN
  114. // No filtering at all
  115. #ifdef USE_SHADOWMAP_NODEPTHN
  116. #ifdef USE_SHADOWMAP_CLAMPN
  117. //return 1-(tex2D(shadowmapN, ProjCoords).x < 1);
  118. float sm = tex2D(shadowmapN, ProjCoords).x;
  119. #ifdef USE_SHADOWMAP_CSMN
  120. if (smdata > 1) sm=1;
  121. #endif
  122. return sm*sm*sm;
  123. #else
  124. return tex2D(shadowmapN, ProjCoords).x;
  125. #endif
  126. #else
  127. return (tex2D(shadowmapN, ProjCoords).x >= ProjCoords.z-ProjCoords.w);
  128. #endif
  129. #else
  130. // PCF
  131. return getPCFN(ProjCoords,shadowMapFilterSizeN,check);
  132. #endif
  133. #endif
  134.  
  135. #endif // end static lm
  136. #endif // end dynamic lm
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement