three-stdlib
Version:
stand-alone library of threejs examples
1 lines • 6.48 kB
Source Map (JSON)
{"version":3,"file":"BloomPass.cjs","sources":["../../src/postprocessing/BloomPass.ts"],"sourcesContent":["import { Pass, FullScreenQuad } from './Pass'\nimport {\n AdditiveBlending,\n IUniform,\n ShaderMaterial,\n UniformsUtils,\n Vector2,\n WebGLRenderer,\n WebGLRenderTarget,\n} from 'three'\nimport { ConvolutionShader } from '../shaders/ConvolutionShader'\n\nclass BloomPass extends Pass {\n public renderTargetX: WebGLRenderTarget\n public renderTargetY: WebGLRenderTarget\n public materialCombine: ShaderMaterial\n public materialConvolution: ShaderMaterial\n public fsQuad: FullScreenQuad\n public combineUniforms: Record<keyof typeof CombineShader['uniforms'], IUniform<any>>\n public convolutionUniforms: Record<keyof typeof ConvolutionShader['uniforms'], IUniform<any>>\n\n public blurX = new Vector2(0.001953125, 0.0)\n public blurY = new Vector2(0.0, 0.001953125)\n\n constructor(strength = 1, kernelSize = 25, sigma = 4, resolution = 256) {\n super() // render targets\n\n this.renderTargetX = new WebGLRenderTarget(resolution, resolution)\n this.renderTargetX.texture.name = 'BloomPass.x'\n this.renderTargetY = new WebGLRenderTarget(resolution, resolution)\n this.renderTargetY.texture.name = 'BloomPass.y' // combine material\n\n this.combineUniforms = UniformsUtils.clone(CombineShader.uniforms)\n this.combineUniforms['strength'].value = strength\n this.materialCombine = new ShaderMaterial({\n uniforms: this.combineUniforms,\n vertexShader: CombineShader.vertexShader,\n fragmentShader: CombineShader.fragmentShader,\n blending: AdditiveBlending,\n transparent: true,\n }) // convolution material\n\n if (ConvolutionShader === undefined) console.error('BloomPass relies on ConvolutionShader')\n const convolutionShader = ConvolutionShader\n this.convolutionUniforms = UniformsUtils.clone(convolutionShader.uniforms)\n this.convolutionUniforms['uImageIncrement'].value = this.blurX\n this.convolutionUniforms['cKernel'].value = ConvolutionShader.buildKernel(sigma)\n this.materialConvolution = new ShaderMaterial({\n uniforms: this.convolutionUniforms,\n vertexShader: convolutionShader.vertexShader,\n fragmentShader: convolutionShader.fragmentShader,\n defines: {\n KERNEL_SIZE_FLOAT: kernelSize.toFixed(1),\n KERNEL_SIZE_INT: kernelSize.toFixed(0),\n },\n })\n this.needsSwap = false\n this.fsQuad = new FullScreenQuad(this.materialConvolution)\n }\n\n public render(\n renderer: WebGLRenderer,\n writeBuffer: WebGLRenderTarget,\n readBuffer: WebGLRenderTarget,\n deltaTime: number,\n maskActive: boolean,\n ): void {\n if (maskActive) renderer.state.buffers.stencil.setTest(false) // Render quad with blured scene into texture (convolution pass 1)\n\n this.fsQuad.material = this.materialConvolution\n this.convolutionUniforms['tDiffuse'].value = readBuffer.texture\n this.convolutionUniforms['uImageIncrement'].value = this.blurX\n renderer.setRenderTarget(this.renderTargetX)\n renderer.clear()\n this.fsQuad.render(renderer) // Render quad with blured scene into texture (convolution pass 2)\n\n this.convolutionUniforms['tDiffuse'].value = this.renderTargetX.texture\n this.convolutionUniforms['uImageIncrement'].value = this.blurY\n renderer.setRenderTarget(this.renderTargetY)\n renderer.clear()\n this.fsQuad.render(renderer) // Render original scene with superimposed blur to texture\n\n this.fsQuad.material = this.materialCombine\n this.combineUniforms['tDiffuse'].value = this.renderTargetY.texture\n if (maskActive) renderer.state.buffers.stencil.setTest(true)\n renderer.setRenderTarget(readBuffer)\n if (this.clear) renderer.clear()\n this.fsQuad.render(renderer)\n }\n}\n\nconst CombineShader = {\n uniforms: {\n tDiffuse: {\n value: null,\n },\n strength: {\n value: 1.0,\n },\n },\n vertexShader:\n /* glsl */\n `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader:\n /* glsl */\n `\n uniform float strength;\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n void main() {\n vec4 texel = texture2D( tDiffuse, vUv );\n gl_FragColor = strength * texel;\n }`,\n}\n\nexport { BloomPass }\n"],"names":["Pass","Vector2","WebGLRenderTarget","UniformsUtils","ShaderMaterial","AdditiveBlending","ConvolutionShader","FullScreenQuad"],"mappings":";;;;;;;;;;;AAYA,MAAM,kBAAkBA,KAAAA,KAAK;AAAA,EAY3B,YAAY,WAAW,GAAG,aAAa,IAAI,QAAQ,GAAG,aAAa,KAAK;AAChE;AAZD;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,iCAAQ,IAAIC,MAAAA,QAAQ,YAAa,CAAG;AACpC,iCAAQ,IAAIA,MAAAA,QAAQ,GAAK,UAAW;AAKzC,SAAK,gBAAgB,IAAIC,MAAkB,kBAAA,YAAY,UAAU;AAC5D,SAAA,cAAc,QAAQ,OAAO;AAClC,SAAK,gBAAgB,IAAIA,MAAkB,kBAAA,YAAY,UAAU;AAC5D,SAAA,cAAc,QAAQ,OAAO;AAElC,SAAK,kBAAkBC,MAAA,cAAc,MAAM,cAAc,QAAQ;AAC5D,SAAA,gBAAgB,UAAU,EAAE,QAAQ;AACpC,SAAA,kBAAkB,IAAIC,qBAAe;AAAA,MACxC,UAAU,KAAK;AAAA,MACf,cAAc,cAAc;AAAA,MAC5B,gBAAgB,cAAc;AAAA,MAC9B,UAAUC,MAAA;AAAA,MACV,aAAa;AAAA,IAAA,CACd;AAED,QAAIC,kBAAAA,sBAAsB;AAAW,cAAQ,MAAM,uCAAuC;AAC1F,UAAM,oBAAoBA,kBAAAA;AAC1B,SAAK,sBAAsBH,MAAA,cAAc,MAAM,kBAAkB,QAAQ;AACzE,SAAK,oBAAoB,iBAAiB,EAAE,QAAQ,KAAK;AACzD,SAAK,oBAAoB,SAAS,EAAE,QAAQG,oCAAkB,YAAY,KAAK;AAC1E,SAAA,sBAAsB,IAAIF,qBAAe;AAAA,MAC5C,UAAU,KAAK;AAAA,MACf,cAAc,kBAAkB;AAAA,MAChC,gBAAgB,kBAAkB;AAAA,MAClC,SAAS;AAAA,QACP,mBAAmB,WAAW,QAAQ,CAAC;AAAA,QACvC,iBAAiB,WAAW,QAAQ,CAAC;AAAA,MACvC;AAAA,IAAA,CACD;AACD,SAAK,YAAY;AACjB,SAAK,SAAS,IAAIG,KAAe,eAAA,KAAK,mBAAmB;AAAA,EAC3D;AAAA,EAEO,OACL,UACA,aACA,YACA,WACA,YACM;AACF,QAAA;AAAY,eAAS,MAAM,QAAQ,QAAQ,QAAQ,KAAK;AAEvD,SAAA,OAAO,WAAW,KAAK;AAC5B,SAAK,oBAAoB,UAAU,EAAE,QAAQ,WAAW;AACxD,SAAK,oBAAoB,iBAAiB,EAAE,QAAQ,KAAK;AAChD,aAAA,gBAAgB,KAAK,aAAa;AAC3C,aAAS,MAAM;AACV,SAAA,OAAO,OAAO,QAAQ;AAE3B,SAAK,oBAAoB,UAAU,EAAE,QAAQ,KAAK,cAAc;AAChE,SAAK,oBAAoB,iBAAiB,EAAE,QAAQ,KAAK;AAChD,aAAA,gBAAgB,KAAK,aAAa;AAC3C,aAAS,MAAM;AACV,SAAA,OAAO,OAAO,QAAQ;AAEtB,SAAA,OAAO,WAAW,KAAK;AAC5B,SAAK,gBAAgB,UAAU,EAAE,QAAQ,KAAK,cAAc;AACxD,QAAA;AAAY,eAAS,MAAM,QAAQ,QAAQ,QAAQ,IAAI;AAC3D,aAAS,gBAAgB,UAAU;AACnC,QAAI,KAAK;AAAO,eAAS,MAAM;AAC1B,SAAA,OAAO,OAAO,QAAQ;AAAA,EAC7B;AACF;AAEA,MAAM,gBAAgB;AAAA,EACpB,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA;AAAA;AAAA,IAEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF;AAAA;AAAA,IAEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQJ;;"}