Skip to content

Commit

Permalink
OutputPass: Extract renderer settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mugen87 committed Jul 5, 2023
1 parent 0a01aad commit 77863c2
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 17 deletions.
42 changes: 31 additions & 11 deletions examples/jsm/postprocessing/OutputPass.js
Expand Up @@ -5,20 +5,18 @@ import {
LinearToneMapping,
ReinhardToneMapping,
CineonToneMapping,
ACESFilmicToneMapping
ACESFilmicToneMapping,
SRGBColorSpace
} from 'three';
import { Pass, FullScreenQuad } from './Pass.js';
import { OutputShader } from '../shaders/OutputShader.js';

class OutputPass extends Pass {

constructor( toneMapping = NoToneMapping, toneMappingExposure = 1 ) {
constructor() {

super();

this.toneMapping = toneMapping;
this.toneMappingExposure = toneMappingExposure;

//

const shader = OutputShader;
Expand All @@ -31,19 +29,41 @@ class OutputPass extends Pass {
fragmentShader: shader.fragmentShader
} );

if ( toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';
else if ( toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';
else if ( toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';
else if ( toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';

this.fsQuad = new FullScreenQuad( this.material );

// internal cache

this._outputColorSpace = null;
this._toneMapping = null;

}

render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {

this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
this.uniforms[ 'toneMappingExposure' ].value = this.toneMappingExposure;
this.uniforms[ 'toneMappingExposure' ].value = renderer.toneMappingExposure;

// rebuild defines if required

if ( this._outputColorSpace !== renderer.outputColorSpace || this._toneMapping !== renderer.toneMapping ) {

this._outputColorSpace = renderer.outputColorSpace;
this._toneMapping = renderer.toneMapping;

this.material.defines = {};

if ( this._outputColorSpace == SRGBColorSpace ) this.material.defines.SRGB_COLOR_SPACE = '';

if ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';
else if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';
else if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';
else if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';

this.material.needsUpdate = true;

}

//

if ( this.renderToScreen === true ) {

Expand Down
6 changes: 5 additions & 1 deletion examples/jsm/shaders/OutputShader.js
Expand Up @@ -65,7 +65,11 @@ const OutputShader = {
// color space
gl_FragColor = LinearTosRGB( gl_FragColor );
#ifdef SRGB_COLOR_SPACE
gl_FragColor = LinearTosRGB( gl_FragColor );
#endif
}`

Expand Down
3 changes: 2 additions & 1 deletion examples/webgl_postprocessing_3dlut.html
Expand Up @@ -124,13 +124,14 @@
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.useLegacyLights = false;
renderer.toneMapping = THREE.ACESFilmicToneMapping;
container.appendChild( renderer.domElement );

composer = new EffectComposer( renderer );
composer.setPixelRatio( window.devicePixelRatio );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( new RenderPass( scene, camera ) );
composer.addPass( new OutputPass( THREE.ACESFilmicToneMapping ) );
composer.addPass( new OutputPass() );

lutPass = new LUTPass();
composer.addPass( lutPass );
Expand Down
5 changes: 3 additions & 2 deletions examples/webgl_postprocessing_unreal_bloom.html
Expand Up @@ -75,6 +75,7 @@
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
renderer.useLegacyLights = false;
container.appendChild( renderer.domElement );

Expand All @@ -101,7 +102,7 @@
bloomPass.strength = params.strength;
bloomPass.radius = params.radius;

const outputPass = new OutputPass( THREE.ReinhardToneMapping );
const outputPass = new OutputPass();

composer = new EffectComposer( renderer );
composer.addPass( renderScene );
Expand Down Expand Up @@ -148,7 +149,7 @@

toneMappingFolder.add( params, 'exposure', 0.1, 2 ).onChange( function ( value ) {

outputPass.toneMappingExposure = Math.pow( value, 4.0 );
renderer.toneMappingExposure = Math.pow( value, 4.0 );

} );

Expand Down
5 changes: 3 additions & 2 deletions examples/webgl_postprocessing_unreal_bloom_selective.html
Expand Up @@ -86,6 +86,7 @@
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.useLegacyLights = false;
renderer.toneMapping = THREE.ReinhardToneMapping;
document.body.appendChild( renderer.domElement );

const scene = new THREE.Scene();
Expand Down Expand Up @@ -125,7 +126,7 @@
);
mixPass.needsSwap = true;

const outputPass = new OutputPass( THREE.ReinhardToneMapping );
const outputPass = new OutputPass();

const finalComposer = new EffectComposer( renderer );
finalComposer.addPass( renderScene );
Expand Down Expand Up @@ -167,7 +168,7 @@

toneMappingFolder.add( params, 'exposure', 0.1, 2 ).onChange( function ( value ) {

outputPass.toneMappingExposure = Math.pow( value, 4.0 );
renderer.toneMappingExposure = Math.pow( value, 4.0 );
render();

} );
Expand Down

0 comments on commit 77863c2

Please sign in to comment.