{"version":3,"sources":["jsdelivr-header.js","/npm/three@0.131.3/examples/js/postprocessing/SSAOPass.js"],"names":[],"mappings":"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","file":"/npm/three@0.131.3/examples/js/postprocessing/SSAOPass.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/three@0.131.3/examples/js/postprocessing/SSAOPass.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","( function () {\n\n\tclass SSAOPass extends THREE.Pass {\n\n\t\tconstructor( scene, camera, width, height ) {\n\n\t\t\tsuper();\n\t\t\tthis.width = width !== undefined ? width : 512;\n\t\t\tthis.height = height !== undefined ? height : 512;\n\t\t\tthis.clear = true;\n\t\t\tthis.camera = camera;\n\t\t\tthis.scene = scene;\n\t\t\tthis.kernelRadius = 8;\n\t\t\tthis.kernelSize = 32;\n\t\t\tthis.kernel = [];\n\t\t\tthis.noiseTexture = null;\n\t\t\tthis.output = 0;\n\t\t\tthis.minDistance = 0.005;\n\t\t\tthis.maxDistance = 0.1;\n\t\t\tthis._visibilityCache = new Map(); //\n\n\t\t\tthis.generateSampleKernel();\n\t\t\tthis.generateRandomKernelRotations(); // beauty render target\n\n\t\t\tconst depthTexture = new THREE.DepthTexture();\n\t\t\tdepthTexture.type = THREE.UnsignedShortType;\n\t\t\tthis.beautyRenderTarget = new THREE.WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\tformat: THREE.RGBAFormat\n\t\t\t} ); // normal render target with depth buffer\n\n\t\t\tthis.normalRenderTarget = new THREE.WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: THREE.NearestFilter,\n\t\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\t\tformat: THREE.RGBAFormat,\n\t\t\t\tdepthTexture: depthTexture\n\t\t\t} ); // ssao render target\n\n\t\t\tthis.ssaoRenderTarget = new THREE.WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: THREE.LinearFilter,\n\t\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\t\tformat: THREE.RGBAFormat\n\t\t\t} );\n\t\t\tthis.blurRenderTarget = this.ssaoRenderTarget.clone(); // ssao material\n\n\t\t\tif ( THREE.SSAOShader === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.SSAOPass: The pass relies on THREE.SSAOShader.' );\n\n\t\t\t}\n\n\t\t\tthis.ssaoMaterial = new THREE.ShaderMaterial( {\n\t\t\t\tdefines: Object.assign( {}, THREE.SSAOShader.defines ),\n\t\t\t\tuniforms: THREE.UniformsUtils.clone( THREE.SSAOShader.uniforms ),\n\t\t\t\tvertexShader: THREE.SSAOShader.vertexShader,\n\t\t\t\tfragmentShader: THREE.SSAOShader.fragmentShader,\n\t\t\t\tblending: THREE.NoBlending\n\t\t\t} );\n\t\t\tthis.ssaoMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\tthis.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;\n\t\t\tthis.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\t\tthis.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;\n\t\t\tthis.ssaoMaterial.uniforms[ 'kernel' ].value = this.kernel;\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraFar' ].value = this.camera.far;\n\t\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height );\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse ); // normal material\n\n\t\t\tthis.normalMaterial = new THREE.MeshNormalMaterial();\n\t\t\tthis.normalMaterial.blending = THREE.NoBlending; // blur material\n\n\t\t\tthis.blurMaterial = new THREE.ShaderMaterial( {\n\t\t\t\tdefines: Object.assign( {}, THREE.SSAOBlurShader.defines ),\n\t\t\t\tuniforms: THREE.UniformsUtils.clone( THREE.SSAOBlurShader.uniforms ),\n\t\t\t\tvertexShader: THREE.SSAOBlurShader.vertexShader,\n\t\t\t\tfragmentShader: THREE.SSAOBlurShader.fragmentShader\n\t\t\t} );\n\t\t\tthis.blurMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( this.width, this.height ); // material for rendering the depth\n\n\t\t\tthis.depthRenderMaterial = new THREE.ShaderMaterial( {\n\t\t\t\tdefines: Object.assign( {}, THREE.SSAODepthShader.defines ),\n\t\t\t\tuniforms: THREE.UniformsUtils.clone( THREE.SSAODepthShader.uniforms ),\n\t\t\t\tvertexShader: THREE.SSAODepthShader.vertexShader,\n\t\t\t\tfragmentShader: THREE.SSAODepthShader.fragmentShader,\n\t\t\t\tblending: THREE.NoBlending\n\t\t\t} );\n\t\t\tthis.depthRenderMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;\n\t\t\tthis.depthRenderMaterial.uniforms[ 'cameraNear' ].value = this.camera.near;\n\t\t\tthis.depthRenderMaterial.uniforms[ 'cameraFar' ].value = this.camera.far; // material for rendering the content of a render target\n\n\t\t\tthis.copyMaterial = new THREE.ShaderMaterial( {\n\t\t\t\tuniforms: THREE.UniformsUtils.clone( THREE.CopyShader.uniforms ),\n\t\t\t\tvertexShader: THREE.CopyShader.vertexShader,\n\t\t\t\tfragmentShader: THREE.CopyShader.fragmentShader,\n\t\t\t\ttransparent: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\tblendSrc: THREE.DstColorFactor,\n\t\t\t\tblendDst: THREE.ZeroFactor,\n\t\t\t\tblendEquation: THREE.AddEquation,\n\t\t\t\tblendSrcAlpha: THREE.DstAlphaFactor,\n\t\t\t\tblendDstAlpha: THREE.ZeroFactor,\n\t\t\t\tblendEquationAlpha: THREE.AddEquation\n\t\t\t} );\n\t\t\tthis.fsQuad = new THREE.FullScreenQuad( null );\n\t\t\tthis.originalClearColor = new THREE.Color();\n\n\t\t}\n\n\t\tdispose() {\n\n\t\t\t// dispose render targets\n\t\t\tthis.beautyRenderTarget.dispose();\n\t\t\tthis.normalRenderTarget.dispose();\n\t\t\tthis.ssaoRenderTarget.dispose();\n\t\t\tthis.blurRenderTarget.dispose(); // dispose materials\n\n\t\t\tthis.normalMaterial.dispose();\n\t\t\tthis.blurMaterial.dispose();\n\t\t\tthis.copyMaterial.dispose();\n\t\t\tthis.depthRenderMaterial.dispose(); // dipsose full screen quad\n\n\t\t\tthis.fsQuad.dispose();\n\n\t\t}\n\n\t\trender( renderer, writeBuffer\n\t\t\t/*, readBuffer, deltaTime, maskActive */\n\t\t) {\n\n\t\t\t// render beauty\n\t\t\trenderer.setRenderTarget( this.beautyRenderTarget );\n\t\t\trenderer.clear();\n\t\t\trenderer.render( this.scene, this.camera ); // render normals and depth (honor only meshes, points and lines do not contribute to SSAO)\n\n\t\t\tthis.overrideVisibility();\n\t\t\tthis.renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\t\tthis.restoreVisibility(); // render SSAO\n\n\t\t\tthis.ssaoMaterial.uniforms[ 'kernelRadius' ].value = this.kernelRadius;\n\t\t\tthis.ssaoMaterial.uniforms[ 'minDistance' ].value = this.minDistance;\n\t\t\tthis.ssaoMaterial.uniforms[ 'maxDistance' ].value = this.maxDistance;\n\t\t\tthis.renderPass( renderer, this.ssaoMaterial, this.ssaoRenderTarget ); // render blur\n\n\t\t\tthis.renderPass( renderer, this.blurMaterial, this.blurRenderTarget ); // output result to screen\n\n\t\t\tswitch ( this.output ) {\n\n\t\t\t\tcase SSAOPass.OUTPUT.SSAO:\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.ssaoRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SSAOPass.OUTPUT.Blur:\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SSAOPass.OUTPUT.Beauty:\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SSAOPass.OUTPUT.Depth:\n\t\t\t\t\tthis.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SSAOPass.OUTPUT.Normal:\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.normalRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SSAOPass.OUTPUT.Default:\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.NoBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tthis.copyMaterial.uniforms[ 'tDiffuse' ].value = this.blurRenderTarget.texture;\n\t\t\t\t\tthis.copyMaterial.blending = THREE.CustomBlending;\n\t\t\t\t\tthis.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.SSAOPass: Unknown output type.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\trenderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t\t// save original state\n\t\t\trenderer.getClearColor( this.originalClearColor );\n\t\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\t\tconst originalAutoClear = renderer.autoClear;\n\t\t\trenderer.setRenderTarget( renderTarget ); // setup pass state\n\n\t\t\trenderer.autoClear = false;\n\n\t\t\tif ( clearColor !== undefined && clearColor !== null ) {\n\n\t\t\t\trenderer.setClearColor( clearColor );\n\t\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\t\trenderer.clear();\n\n\t\t\t}\n\n\t\t\tthis.fsQuad.material = passMaterial;\n\t\t\tthis.fsQuad.render( renderer ); // restore original state\n\n\t\t\trenderer.autoClear = originalAutoClear;\n\t\t\trenderer.setClearColor( this.originalClearColor );\n\t\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t\t}\n\n\t\trenderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t\trenderer.getClearColor( this.originalClearColor );\n\t\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\t\tconst originalAutoClear = renderer.autoClear;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\t\t\trenderer.autoClear = false;\n\t\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\t\tif ( clearColor !== undefined && clearColor !== null ) {\n\n\t\t\t\trenderer.setClearColor( clearColor );\n\t\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\t\trenderer.clear();\n\n\t\t\t}\n\n\t\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\t\trenderer.render( this.scene, this.camera );\n\t\t\tthis.scene.overrideMaterial = null; // restore original state\n\n\t\t\trenderer.autoClear = originalAutoClear;\n\t\t\trenderer.setClearColor( this.originalClearColor );\n\t\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t\t}\n\n\t\tsetSize( width, height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.beautyRenderTarget.setSize( width, height );\n\t\t\tthis.ssaoRenderTarget.setSize( width, height );\n\t\t\tthis.normalRenderTarget.setSize( width, height );\n\t\t\tthis.blurRenderTarget.setSize( width, height );\n\t\t\tthis.ssaoMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );\n\t\t\tthis.ssaoMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );\n\t\t\tthis.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );\n\n\t\t}\n\n\t\tgenerateSampleKernel() {\n\n\t\t\tconst kernelSize = this.kernelSize;\n\t\t\tconst kernel = this.kernel;\n\n\t\t\tfor ( let i = 0; i < kernelSize; i ++ ) {\n\n\t\t\t\tconst sample = new THREE.Vector3();\n\t\t\t\tsample.x = Math.random() * 2 - 1;\n\t\t\t\tsample.y = Math.random() * 2 - 1;\n\t\t\t\tsample.z = Math.random();\n\t\t\t\tsample.normalize();\n\t\t\t\tlet scale = i / kernelSize;\n\t\t\t\tscale = THREE.MathUtils.lerp( 0.1, 1, scale * scale );\n\t\t\t\tsample.multiplyScalar( scale );\n\t\t\t\tkernel.push( sample );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgenerateRandomKernelRotations() {\n\n\t\t\tconst width = 4,\n\t\t\t\theight = 4;\n\n\t\t\tif ( THREE.SimplexNoise === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.SSAOPass: The pass relies on THREE.SimplexNoise.' );\n\n\t\t\t}\n\n\t\t\tconst simplex = new THREE.SimplexNoise();\n\t\t\tconst size = width * height;\n\t\t\tconst data = new Float32Array( size * 4 );\n\n\t\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\t\tconst stride = i * 4;\n\t\t\t\tconst x = Math.random() * 2 - 1;\n\t\t\t\tconst y = Math.random() * 2 - 1;\n\t\t\t\tconst z = 0;\n\t\t\t\tconst noise = simplex.noise3d( x, y, z );\n\t\t\t\tdata[ stride ] = noise;\n\t\t\t\tdata[ stride + 1 ] = noise;\n\t\t\t\tdata[ stride + 2 ] = noise;\n\t\t\t\tdata[ stride + 3 ] = 1;\n\n\t\t\t}\n\n\t\t\tthis.noiseTexture = new THREE.DataTexture( data, width, height, THREE.RGBAFormat, THREE.FloatType );\n\t\t\tthis.noiseTexture.wrapS = THREE.RepeatWrapping;\n\t\t\tthis.noiseTexture.wrapT = THREE.RepeatWrapping;\n\n\t\t}\n\n\t\toverrideVisibility() {\n\n\t\t\tconst scene = this.scene;\n\t\t\tconst cache = this._visibilityCache;\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tcache.set( object, object.visible );\n\t\t\t\tif ( object.isPoints || object.isLine ) object.visible = false;\n\n\t\t\t} );\n\n\t\t}\n\n\t\trestoreVisibility() {\n\n\t\t\tconst scene = this.scene;\n\t\t\tconst cache = this._visibilityCache;\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst visible = cache.get( object );\n\t\t\t\tobject.visible = visible;\n\n\t\t\t} );\n\t\t\tcache.clear();\n\n\t\t}\n\n\t}\n\n\tSSAOPass.OUTPUT = {\n\t\t'Default': 0,\n\t\t'SSAO': 1,\n\t\t'Blur': 2,\n\t\t'Beauty': 3,\n\t\t'Depth': 4,\n\t\t'Normal': 5\n\t};\n\n\tTHREE.SSAOPass = SSAOPass;\n\n} )();\n"]}