Spaces:
Running
Running
| /** | |
| * @author zz85 / http://www.lab4games.net/zz85/blog | |
| * | |
| * Triangle blur shader | |
| * based on glfx.js triangle blur shader | |
| * https://github.com/evanw/glfx.js | |
| * | |
| * A basic blur filter, which convolves the image with a | |
| * pyramid filter. The pyramid filter is separable and is applied as two | |
| * perpendicular triangle filters. | |
| */ | |
| THREE.TriangleBlurShader = { | |
| uniforms : { | |
| "texture": { value: null }, | |
| "delta": { value: new THREE.Vector2( 1, 1 ) } | |
| }, | |
| vertexShader: [ | |
| "varying vec2 vUv;", | |
| "void main() {", | |
| "vUv = uv;", | |
| "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", | |
| "}" | |
| ].join( "\n" ), | |
| fragmentShader: [ | |
| "#include <common>", | |
| "#define ITERATIONS 10.0", | |
| "uniform sampler2D texture;", | |
| "uniform vec2 delta;", | |
| "varying vec2 vUv;", | |
| "void main() {", | |
| "vec4 color = vec4( 0.0 );", | |
| "float total = 0.0;", | |
| // randomize the lookup values to hide the fixed number of samples | |
| "float offset = rand( vUv );", | |
| "for ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {", | |
| "float percent = ( t + offset - 0.5 ) / ITERATIONS;", | |
| "float weight = 1.0 - abs( percent );", | |
| "color += texture2D( texture, vUv + delta * percent ) * weight;", | |
| "total += weight;", | |
| "}", | |
| "gl_FragColor = color / total;", | |
| "}" | |
| ].join( "\n" ) | |
| }; | |