if (THREE!==undefined) {
THREE.EffectComposer=function(a,b){if(this.renderer=a,void 0===b){var c={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat},d=a.getSize(new THREE.Vector2);this._pixelRatio=a.getPixelRatio(),this._width=d.width,this._height=d.height,b=new THREE.WebGLRenderTarget(this._width*this._pixelRatio,this._height*this._pixelRatio,c),b.texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=b.width,this._height=b.height;this.renderTarget1=b,this.renderTarget2=b.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===THREE.CopyShader&&console.error("THREE.EffectComposer relies on THREE.CopyShader"),void 0===THREE.ShaderPass&&console.error("THREE.EffectComposer relies on THREE.ShaderPass"),this.copyPass=new THREE.ShaderPass(THREE.CopyShader),this.clock=new THREE.Clock},Object.assign(THREE.EffectComposer.prototype,{swapBuffers:function(){var a=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=a},addPass:function(a){this.passes.push(a),a.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},insertPass:function(a,b){this.passes.splice(b,0,a),a.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},removePass:function(a){const b=this.passes.indexOf(a);-1!==b&&this.passes.splice(b,1)},isLastEnabledPass:function(a){for(var b=a+1;b<this.passes.length;b++)if(this.passes[b].enabled)return!1;return!0},render:function(a){a===void 0&&(a=this.clock.getDelta());var b,c,d=this.renderer.getRenderTarget(),e=!1,f=this.passes.length;for(c=0;c<f;c++)if(b=this.passes[c],!1!==b.enabled){if(b.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(c),b.render(this.renderer,this.writeBuffer,this.readBuffer,a,e),b.needsSwap){if(e){var g=this.renderer.getContext(),h=this.renderer.state.buffers.stencil;h.setFunc(g.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,a),h.setFunc(g.EQUAL,1,4294967295)}this.swapBuffers()}void 0!==THREE.MaskPass&&(b instanceof THREE.MaskPass?e=!0:b instanceof THREE.ClearMaskPass&&(e=!1))}this.renderer.setRenderTarget(d)},reset:function(a){if(a===void 0){var b=this.renderer.getSize(new THREE.Vector2);this._pixelRatio=this.renderer.getPixelRatio(),this._width=b.width,this._height=b.height,a=this.renderTarget1.clone(),a.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=a,this.renderTarget2=a.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2},setSize:function(a,b){this._width=a,this._height=b;var c=this._width*this._pixelRatio,d=this._height*this._pixelRatio;this.renderTarget1.setSize(c,d),this.renderTarget2.setSize(c,d);for(var e=0;e<this.passes.length;e++)this.passes[e].setSize(c,d)},setPixelRatio:function(a){this._pixelRatio=a,this.setSize(this._width,this._height)}}),THREE.Pass=function(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1},Object.assign(THREE.Pass.prototype,{setSize:function(){},render:function(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),THREE.Pass.FullScreenQuad=function(){var a=new THREE.OrthographicCamera(-1,1,1,-1,0,1),b=new THREE.BufferGeometry;b.setAttribute("position",new THREE.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),b.setAttribute("uv",new THREE.Float32BufferAttribute([0,2,0,0,2,0],2));var c=function(a){this._mesh=new THREE.Mesh(b,a)};return Object.defineProperty(c.prototype,"material",{get:function(){return this._mesh.material},set:function(a){this._mesh.material=a}}),Object.assign(c.prototype,{dispose:function(){this._mesh.geometry.dispose()},render:function(b){b.render(this._mesh,a)}}),c}();
THREE.RenderPass=function(a,b,c,d,e){THREE.Pass.call(this),this.scene=a,this.camera=b,this.overrideMaterial=c,this.clearColor=d,this.clearAlpha=e===void 0?0:e,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new THREE.Color},THREE.RenderPass.prototype=Object.assign(Object.create(THREE.Pass.prototype),{constructor:THREE.RenderPass,render:function(a,b,c){var d=a.autoClear;a.autoClear=!1;var e,f;this.overrideMaterial!==void 0&&(f=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor&&(a.getClearColor(this._oldClearColor),e=a.getClearAlpha(),a.setClearColor(this.clearColor,this.clearAlpha)),this.clearDepth&&a.clearDepth(),a.setRenderTarget(this.renderToScreen?null:c),this.clear&&a.clear(a.autoClearColor,a.autoClearDepth,a.autoClearStencil),a.render(this.scene,this.camera),this.clearColor&&a.setClearColor(this._oldClearColor,e),this.overrideMaterial!==void 0&&(this.scene.overrideMaterial=f),a.autoClear=d}});
THREE.Blur2dShader = {
uniforms: {
'tColor': { value: null },
'intensity': { value: 0 },
'progress': { value: 0 },
'left': {value: 1.0},
'top': {value: 0.0}
},
vertexShader: /* glsl */`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,
fragmentShader: /* glsl */`
#if __VERSION__ < 130\n
#define TEXTURE2D texture2D\n
#else\n
#define TEXTURE2D texture\n
#endif\n
#include <common>
varying vec2 vUv;
uniform sampler2D tColor;
uniform float progress;
uniform float intensity;
uniform float left;
uniform float top;
int Samples = 64;
#include <packing>
vec4 DirectionalBlur(in vec2 UV, in vec2 Direction, in float Intensity, in sampler2D Texture) {
vec4 Color = vec4(0.0);
for (int i=1; i<=Samples/2; i++)
{
Color += TEXTURE2D(Texture,UV+float(i)*Intensity/float(Samples/2)*Direction);
Color += TEXTURE2D(Texture,UV-float(i)*Intensity/float(Samples/2)*Direction);
}
return Color/float(Samples);
}
void main() {
vec2 uv = vUv;
vec2 Direction = vec2(left, top);
float Intensity = intensity;
float m = progress;
float mult = (m -0.5)*2.;
Intensity *= (-(mult * mult) + 1.);
Intensity *= 1.0 - step(1.0,m);
vec4 Color = DirectionalBlur(uv,normalize(Direction), Intensity, tColor);
gl_FragColor = vec4(Color.xyz, 1.0);
}`
};
/**
* Directional blur post-process with Blur2D shader
*/
THREE.Blur2D = function ( scene, camera, params ) {
THREE.Pass.call( this );
this.scene = scene;
this.camera = camera;
var left = params.left === undefined ? 0 : params.left;
var top = params.top === undefined ? 0 : params.top;
if(left === 0 && top === 0) left = 1.0;
// render targets
var width = params.width || window.innerWidth || 1;
var height = params.height || window.innerHeight || 1;
this.renderTargetDepth = new THREE.WebGLRenderTarget( width, height, {
minFilter: THREE.NearestFilter,
magFilter: THREE.NearestFilter
} );
this.renderTargetDepth.texture.name = 'Blur2D.depth';
// blur2d material
if ( THREE.Blur2dShader === undefined ) console.error( 'THREE.Blur2D relies on THREE.Blur2dShader' );
var Blur2dShader = THREE.Blur2dShader;
var blur2dUniforms = THREE.UniformsUtils.clone( Blur2dShader.uniforms );
blur2dUniforms[ 'intensity' ].value = params.intensity !== undefined ? params.intensity : 0.1;
blur2dUniforms[ 'progress' ].value = 0.0;
blur2dUniforms[ 'left' ].value = left;
blur2dUniforms[ 'top' ].value = top;
this.materialBlur2d = new THREE.ShaderMaterial( {
uniforms: blur2dUniforms,
vertexShader: Blur2dShader.vertexShader,
fragmentShader: Blur2dShader.fragmentShader
} );
this.uniforms = blur2dUniforms;
this.needsSwap = false;
this.fsQuad = new THREE.Pass.FullScreenQuad( this.materialBlur2d );
this._oldClearColor = new THREE.Color();
};
THREE.Blur2D.prototype = Object.assign( Object.create( THREE.Pass.prototype ), {
constructor: THREE.Blur2D,
render: function ( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
// Render depth into texture
renderer.getClearColor( this._oldClearColor );
var oldClearAlpha = renderer.getClearAlpha();
var oldAutoClear = renderer.autoClear;
renderer.autoClear = false;
renderer.setClearColor( 0xffffff );
renderer.setClearAlpha( 1.0 );
renderer.setRenderTarget( this.renderTargetDepth );
renderer.clear();
renderer.render( this.scene, this.camera );
// Render blur2d composite
this.uniforms[ 'tColor' ].value = readBuffer.texture;
if ( this.renderToScreen ) {
renderer.setRenderTarget( null );
this.fsQuad.render( renderer );
} else {
renderer.setRenderTarget( writeBuffer );
renderer.clear();
this.fsQuad.render( renderer );
}
this.scene.overrideMaterial = null;
renderer.setClearColor( this._oldClearColor );
renderer.setClearAlpha( oldClearAlpha );
renderer.autoClear = oldAutoClear;
}
} );
var _R = _R_is_Editor ? RVS._R : jQuery.fn.revolution;
_R.postProcessing = _R.postProcessing || {};
_R.postProcessing.blur2d = {
init: function(renderer, scene, camera, opt) {
let PP = {};
PP.type = "blur2d";
PP.renderPass = new THREE.RenderPass( scene, camera );
PP.blur2D = new THREE.Blur2D( scene, camera, {
progress: opt.progress,
intensity: opt.intensity,
left: opt.left,
top: opt.top,
width: opt.width,
height: opt.height
});
PP.composer = new THREE.EffectComposer( renderer);
PP.composer.addPass( PP.renderPass );
PP.composer.addPass( PP.blur2D );
return PP;
}
}
}