1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
/**
* @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.
*/
import {
Vector2
} from "../../../build/three.module.js";
var TriangleBlurShader = {
uniforms: {
"texture": { value: null },
"delta": { value: new 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" )
};
export { TriangleBlurShader };
|