|
@@ -15,6 +15,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
var scaledHeight = Math.floor( currentScale * fullHeight );
|
|
|
|
|
|
var brightness = parameters.brightness !== undefined ? parameters.brightness : 1;
|
|
|
+ var tonemapping = parameters.tonemapping !== undefined ? parameters.tonemapping : THREE.SimpleOperator;
|
|
|
var antialias = parameters.antialias !== undefined ? parameters.antialias : false;
|
|
|
|
|
|
this.renderer = parameters.renderer;
|
|
@@ -205,7 +206,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
uniforms.viewWidth.value = scaledWidth;
|
|
|
uniforms.viewHeight.value = scaledHeight;
|
|
|
|
|
|
- resizableMaterials.push( material );
|
|
|
+ resizableMaterials.push( { "material": material } );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -403,7 +404,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
// sync proxy uniforms to the original light
|
|
|
|
|
@@ -479,7 +480,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
// sync proxy uniforms to the original light
|
|
|
|
|
@@ -545,7 +546,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
// sync proxy uniforms to the original light
|
|
|
|
|
@@ -611,7 +612,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
// sync proxy uniforms to the original light
|
|
|
|
|
@@ -700,7 +701,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
// sync proxy uniforms to the original light
|
|
|
|
|
@@ -736,7 +737,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
// keep reference for size reset
|
|
|
|
|
|
- resizableMaterials.push( materialLight );
|
|
|
+ resizableMaterials.push( { "material": materialLight } );
|
|
|
|
|
|
return meshLight;
|
|
|
|
|
@@ -851,6 +852,25 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ this.addEffect = function ( effect, normalDepthUniform, colorUniform ) {
|
|
|
+
|
|
|
+ if ( effect.material && effect.uniforms ) {
|
|
|
+
|
|
|
+ if ( normalDepthUniform ) effect.uniforms[ normalDepthUniform ].value = compNormalDepth.renderTarget2;
|
|
|
+ if ( colorUniform ) effect.uniforms[ colorUniform ].value = compColor.renderTarget2;
|
|
|
+
|
|
|
+ if ( normalDepthUniform || colorUniform ) {
|
|
|
+
|
|
|
+ resizableMaterials.push( { "material": effect.material, "normalDepth": normalDepthUniform, "color": colorUniform } );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ compFinal.insertPass( effect, -1 );
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
this.setScale = function ( scale ) {
|
|
|
|
|
|
currentScale = scale;
|
|
@@ -868,13 +888,19 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
for ( var i = 0, il = resizableMaterials.length; i < il; i ++ ) {
|
|
|
|
|
|
- var uniforms = resizableMaterials[ i ].uniforms;
|
|
|
+ var materialEntry = resizableMaterials[ i ];
|
|
|
|
|
|
- uniforms[ "viewWidth" ].value = scaledWidth;
|
|
|
- uniforms[ "viewHeight" ].value = scaledHeight;
|
|
|
+ var material = materialEntry.material;
|
|
|
+ var uniforms = material.uniforms;
|
|
|
|
|
|
- if ( uniforms[ 'samplerColor' ] ) uniforms[ 'samplerColor' ].value = compColor.renderTarget2;
|
|
|
- if ( uniforms[ 'samplerNormalDepth' ] ) uniforms[ 'samplerNormalDepth' ].value = compNormalDepth.renderTarget2;
|
|
|
+ var colorLabel = materialEntry.color !== undefined ? materialEntry.color : 'samplerColor';
|
|
|
+ var normalDepthLabel = materialEntry.normalDepth !== undefined ? materialEntry.normalDepth : 'samplerNormalDepth';
|
|
|
+
|
|
|
+ if ( uniforms[ colorLabel ] ) uniforms[ colorLabel ].value = compColor.renderTarget2;
|
|
|
+ if ( uniforms[ normalDepthLabel ] ) uniforms[ normalDepthLabel ].value = compNormalDepth.renderTarget2;
|
|
|
+
|
|
|
+ if ( uniforms[ 'viewWidth' ] ) uniforms[ "viewWidth" ].value = scaledWidth;
|
|
|
+ if ( uniforms[ 'viewHeight' ] ) uniforms[ "viewHeight" ].value = scaledHeight;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1117,6 +1143,20 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
compositePass.material.blending = THREE.NoBlending;
|
|
|
compositePass.clear = true;
|
|
|
|
|
|
+ var defines;
|
|
|
+
|
|
|
+ switch ( tonemapping ) {
|
|
|
+
|
|
|
+ case THREE.SimpleOperator: defines = { "TONEMAP_SIMPLE": true }; break;
|
|
|
+ case THREE.LinearOperator: defines = { "TONEMAP_LINEAR": true }; break;
|
|
|
+ case THREE.ReinhardOperator: defines = { "TONEMAP_REINHARD": true }; break;
|
|
|
+ case THREE.FilmicOperator: defines = { "TONEMAP_FILMIC": true }; break;
|
|
|
+ case THREE.UnchartedOperator: defines = { "TONEMAP_UNCHARTED": true }; break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ compositePass.material.defines = defines;
|
|
|
+
|
|
|
// FXAA
|
|
|
|
|
|
effectFXAA = new THREE.ShaderPass( THREE.FXAAShader );
|
|
@@ -1138,6 +1178,7 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
|
|
|
effectFXAA.enabled = false;
|
|
|
compositePass.renderToScreen = true;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
};
|
|
@@ -1147,3 +1188,12 @@ THREE.WebGLDeferredRenderer = function ( parameters ) {
|
|
|
createRenderTargets();
|
|
|
|
|
|
};
|
|
|
+
|
|
|
+// tonemapping operator types
|
|
|
+
|
|
|
+THREE.NoOperator = 0;
|
|
|
+THREE.SimpleOperator = 1;
|
|
|
+THREE.LinearOperator = 2;
|
|
|
+THREE.ReinhardOperator = 3;
|
|
|
+THREE.FilmicOperator = 4;
|
|
|
+THREE.UnchartedOperator = 5;
|