Skip to content

Commit 3dba508

Browse files
authored
WebGLRenderer: Add outputBufferType and setEffects() (#32461)
1 parent c3e7b3f commit 3dba508

File tree

9 files changed

+427
-65
lines changed

9 files changed

+427
-65
lines changed

examples/jsm/postprocessing/OutputPass.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ class OutputPass extends Pass {
3939

4040
super();
4141

42+
/**
43+
* This flag indicates that this is an output pass.
44+
*
45+
* @type {boolean}
46+
* @readonly
47+
* @default true
48+
*/
49+
this.isOutputPass = true;
50+
4251
/**
4352
* The pass uniforms.
4453
*

examples/jsm/postprocessing/RenderPass.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ class RenderPass extends Pass {
9393
* @default false
9494
*/
9595
this.needsSwap = false;
96+
97+
/**
98+
* This flag indicates that this pass renders the scene itself.
99+
*
100+
* @type {boolean}
101+
* @readonly
102+
* @default true
103+
*/
104+
this.isRenderPass = true;
105+
96106
this._oldClearColor = new Color();
97107

98108
}
-755 Bytes
Loading
5.91 KB
Loading

examples/webgl_loader_ldraw.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181

8282
//
8383

84-
renderer = new THREE.WebGLRenderer( { antialias: true } );
84+
renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } );
8585
renderer.setPixelRatio( window.devicePixelRatio );
8686
renderer.setSize( window.innerWidth, window.innerHeight );
8787
renderer.setAnimationLoop( animate );

examples/webgl_watch.html

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@
3535

3636
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
3737

38-
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
3938
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
40-
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';
4139
import { TAARenderPass } from 'three/addons/postprocessing/TAARenderPass.js';
4240

43-
let composer, camera, scene, renderer;
41+
let camera, scene, renderer;
4442
let gui, dirLight, pointLight, controls, bloomPass, taaPass;
4543
let ready = false;
4644

@@ -53,7 +51,7 @@
5351
metalness: 1.0,
5452
opacity: 0.4,
5553
threshold: 0,
56-
strength: 0.08,
54+
strength: 0.007,
5755
radius: 0.0,
5856
postProcess: false
5957
};
@@ -69,7 +67,7 @@
6967

7068
scene = new THREE.Scene();
7169

72-
renderer = new THREE.WebGLRenderer( { antialias: true } );
70+
renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } );
7371
renderer.setPixelRatio( window.devicePixelRatio );
7472
renderer.setSize( window.innerWidth, window.innerHeight );
7573
renderer.setAnimationLoop( animate );
@@ -79,6 +77,14 @@
7977
renderer.shadowMap.type = THREE.VSMShadowMap;
8078
container.appendChild( renderer.domElement );
8179

80+
taaPass = new TAARenderPass( scene, camera );
81+
taaPass.sampleLevel = 2;
82+
83+
bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
84+
bloomPass.threshold = setting.threshold;
85+
bloomPass.strength = setting.strength;
86+
bloomPass.radius = setting.radius;
87+
8288
new HDRLoader()
8389
.setPath( 'textures/equirectangular/' )
8490
.load( 'lobe.hdr', function ( texture ) {
@@ -213,32 +219,11 @@
213219

214220
if ( b ) {
215221

216-
if ( composer ) return;
217-
218-
bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
219-
bloomPass.threshold = setting.threshold;
220-
bloomPass.strength = setting.strength;
221-
bloomPass.radius = setting.radius;
222-
223-
taaPass = new TAARenderPass( scene, camera );
224-
taaPass.sampleLevel = 2;
225-
taaPass.unbiased = false;
226-
227-
composer = new EffectComposer( renderer );
228-
composer.setPixelRatio( window.devicePixelRatio );
229-
composer.setSize( window.innerWidth, window.innerHeight );
230-
231-
composer.addPass( taaPass );
232-
composer.addPass( bloomPass );
233-
composer.addPass( new OutputPass() );
222+
renderer.setEffects( [ taaPass, bloomPass ] );
234223

235224
} else {
236225

237-
if ( ! composer ) return;
238-
composer.dispose();
239-
composer = null;
240-
bloomPass = null;
241-
taaPass = null;
226+
renderer.setEffects( null );
242227

243228
}
244229

@@ -255,7 +240,7 @@
255240

256241
gui.add( setting, 'postProcess' ).onChange( postProcess );
257242
gui.add( setting, 'threshold', 0, 1, 0.01 ).onChange( upBloom );
258-
gui.add( setting, 'strength', 0, 3, 0.01 ).onChange( upBloom );
243+
gui.add( setting, 'strength', 0, 0.1, 0.001 ).onChange( upBloom );
259244
gui.add( setting, 'radius', 0, 1, 0.01 ).onChange( upBloom );
260245

261246
}
@@ -306,11 +291,6 @@
306291
camera.aspect = width / height;
307292
camera.updateProjectionMatrix();
308293
renderer.setSize( width, height );
309-
if ( composer ) {
310-
311-
composer.setSize( width, height );
312-
313-
}
314294

315295
}
316296

@@ -322,8 +302,7 @@
322302

323303
TWEEN.update();
324304

325-
if ( composer ) composer.render();
326-
else renderer.render( scene, camera );
305+
renderer.render( scene, camera );
327306

328307
if ( ready ) getTime();
329308

examples/webxr_xr_controls_transform.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
import { TransformControls } from 'three/addons/controls/TransformControls.js';
2828
import { XRButton } from 'three/addons/webxr/XRButton.js';
2929
import { XRControllerModelFactory } from 'three/addons/webxr/XRControllerModelFactory.js';
30+
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
3031

3132
let container;
3233
let camera, scene, renderer;
34+
let bloomPass;
3335
let controller1, controller2, line;
3436
let controllerGrip1, controllerGrip2;
3537

@@ -110,14 +112,20 @@
110112

111113
//
112114

113-
renderer = new THREE.WebGLRenderer( { antialias: true } );
115+
renderer = new THREE.WebGLRenderer( { antialias: true, outputBufferType: THREE.HalfFloatType } );
114116
renderer.setPixelRatio( window.devicePixelRatio );
115117
renderer.setSize( window.innerWidth, window.innerHeight );
116118
renderer.setAnimationLoop( animate );
117119
renderer.shadowMap.enabled = true;
120+
renderer.toneMapping = THREE.ACESFilmicToneMapping;
118121
renderer.xr.enabled = true;
119122
container.appendChild( renderer.domElement );
120123

124+
// post-processing
125+
126+
bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
127+
renderer.setEffects( [ bloomPass ] );
128+
121129
document.body.appendChild( XRButton.createButton( renderer ) );
122130

123131
// controllers

0 commit comments

Comments
 (0)