diff --git a/examples/jsm/postprocessing/BloomPass.js b/examples/jsm/postprocessing/BloomPass.js index 5394a43ea04f23..ff437ec75e3ef8 100644 --- a/examples/jsm/postprocessing/BloomPass.js +++ b/examples/jsm/postprocessing/BloomPass.js @@ -128,6 +128,9 @@ class BloomPass extends Pass { if ( maskActive ) renderer.state.buffers.stencil.setTest( false ); + const oldAutoClear = renderer.autoClear; + renderer.autoClear = false; + // Render quad with blurred scene into texture (convolution pass 1) this._fsQuad.material = this.materialConvolution; @@ -161,6 +164,8 @@ class BloomPass extends Pass { if ( this.clear ) renderer.clear(); this._fsQuad.render( renderer ); + renderer.autoClear = oldAutoClear; + } /** diff --git a/examples/webgl_materials_alphahash.html b/examples/webgl_materials_alphahash.html index 34f08bc67e998f..e5408099c610b8 100644 --- a/examples/webgl_materials_alphahash.html +++ b/examples/webgl_materials_alphahash.html @@ -25,14 +25,11 @@ import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { TAARenderPass } from 'three/addons/postprocessing/TAARenderPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; let camera, scene, renderer, controls, stats, mesh, material; - let composer, renderPass, taaRenderPass, outputPass; + let taaRenderPass; let needsUpdate = false; @@ -96,7 +93,7 @@ // - renderer = new THREE.WebGLRenderer( { antialias: true } ); + renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -112,18 +109,9 @@ // - composer = new EffectComposer( renderer ); - - renderPass = new RenderPass( scene, camera ); - renderPass.enabled = false; - taaRenderPass = new TAARenderPass( scene, camera ); - outputPass = new OutputPass(); - - composer.addPass( renderPass ); - composer.addPass( taaRenderPass ); - composer.addPass( outputPass ); + renderer.setEffects( [ taaRenderPass ] ); // @@ -144,8 +132,7 @@ taaFolder.add( params, 'taa' ).name( 'enabled' ).onChange( () => { - renderPass.enabled = ! params.taa; - taaRenderPass.enabled = params.taa; + renderer.setEffects( params.taa ? [ taaRenderPass ] : null ); sampleLevelCtrl.enable( params.taa ); @@ -170,7 +157,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); needsUpdate = true; @@ -212,7 +198,7 @@ } - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_materials_video.html b/examples/webgl_materials_video.html index 393ef799da96fe..169658bbc20d95 100644 --- a/examples/webgl_materials_video.html +++ b/examples/webgl_materials_video.html @@ -33,10 +33,7 @@ import * as THREE from 'three'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { BloomPass } from 'three/addons/postprocessing/BloomPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; let container; @@ -44,8 +41,6 @@ let video, texture, material, mesh; - let composer; - let mouseX = 0; let mouseY = 0; @@ -76,7 +71,7 @@ light.position.set( 0.5, 1, 1 ).normalize(); scene.add( light ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -148,21 +143,12 @@ } - renderer.autoClear = false; - document.addEventListener( 'mousemove', onDocumentMouseMove ); // postprocessing - const renderPass = new RenderPass( scene, camera ); const bloomPass = new BloomPass( 1.3 ); - const outputPass = new OutputPass(); - - composer = new EffectComposer( renderer ); - - composer.addPass( renderPass ); - composer.addPass( bloomPass ); - composer.addPass( outputPass ); + renderer.setEffects( [ bloomPass ] ); // @@ -179,7 +165,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); } @@ -258,8 +243,7 @@ counter ++; - renderer.clear(); - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_afterimage.html b/examples/webgl_postprocessing_afterimage.html index 1c83ea29e02bf8..649168ddba6c54 100644 --- a/examples/webgl_postprocessing_afterimage.html +++ b/examples/webgl_postprocessing_afterimage.html @@ -22,12 +22,9 @@ import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { AfterimagePass } from 'three/addons/postprocessing/AfterimagePass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, scene, renderer, composer; + let camera, scene, renderer; let mesh; let afterimagePass; @@ -42,7 +39,7 @@ function init() { - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -61,14 +58,8 @@ // postprocessing - composer = new EffectComposer( renderer ); - composer.addPass( new RenderPass( scene, camera ) ); - afterimagePass = new AfterimagePass(); - composer.addPass( afterimagePass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ afterimagePass ] ); window.addEventListener( 'resize', onWindowResize ); @@ -84,7 +75,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); } @@ -95,8 +85,7 @@ afterimagePass.enabled = params.enable; - composer.render(); - + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_dof.html b/examples/webgl_postprocessing_dof.html index c752bdb3ef2d50..0f27827b9dd66a 100644 --- a/examples/webgl_postprocessing_dof.html +++ b/examples/webgl_postprocessing_dof.html @@ -29,10 +29,7 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { BokehPass } from 'three/addons/postprocessing/BokehPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; let camera, scene, renderer, stats, singleMaterial, zmaterial, @@ -48,7 +45,7 @@ const materials = [], objects = []; - const postprocessing = {}; + let bokehPass; init(); @@ -62,7 +59,7 @@ scene = new THREE.Scene(); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( width, height ); renderer.setAnimationLoop( animate ); @@ -136,8 +133,6 @@ initPostprocessing(); - renderer.autoClear = false; - stats = new Stats(); container.appendChild( stats.dom ); @@ -156,9 +151,9 @@ const matChanger = function ( ) { - postprocessing.bokeh.uniforms[ 'focus' ].value = effectController.focus; - postprocessing.bokeh.uniforms[ 'aperture' ].value = effectController.aperture * 0.00001; - postprocessing.bokeh.uniforms[ 'maxblur' ].value = effectController.maxblur; + bokehPass.uniforms[ 'focus' ].value = effectController.focus; + bokehPass.uniforms[ 'aperture' ].value = effectController.aperture * 0.00001; + bokehPass.uniforms[ 'maxblur' ].value = effectController.maxblur; }; @@ -193,30 +188,18 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - postprocessing.composer.setSize( width, height ); } function initPostprocessing() { - const renderPass = new RenderPass( scene, camera ); - - const bokehPass = new BokehPass( scene, camera, { + bokehPass = new BokehPass( scene, camera, { focus: 1.0, aperture: 0.025, maxblur: 0.01 } ); - const outputPass = new OutputPass(); - - const composer = new EffectComposer( renderer ); - - composer.addPass( renderPass ); - composer.addPass( bokehPass ); - composer.addPass( outputPass ); - - postprocessing.composer = composer; - postprocessing.bokeh = bokehPass; + renderer.setEffects( [ bokehPass ] ); } @@ -248,7 +231,7 @@ } - postprocessing.composer.render( 0.1 ); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_glitch.html b/examples/webgl_postprocessing_glitch.html index a700091358b8b1..eb410b8973fdca 100644 --- a/examples/webgl_postprocessing_glitch.html +++ b/examples/webgl_postprocessing_glitch.html @@ -33,12 +33,9 @@

WARNING

import * as THREE from 'three'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { GlitchPass } from 'three/addons/postprocessing/GlitchPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, scene, renderer, composer; + let camera, scene, renderer; let object, light; let glitchPass; @@ -62,7 +59,7 @@

WARNING

function init() { - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -113,14 +110,8 @@

WARNING

// postprocessing - composer = new EffectComposer( renderer ); - composer.addPass( new RenderPass( scene, camera ) ); - glitchPass = new GlitchPass(); - composer.addPass( glitchPass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ glitchPass ] ); // @@ -140,8 +131,6 @@

WARNING

camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); - } @@ -150,7 +139,7 @@

WARNING

object.rotation.x += 0.005; object.rotation.y += 0.01; - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_gtao.html b/examples/webgl_postprocessing_gtao.html index 1e4ce87f423e98..dd28a7a79f64af 100644 --- a/examples/webgl_postprocessing_gtao.html +++ b/examples/webgl_postprocessing_gtao.html @@ -38,12 +38,9 @@ import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { GTAOPass } from 'three/addons/postprocessing/GTAOPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, scene, renderer, composer, controls, timer, stats, mixer; + let camera, scene, renderer, controls, timer, stats, mixer; init(); @@ -64,7 +61,7 @@ stats = new Stats(); container.appendChild( stats.dom ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); document.body.appendChild( renderer.domElement ); @@ -87,17 +84,9 @@ const width = window.innerWidth; const height = window.innerHeight; - composer = new EffectComposer( renderer ); - - const renderPass = new RenderPass( scene, camera ); - composer.addPass( renderPass ); - const gtaoPass = new GTAOPass( scene, camera, width, height ); gtaoPass.output = GTAOPass.OUTPUT.Denoise; - composer.addPass( gtaoPass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ gtaoPass ] ); // @@ -181,7 +170,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -200,7 +188,7 @@ controls.update(); stats.begin(); - composer.render(); + renderer.render( scene, camera ); stats.end(); } diff --git a/examples/webgl_postprocessing_pixel.html b/examples/webgl_postprocessing_pixel.html index f096a73a9d2a55..62c2d26685da39 100644 --- a/examples/webgl_postprocessing_pixel.html +++ b/examples/webgl_postprocessing_pixel.html @@ -30,12 +30,10 @@ import * as THREE from 'three'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; import { RenderPixelatedPass } from 'three/addons/postprocessing/RenderPixelatedPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - let camera, scene, renderer, composer, crystalMesh, timer; + let camera, scene, renderer, crystalMesh, timer; let gui, params; init(); @@ -54,19 +52,15 @@ timer = new THREE.Timer(); timer.connect( document ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.shadowMap.enabled = true; //renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); document.body.appendChild( renderer.domElement ); - composer = new EffectComposer( renderer ); const renderPixelatedPass = new RenderPixelatedPass( 6, scene, camera ); - composer.addPass( renderPixelatedPass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ renderPixelatedPass ] ); window.addEventListener( 'resize', onWindowResize ); @@ -167,7 +161,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); } @@ -199,7 +192,7 @@ } - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_rgb_halftone.html b/examples/webgl_postprocessing_rgb_halftone.html index 0a08a175f3b1b8..86ad922b41a793 100644 --- a/examples/webgl_postprocessing_rgb_halftone.html +++ b/examples/webgl_postprocessing_rgb_halftone.html @@ -29,21 +29,19 @@ import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { HalftonePass } from 'three/addons/postprocessing/HalftonePass.js'; - let renderer, timer, camera, stats; + let renderer, timer, camera, scene, stats; const rotationSpeed = Math.PI / 64; - let composer, group; + let group; init(); function init() { - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -66,7 +64,7 @@ // scene - const scene = new THREE.Scene(); + scene = new THREE.Scene(); scene.background = new THREE.Color( 0x444444 ); group = new THREE.Group(); @@ -119,8 +117,6 @@ // post-processing - composer = new EffectComposer( renderer ); - const renderPass = new RenderPass( scene, camera ); const params = { shape: 1, radius: 4, @@ -134,14 +130,11 @@ disable: false }; const halftonePass = new HalftonePass( params ); - composer.addPass( renderPass ); - composer.addPass( halftonePass ); + renderer.setEffects( [ halftonePass ] ); window.onresize = function () { - // resize composer renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); @@ -199,7 +192,7 @@ const delta = timer.getDelta(); stats.update(); group.rotation.y += delta * rotationSpeed; - composer.render( delta ); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_sao.html b/examples/webgl_postprocessing_sao.html index d4b83bf07aa3e0..84b499859f8918 100644 --- a/examples/webgl_postprocessing_sao.html +++ b/examples/webgl_postprocessing_sao.html @@ -28,14 +28,11 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { SAOPass } from 'three/addons/postprocessing/SAOPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; let container, stats; let camera, scene, renderer; - let composer, renderPass, saoPass; + let saoPass; let group; init(); @@ -48,7 +45,7 @@ const width = window.innerWidth; const height = window.innerHeight; - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( width, height ); renderer.setAnimationLoop( animate ); @@ -117,13 +114,8 @@ stats = new Stats(); container.appendChild( stats.dom ); - composer = new EffectComposer( renderer ); - renderPass = new RenderPass( scene, camera ); - composer.addPass( renderPass ); saoPass = new SAOPass( scene, camera ); - composer.addPass( saoPass ); - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ saoPass ] ); // Init gui const gui = new GUI(); @@ -160,9 +152,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); - - } function animate() { @@ -179,7 +168,7 @@ group.rotation.x = timer * 0.0002; group.rotation.y = timer * 0.0001; - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_smaa.html b/examples/webgl_postprocessing_smaa.html index b58d773689b088..613453d909323e 100644 --- a/examples/webgl_postprocessing_smaa.html +++ b/examples/webgl_postprocessing_smaa.html @@ -29,12 +29,9 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { SMAAPass } from 'three/addons/postprocessing/SMAAPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, scene, renderer, composer, stats, smaaPass; + let camera, scene, renderer, stats, smaaPass; const params = { enabled: true, @@ -48,7 +45,7 @@ const container = document.getElementById( 'container' ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -83,14 +80,8 @@ // postprocessing - composer = new EffectComposer( renderer ); - composer.addPass( new RenderPass( scene, camera ) ); - smaaPass = new SMAAPass(); - composer.addPass( smaaPass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ smaaPass ] ); window.addEventListener( 'resize', onWindowResize ); @@ -113,7 +104,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -136,7 +126,7 @@ smaaPass.enabled = params.enabled; - composer.render(); + renderer.render( scene, camera ); stats.end(); diff --git a/examples/webgl_postprocessing_sobel.html b/examples/webgl_postprocessing_sobel.html index 4629929fb7745d..2d43a8d069d89b 100644 --- a/examples/webgl_postprocessing_sobel.html +++ b/examples/webgl_postprocessing_sobel.html @@ -30,16 +30,14 @@ import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js'; import { LuminosityShader } from 'three/addons/shaders/LuminosityShader.js'; import { SobelOperatorShader } from 'three/addons/shaders/SobelOperatorShader.js'; - let camera, scene, renderer, composer; + let camera, scene, renderer; - let effectSobel; + let effectGrayScale, effectSobel; const params = { enable: true @@ -76,7 +74,7 @@ // - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -84,14 +82,9 @@ // postprocessing - composer = new EffectComposer( renderer ); - const renderPass = new RenderPass( scene, camera ); - composer.addPass( renderPass ); - // color to grayscale conversion - const effectGrayScale = new ShaderPass( LuminosityShader ); - composer.addPass( effectGrayScale ); + effectGrayScale = new ShaderPass( LuminosityShader ); // you might want to use a gaussian blur filter before // the next pass to improve the result of the Sobel operator @@ -101,7 +94,8 @@ effectSobel = new ShaderPass( SobelOperatorShader ); effectSobel.uniforms[ 'resolution' ].value.x = window.innerWidth * window.devicePixelRatio; effectSobel.uniforms[ 'resolution' ].value.y = window.innerHeight * window.devicePixelRatio; - composer.addPass( effectSobel ); + + renderer.setEffects( [ effectGrayScale, effectSobel ] ); const controls = new OrbitControls( camera, renderer.domElement ); controls.enableZoom = false; @@ -110,7 +104,11 @@ const gui = new GUI(); - gui.add( params, 'enable' ); + gui.add( params, 'enable' ).onChange( ( value ) => { + + renderer.setEffects( value ? [ effectGrayScale, effectSobel ] : null ); + + } ); gui.open(); // @@ -125,7 +123,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); effectSobel.uniforms[ 'resolution' ].value.x = window.innerWidth * window.devicePixelRatio; effectSobel.uniforms[ 'resolution' ].value.y = window.innerHeight * window.devicePixelRatio; @@ -134,15 +131,7 @@ function animate() { - if ( params.enable === true ) { - - composer.render(); - - } else { - - renderer.render( scene, camera ); - - } + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_ssaa.html b/examples/webgl_postprocessing_ssaa.html index 9474d86d8d6bf0..08b1e2501c887f 100644 --- a/examples/webgl_postprocessing_ssaa.html +++ b/examples/webgl_postprocessing_ssaa.html @@ -31,13 +31,12 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; import { SSAARenderPass } from 'three/addons/postprocessing/SSAARenderPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let scene, renderer, composer; + let scene, renderer; let cameraP, ssaaRenderPassP; let cameraO, ssaaRenderPassO; + let activePass; let gui, stats; const params = { @@ -89,7 +88,7 @@ const aspect = width / height; const devicePixelRatio = window.devicePixelRatio || 1; - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( devicePixelRatio ); renderer.setSize( width, height ); renderer.setAnimationLoop( animate ); @@ -169,14 +168,11 @@ // postprocessing - composer = new EffectComposer( renderer ); - composer.setPixelRatio( 1 ); // ensure pixel ratio is always 1 for performance reasons ssaaRenderPassP = new SSAARenderPass( scene, cameraP ); - composer.addPass( ssaaRenderPassP ); ssaaRenderPassO = new SSAARenderPass( scene, cameraO ); - composer.addPass( ssaaRenderPassO ); - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + + activePass = ssaaRenderPassP; + renderer.setEffects( [ activePass ] ); window.addEventListener( 'resize', onWindowResize ); @@ -199,7 +195,6 @@ cameraO.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -238,12 +233,19 @@ ssaaRenderPassP.sampleLevel = ssaaRenderPassO.sampleLevel = params.sampleLevel; ssaaRenderPassP.unbiased = ssaaRenderPassO.unbiased = params.unbiased; - ssaaRenderPassP.enabled = ( params.camera === 'perspective' ); - ssaaRenderPassO.enabled = ( params.camera === 'orthographic' ); + const nextPass = params.camera === 'perspective' ? ssaaRenderPassP : ssaaRenderPassO; + const activeCamera = params.camera === 'perspective' ? cameraP : cameraO; + + if ( nextPass !== activePass ) { + + activePass = nextPass; + renderer.setEffects( [ activePass ] ); + + } cameraP.view.offsetX = params.viewOffsetX; - composer.render(); + renderer.render( scene, activeCamera ); stats.end(); diff --git a/examples/webgl_postprocessing_ssao.html b/examples/webgl_postprocessing_ssao.html index a153e8fe09670f..5c8db4032c5a76 100644 --- a/examples/webgl_postprocessing_ssao.html +++ b/examples/webgl_postprocessing_ssao.html @@ -32,14 +32,10 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { SSAOPass } from 'three/addons/postprocessing/SSAOPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; let container, stats; let camera, scene, renderer; - let composer; let group; init(); @@ -49,7 +45,7 @@ container = document.createElement( 'div' ); document.body.appendChild( container ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); document.body.appendChild( renderer.domElement ); @@ -100,16 +96,8 @@ const width = window.innerWidth; const height = window.innerHeight; - composer = new EffectComposer( renderer ); - - const renderPass = new RenderPass( scene, camera ); - composer.addPass( renderPass ); - const ssaoPass = new SSAOPass( scene, camera, width, height ); - composer.addPass( ssaoPass ); - - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ ssaoPass ] ); // Init gui const gui = new GUI(); @@ -143,7 +131,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -161,7 +148,7 @@ group.rotation.x = timer * 0.0002; group.rotation.y = timer * 0.0001; - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_postprocessing_taa.html b/examples/webgl_postprocessing_taa.html index 03209051adaf3d..15926e4f4df435 100644 --- a/examples/webgl_postprocessing_taa.html +++ b/examples/webgl_postprocessing_taa.html @@ -32,12 +32,9 @@ import Stats from 'three/addons/libs/stats.module.js'; import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { TAARenderPass } from 'three/addons/postprocessing/TAARenderPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, scene, renderer, composer, taaRenderPass, renderPass; + let camera, scene, renderer, taaRenderPass; let gui, stats; let index = 0; @@ -60,8 +57,7 @@ if ( taaRenderPass ) { - taaRenderPass.enabled = ( param.TAAEnabled === '1' ); - renderPass.enabled = ( param.TAAEnabled !== '1' ); + renderer.setEffects( param.TAAEnabled === '1' ? [ taaRenderPass ] : null ); } @@ -92,7 +88,7 @@ const container = document.getElementById( 'container' ); - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -130,18 +126,10 @@ // postprocessing - composer = new EffectComposer( renderer ); - taaRenderPass = new TAARenderPass( scene, camera ); taaRenderPass.unbiased = false; - composer.addPass( taaRenderPass ); - - renderPass = new RenderPass( scene, camera ); - renderPass.enabled = false; - composer.addPass( renderPass ); - const outputPass = new OutputPass(); - composer.addPass( outputPass ); + renderer.setEffects( [ taaRenderPass ] ); window.addEventListener( 'resize', onWindowResize ); @@ -156,7 +144,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -183,7 +170,7 @@ } - composer.render(); + renderer.render( scene, camera ); stats.update(); diff --git a/examples/webgl_postprocessing_unreal_bloom.html b/examples/webgl_postprocessing_unreal_bloom.html index 076441bd410c4b..25e076a00f50cb 100644 --- a/examples/webgl_postprocessing_unreal_bloom.html +++ b/examples/webgl_postprocessing_unreal_bloom.html @@ -42,13 +42,10 @@ import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, stats; - let composer, renderer, mixer, timer; + let camera, scene, stats; + let renderer, mixer, timer; const params = { threshold: 0, @@ -66,7 +63,7 @@ timer = new THREE.Timer(); timer.connect( document ); - const scene = new THREE.Scene(); + scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 ); camera.position.set( - 5, 2.5, - 3.5 ); @@ -89,7 +86,7 @@ // - renderer = new THREE.WebGLRenderer( { antialias: true } ); + renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); @@ -98,19 +95,12 @@ // - const renderScene = new RenderPass( scene, camera ); - const bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 ); bloomPass.threshold = params.threshold; bloomPass.strength = params.strength; bloomPass.radius = params.radius; - const outputPass = new OutputPass(); - - composer = new EffectComposer( renderer ); - composer.addPass( renderScene ); - composer.addPass( bloomPass ); - composer.addPass( outputPass ); + renderer.setEffects( [ bloomPass ] ); // @@ -169,7 +159,6 @@ camera.updateProjectionMatrix(); renderer.setSize( width, height ); - composer.setSize( width, height ); } @@ -183,7 +172,7 @@ stats.update(); - composer.render(); + renderer.render( scene, camera ); } diff --git a/examples/webgl_shader_lava.html b/examples/webgl_shader_lava.html index 476ec68f24ea6c..745975a5bdf9b9 100644 --- a/examples/webgl_shader_lava.html +++ b/examples/webgl_shader_lava.html @@ -87,12 +87,9 @@ import * as THREE from 'three'; - import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js'; - import { RenderPass } from 'three/addons/postprocessing/RenderPass.js'; import { BloomPass } from 'three/addons/postprocessing/BloomPass.js'; - import { OutputPass } from 'three/addons/postprocessing/OutputPass.js'; - let camera, renderer, composer, timer; + let camera, scene, renderer, timer; let uniforms, mesh; @@ -105,7 +102,7 @@ camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 1, 3000 ); camera.position.z = 4; - const scene = new THREE.Scene(); + scene = new THREE.Scene(); timer = new THREE.Timer(); timer.connect( document ); @@ -147,24 +144,16 @@ // - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { outputBufferType: THREE.HalfFloatType } ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( animate ); - renderer.autoClear = false; container.appendChild( renderer.domElement ); // - const renderModel = new RenderPass( scene, camera ); const effectBloom = new BloomPass( 1.25 ); - const outputPass = new OutputPass(); - - composer = new EffectComposer( renderer ); - - composer.addPass( renderModel ); - composer.addPass( effectBloom ); - composer.addPass( outputPass ); + renderer.setEffects( [ effectBloom ] ); // @@ -178,7 +167,6 @@ camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); - composer.setSize( window.innerWidth, window.innerHeight ); } @@ -195,8 +183,7 @@ mesh.rotation.y += 0.0125 * delta; mesh.rotation.x += 0.05 * delta; - renderer.clear(); - composer.render( 0.01 ); + renderer.render( scene, camera ); }