playcanvas
Version:
PlayCanvas WebGL game engine
51 lines (48 loc) • 1.38 kB
JavaScript
var glsldofBlurPS = `
uniform sampler2D nearTexture;
uniform sampler2D farTexture;
uniform sampler2D cocTexture;
uniform vec2 kernel[{KERNEL_COUNT}];
uniform float blurRadiusNear;
uniform float blurRadiusFar;
varying vec2 uv0;
void main()
{
vec2 coc = texture2D(cocTexture, uv0).rg;
float cocFar = coc.r;
vec3 sum = vec3(0.0, 0.0, 0.0);
float cocNear = coc.g;
if (cocNear > 0.0001) {
ivec2 nearTextureSize = textureSize(nearTexture, 0);
vec2 step = cocNear * blurRadiusNear / vec2(nearTextureSize);
for (int i = 0; i < {KERNEL_COUNT}; i++) {
vec2 uv = uv0 + step * kernel[i];
vec3 tap = texture2DLod(nearTexture, uv, 0.0).rgb;
sum += tap.rgb;
}
sum *= float({INV_KERNEL_COUNT});
} else
if (cocFar > 0.0001) {
ivec2 farTextureSize = textureSize(farTexture, 0);
vec2 step = cocFar * blurRadiusFar / vec2(farTextureSize);
float sumCoC = 0.0;
for (int i = 0; i < {KERNEL_COUNT}; i++) {
vec2 uv = uv0 + step * kernel[i];
vec3 tap = texture2DLod(farTexture, uv, 0.0).rgb;
float cocThis = texture2DLod(cocTexture, uv, 0.0).r;
tap *= cocThis;
sumCoC += cocThis;
sum += tap;
}
if (sumCoC > 0.0)
sum /= sumCoC;
sum /= cocFar;
}
pcFragColor0 = vec4(sum, 1.0);
}
`;
export { glsldofBlurPS as default };