screenSpaceReflection2BlurCombiner.fragment.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Do not edit.
  2. import { ShaderStore } from "../Engines/shaderStore.js";
  3. import "./ShadersInclude/helperFunctions.js";
  4. import "./ShadersInclude/pbrBRDFFunctions.js";
  5. import "./ShadersInclude/screenSpaceRayTrace.js";
  6. const name = "screenSpaceReflection2BlurCombinerPixelShader";
  7. const shader = `uniform sampler2D textureSampler;
  8. uniform sampler2D mainSampler;uniform sampler2D reflectivitySampler;uniform float strength;uniform float reflectionSpecularFalloffExponent;uniform float reflectivityThreshold;varying vec2 vUV;
  9. #include<helperFunctions>
  10. #ifdef SSR_BLEND_WITH_FRESNEL
  11. #include<pbrBRDFFunctions>
  12. #include<screenSpaceRayTrace>
  13. uniform mat4 projection;uniform mat4 invProjectionMatrix;uniform sampler2D normalSampler;uniform sampler2D depthSampler;
  14. #endif
  15. void main()
  16. {
  17. #ifdef SSRAYTRACE_DEBUG
  18. gl_FragColor=texture2D(textureSampler,vUV);
  19. #else
  20. vec3 SSR=texture2D(textureSampler,vUV).rgb;vec4 color=texture2D(mainSampler,vUV);vec4 reflectivity=texture2D(reflectivitySampler,vUV);
  21. #ifndef SSR_DISABLE_REFLECTIVITY_TEST
  22. if (max(reflectivity.r,max(reflectivity.g,reflectivity.b))<=reflectivityThreshold) {gl_FragColor=color;return;}
  23. #endif
  24. #ifdef SSR_INPUT_IS_GAMMA_SPACE
  25. color=toLinearSpace(color);
  26. #endif
  27. #ifdef SSR_BLEND_WITH_FRESNEL
  28. vec2 texSize=vec2(textureSize(depthSampler,0));vec3 csNormal=texelFetch(normalSampler,ivec2(vUV*texSize),0).xyz;float depth=texelFetch(depthSampler,ivec2(vUV*texSize),0).r;vec3 csPosition=computeViewPosFromUVDepth(vUV,depth,projection,invProjectionMatrix);vec3 csViewDirection=normalize(csPosition);vec3 F0=reflectivity.rgb;vec3 fresnel=fresnelSchlickGGX(max(dot(csNormal,-csViewDirection),0.0),F0,vec3(1.));vec3 reflectionMultiplier=clamp(pow(fresnel*strength,vec3(reflectionSpecularFalloffExponent)),0.0,1.0);
  29. #else
  30. vec3 reflectionMultiplier=clamp(pow(reflectivity.rgb*strength,vec3(reflectionSpecularFalloffExponent)),0.0,1.0);
  31. #endif
  32. vec3 colorMultiplier=1.0-reflectionMultiplier;vec3 finalColor=(color.rgb*colorMultiplier)+(SSR*reflectionMultiplier);
  33. #ifdef SSR_OUTPUT_IS_GAMMA_SPACE
  34. finalColor=toGammaSpace(finalColor);
  35. #endif
  36. gl_FragColor=vec4(finalColor,color.a);
  37. #endif
  38. }
  39. `;
  40. // Sideeffect
  41. ShaderStore.ShadersStore[name] = shader;
  42. /** @internal */
  43. export const screenSpaceReflection2BlurCombinerPixelShader = { name, shader };
  44. //# sourceMappingURL=screenSpaceReflection2BlurCombiner.fragment.js.map