Spaces:
Running
Running
| /** | |
| * @author HypnosNova / https://www.threejs.org.cn/gallery/ | |
| * | |
| * Afterimage shader | |
| * I created this effect inspired by a demo on codepen: | |
| * https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1& | |
| */ | |
| THREE.AfterimageShader = { | |
| uniforms: { | |
| "damp": { value: 0.96 }, | |
| "tOld": { value: null }, | |
| "tNew": { value: null } | |
| }, | |
| vertexShader: [ | |
| "varying vec2 vUv;", | |
| "void main() {", | |
| "vUv = uv;", | |
| "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", | |
| "}" | |
| ].join( "\n" ), | |
| fragmentShader: [ | |
| "uniform float damp;", | |
| "uniform sampler2D tOld;", | |
| "uniform sampler2D tNew;", | |
| "varying vec2 vUv;", | |
| "vec4 when_gt( vec4 x, float y ) {", | |
| "return max( sign( x - y ), 0.0 );", | |
| "}", | |
| "void main() {", | |
| "vec4 texelOld = texture2D( tOld, vUv );", | |
| "vec4 texelNew = texture2D( tNew, vUv );", | |
| "texelOld *= damp * when_gt( texelOld, 0.1 );", | |
| "gl_FragColor = max(texelNew, texelOld);", | |
| "}" | |
| ].join( "\n" ) | |
| }; | |