Advertisement
Guest User

Untitled

a guest
Jun 25th, 2013
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var KERNEL_SIZE=2;
  2. var KERNEL_LOOP=KERNEL_SIZE/2-0.5;
  3. var KERNEL_CONTRIBUTIONS=KERNEL_SIZE*KERNEL_SIZE;
  4.    
  5. //#GLSLSource
  6. pub.buildShader=function(features) {
  7.     var shadowMapSampler = "\n"+
  8.     "const float shadowTexelSize=1.0/2048.0;\n"+
  9.     //When dot-producted with the packed values in the shadow map will produce a Z value in the range 0-1
  10.     "const vec4 bitShifts=vec4(1.0/(256.0*256.0*256.0),1.0/(256.0*256.0),1.0/256.0,1.0);\n"+
  11.     "float rand(vec2 co){\n"+
  12.     "    return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);\n"+
  13.     "}\n"+
  14.     "float ShadowMapSamplerStochastic(vec4 sunShadowMapPosition, sampler2D sunShadowMap, float shadowStrength) {\n"+
  15.     "   float shadowEffect;\n"+
  16.     "   vec3 shadowMapTexel=sunShadowMapPosition.xyz/sunShadowMapPosition.w;\n"+
  17.     "   shadowMapTexel.z-=shadowMapTexel.z*0.003;\n"+
  18.     "   if (shadowMapTexel.x<0.0 || shadowMapTexel.x>1.0 || shadowMapTexel.y<0.0 || shadowMapTexel.y>1.0 || shadowMapTexel.z<0.0 || shadowMapTexel.z>0.45) shadowEffect=1.0;\n"+
  19.     "   else {\n"+
  20.     "       float shadowTotal=0.0, shadowMapDepth=0.0;\n"+
  21.     "       vec2 lookupTexel;\n";  
  22.     for (var pixelX=-KERNEL_LOOP; pixelX<=KERNEL_LOOP; pixelX+=1.0) {
  23.         for (var pixelY=-KERNEL_LOOP; pixelY<=KERNEL_LOOP; pixelY+=1.0) {
  24.             shadowMapSampler +=
  25.     "       lookupTexel=shadowMapTexel.xy+shadowTexelSize*( vec2(cos(rand(sunShadowMapPosition.xy))+("+pixelX+"),sin(rand(sunShadowMapPosition.yx))+("+pixelY+")) );\n"+
  26.     "       shadowMapDepth=dot(texture2D(sunShadowMap,lookupTexel),bitShifts);\n"+
  27.     "       shadowTotal+=step(shadowMapDepth,shadowMapTexel.z)*shadowStrength;\n";
  28.         }
  29.     }
  30.     shadowMapSampler +=
  31.     "       shadowEffect=max(1.0-(shadowTotal/"+KERNEL_CONTRIBUTIONS+".0),0.0);\n"+
  32.     "   }\n"+
  33.     "   return shadowEffect;\n"+
  34.     "}\n"+
  35. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement