Applying postprocessing steps for specific objects












0















Based on this example i try to create a scene where several objects get the bloom, and other objects dont.



The white cube in the middle is supposed to be just white (without the bloom)



I'm confused on how to get the result that i want. I tried for example adding a 2nd scene with the white cube but it seems i cant get the order right. Maybe my approch with different scenes is wrong?



Whats the "best" way to achieve this behaviour? I always end up just seeing one scene, just the white cube or the 4 colored ones. (example below shows everything atm)



myFiddle: https://jsfiddle.net/qwertasyx/8qw3ys4z/16/



var scene,scene2,camera, controls, pointLight, stats;    
var composer, renderer, mixer;

var params = {
exposure: 1,
bloomStrength: 1.5,
bloomThreshold: 0,
bloomRadius: 0
};

var objects = ;

var clock = new THREE.Clock();
var container = document.getElementById( 'container' );

stats = new Stats();
//container.appendChild( stats.dom );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
container.appendChild( renderer.domElement );

scene = new THREE.Scene();
//scene2 = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 100 );
camera.position.set( 2.5,2.5, 10 );
scene.add( camera );
// scene2.add( camera );

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1;
controls.maxDistance = 10;
controls.target.set(2.5,2.5,0)
controls.update()

// scene.add( new THREE.AmbientLight( 0x404040 ) );

pointLight = new THREE.PointLight( 0xffffff, 1 );
// camera.add( pointLight );

var renderScene = new THREE.RenderPass( scene, camera );
//var renderScene2 = new THREE.RenderPass( scene2, camera );



var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength = params.bloomStrength;
bloomPass.radius = params.bloomRadius;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );

composer.addPass( bloomPass );
//composer.addPass( renderScene2 );


//objects
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
scene.add( cube );
objects.push(cube)

// cube thats supposed to be not bloomy
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 2.5
cube.position.x += 2.5
scene.add( cube );
objects.push(cube)

var gui = new dat.GUI();

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

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

} );

gui.add( params, 'bloomThreshold', 0.0, 1.0 ).onChange( function ( value ) {

bloomPass.threshold = Number( value );

} );

gui.add( params, 'bloomStrength', 0.0, 3.0 ).onChange( function ( value ) {

bloomPass.strength = Number( value );

} );

gui.add( params, 'bloomRadius', 0.0, 1.0 ).step( 0.01 ).onChange( function ( value ) {

bloomPass.radius = Number( value );

} );

window.onresize = function () {

var width = window.innerWidth;
var height = window.innerHeight;

camera.aspect = width / height;
camera.updateProjectionMatrix();

renderer.setSize( width, height );
composer.setSize( width, height );

};


function animate() {

requestAnimationFrame( animate );

objects.forEach(function(obj){
obj.rotation.z += obj.vrz;
});

stats.update();
composer.render();

}
animate();









share|improve this question

























  • i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

    – qwertasyx
    Nov 15 '18 at 8:40


















0















Based on this example i try to create a scene where several objects get the bloom, and other objects dont.



The white cube in the middle is supposed to be just white (without the bloom)



I'm confused on how to get the result that i want. I tried for example adding a 2nd scene with the white cube but it seems i cant get the order right. Maybe my approch with different scenes is wrong?



Whats the "best" way to achieve this behaviour? I always end up just seeing one scene, just the white cube or the 4 colored ones. (example below shows everything atm)



myFiddle: https://jsfiddle.net/qwertasyx/8qw3ys4z/16/



var scene,scene2,camera, controls, pointLight, stats;    
var composer, renderer, mixer;

var params = {
exposure: 1,
bloomStrength: 1.5,
bloomThreshold: 0,
bloomRadius: 0
};

var objects = ;

var clock = new THREE.Clock();
var container = document.getElementById( 'container' );

stats = new Stats();
//container.appendChild( stats.dom );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
container.appendChild( renderer.domElement );

scene = new THREE.Scene();
//scene2 = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 100 );
camera.position.set( 2.5,2.5, 10 );
scene.add( camera );
// scene2.add( camera );

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1;
controls.maxDistance = 10;
controls.target.set(2.5,2.5,0)
controls.update()

// scene.add( new THREE.AmbientLight( 0x404040 ) );

pointLight = new THREE.PointLight( 0xffffff, 1 );
// camera.add( pointLight );

var renderScene = new THREE.RenderPass( scene, camera );
//var renderScene2 = new THREE.RenderPass( scene2, camera );



var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength = params.bloomStrength;
bloomPass.radius = params.bloomRadius;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );

composer.addPass( bloomPass );
//composer.addPass( renderScene2 );


//objects
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
scene.add( cube );
objects.push(cube)

// cube thats supposed to be not bloomy
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 2.5
cube.position.x += 2.5
scene.add( cube );
objects.push(cube)

var gui = new dat.GUI();

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

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

} );

gui.add( params, 'bloomThreshold', 0.0, 1.0 ).onChange( function ( value ) {

bloomPass.threshold = Number( value );

} );

gui.add( params, 'bloomStrength', 0.0, 3.0 ).onChange( function ( value ) {

bloomPass.strength = Number( value );

} );

gui.add( params, 'bloomRadius', 0.0, 1.0 ).step( 0.01 ).onChange( function ( value ) {

bloomPass.radius = Number( value );

} );

window.onresize = function () {

var width = window.innerWidth;
var height = window.innerHeight;

camera.aspect = width / height;
camera.updateProjectionMatrix();

renderer.setSize( width, height );
composer.setSize( width, height );

};


function animate() {

requestAnimationFrame( animate );

objects.forEach(function(obj){
obj.rotation.z += obj.vrz;
});

stats.update();
composer.render();

}
animate();









share|improve this question

























  • i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

    – qwertasyx
    Nov 15 '18 at 8:40
















0












0








0








Based on this example i try to create a scene where several objects get the bloom, and other objects dont.



The white cube in the middle is supposed to be just white (without the bloom)



I'm confused on how to get the result that i want. I tried for example adding a 2nd scene with the white cube but it seems i cant get the order right. Maybe my approch with different scenes is wrong?



Whats the "best" way to achieve this behaviour? I always end up just seeing one scene, just the white cube or the 4 colored ones. (example below shows everything atm)



myFiddle: https://jsfiddle.net/qwertasyx/8qw3ys4z/16/



var scene,scene2,camera, controls, pointLight, stats;    
var composer, renderer, mixer;

var params = {
exposure: 1,
bloomStrength: 1.5,
bloomThreshold: 0,
bloomRadius: 0
};

var objects = ;

var clock = new THREE.Clock();
var container = document.getElementById( 'container' );

stats = new Stats();
//container.appendChild( stats.dom );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
container.appendChild( renderer.domElement );

scene = new THREE.Scene();
//scene2 = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 100 );
camera.position.set( 2.5,2.5, 10 );
scene.add( camera );
// scene2.add( camera );

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1;
controls.maxDistance = 10;
controls.target.set(2.5,2.5,0)
controls.update()

// scene.add( new THREE.AmbientLight( 0x404040 ) );

pointLight = new THREE.PointLight( 0xffffff, 1 );
// camera.add( pointLight );

var renderScene = new THREE.RenderPass( scene, camera );
//var renderScene2 = new THREE.RenderPass( scene2, camera );



var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength = params.bloomStrength;
bloomPass.radius = params.bloomRadius;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );

composer.addPass( bloomPass );
//composer.addPass( renderScene2 );


//objects
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
scene.add( cube );
objects.push(cube)

// cube thats supposed to be not bloomy
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 2.5
cube.position.x += 2.5
scene.add( cube );
objects.push(cube)

var gui = new dat.GUI();

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

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

} );

gui.add( params, 'bloomThreshold', 0.0, 1.0 ).onChange( function ( value ) {

bloomPass.threshold = Number( value );

} );

gui.add( params, 'bloomStrength', 0.0, 3.0 ).onChange( function ( value ) {

bloomPass.strength = Number( value );

} );

gui.add( params, 'bloomRadius', 0.0, 1.0 ).step( 0.01 ).onChange( function ( value ) {

bloomPass.radius = Number( value );

} );

window.onresize = function () {

var width = window.innerWidth;
var height = window.innerHeight;

camera.aspect = width / height;
camera.updateProjectionMatrix();

renderer.setSize( width, height );
composer.setSize( width, height );

};


function animate() {

requestAnimationFrame( animate );

objects.forEach(function(obj){
obj.rotation.z += obj.vrz;
});

stats.update();
composer.render();

}
animate();









share|improve this question
















Based on this example i try to create a scene where several objects get the bloom, and other objects dont.



The white cube in the middle is supposed to be just white (without the bloom)



I'm confused on how to get the result that i want. I tried for example adding a 2nd scene with the white cube but it seems i cant get the order right. Maybe my approch with different scenes is wrong?



Whats the "best" way to achieve this behaviour? I always end up just seeing one scene, just the white cube or the 4 colored ones. (example below shows everything atm)



myFiddle: https://jsfiddle.net/qwertasyx/8qw3ys4z/16/



var scene,scene2,camera, controls, pointLight, stats;    
var composer, renderer, mixer;

var params = {
exposure: 1,
bloomStrength: 1.5,
bloomThreshold: 0,
bloomRadius: 0
};

var objects = ;

var clock = new THREE.Clock();
var container = document.getElementById( 'container' );

stats = new Stats();
//container.appendChild( stats.dom );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.toneMapping = THREE.ReinhardToneMapping;
container.appendChild( renderer.domElement );

scene = new THREE.Scene();
//scene2 = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 100 );
camera.position.set( 2.5,2.5, 10 );
scene.add( camera );
// scene2.add( camera );

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1;
controls.maxDistance = 10;
controls.target.set(2.5,2.5,0)
controls.update()

// scene.add( new THREE.AmbientLight( 0x404040 ) );

pointLight = new THREE.PointLight( 0xffffff, 1 );
// camera.add( pointLight );

var renderScene = new THREE.RenderPass( scene, camera );
//var renderScene2 = new THREE.RenderPass( scene2, camera );



var bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
bloomPass.renderToScreen = true;
bloomPass.threshold = params.bloomThreshold;
bloomPass.strength = params.bloomStrength;
bloomPass.radius = params.bloomRadius;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );

composer.addPass( bloomPass );
//composer.addPass( renderScene2 );


//objects
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.x += 5
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 5
scene.add( cube );
objects.push(cube)

var material = new THREE.MeshBasicMaterial( { color: 0x0000ff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
scene.add( cube );
objects.push(cube)

// cube thats supposed to be not bloomy
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );
cube.vrz = 0.01;
cube.position.y += 2.5
cube.position.x += 2.5
scene.add( cube );
objects.push(cube)

var gui = new dat.GUI();

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

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

} );

gui.add( params, 'bloomThreshold', 0.0, 1.0 ).onChange( function ( value ) {

bloomPass.threshold = Number( value );

} );

gui.add( params, 'bloomStrength', 0.0, 3.0 ).onChange( function ( value ) {

bloomPass.strength = Number( value );

} );

gui.add( params, 'bloomRadius', 0.0, 1.0 ).step( 0.01 ).onChange( function ( value ) {

bloomPass.radius = Number( value );

} );

window.onresize = function () {

var width = window.innerWidth;
var height = window.innerHeight;

camera.aspect = width / height;
camera.updateProjectionMatrix();

renderer.setSize( width, height );
composer.setSize( width, height );

};


function animate() {

requestAnimationFrame( animate );

objects.forEach(function(obj){
obj.rotation.z += obj.vrz;
});

stats.update();
composer.render();

}
animate();






three.js shader post-processing






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 12:16







qwertasyx

















asked Nov 13 '18 at 11:48









qwertasyxqwertasyx

157




157













  • i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

    – qwertasyx
    Nov 15 '18 at 8:40





















  • i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

    – qwertasyx
    Nov 15 '18 at 8:40



















i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

– qwertasyx
Nov 15 '18 at 8:40







i kind of achieved what i want: jsfiddle.net/qwertasyx/qaht7beg/1 .. now if that bloom would glow also over the "not bloomy" box i would be happy :)

– qwertasyx
Nov 15 '18 at 8:40














1 Answer
1






active

oldest

votes


















0














I had a similar problem once. An example from this comment helped me.



Note that in that example there are 2 scenes and 2 composers (the final composer gets output of the previous composer as its input)



ppoFinal.blendPass.uniforms.tAdd.value = ppoRGB.composer.renderTarget2.texture;


and render() is called on both composers.



ppoRGB.composer.render();
ppoFinal.composer.render();


This pattern allows you to apply postprocessing effects selectively and it works well. The problem is the scalability of the method and probably performance. Because when you want to apply another object with yet different effect, you need to introduce 3rd scene and 3rd composer. For my little project in the past I ended up with 4 scenes and 4 composers...






share|improve this answer
























  • thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

    – qwertasyx
    Nov 15 '18 at 8:20













  • The trick with layers is much smarter. I love it!

    – Lukasz Guminski
    Nov 15 '18 at 17:34











  • any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

    – qwertasyx
    Nov 16 '18 at 12:09











  • Nope, sorry. I played with your example for a few minutes, but nothing worked.

    – Lukasz Guminski
    Nov 16 '18 at 14:50











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280396%2fapplying-postprocessing-steps-for-specific-objects%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














I had a similar problem once. An example from this comment helped me.



Note that in that example there are 2 scenes and 2 composers (the final composer gets output of the previous composer as its input)



ppoFinal.blendPass.uniforms.tAdd.value = ppoRGB.composer.renderTarget2.texture;


and render() is called on both composers.



ppoRGB.composer.render();
ppoFinal.composer.render();


This pattern allows you to apply postprocessing effects selectively and it works well. The problem is the scalability of the method and probably performance. Because when you want to apply another object with yet different effect, you need to introduce 3rd scene and 3rd composer. For my little project in the past I ended up with 4 scenes and 4 composers...






share|improve this answer
























  • thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

    – qwertasyx
    Nov 15 '18 at 8:20













  • The trick with layers is much smarter. I love it!

    – Lukasz Guminski
    Nov 15 '18 at 17:34











  • any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

    – qwertasyx
    Nov 16 '18 at 12:09











  • Nope, sorry. I played with your example for a few minutes, but nothing worked.

    – Lukasz Guminski
    Nov 16 '18 at 14:50
















0














I had a similar problem once. An example from this comment helped me.



Note that in that example there are 2 scenes and 2 composers (the final composer gets output of the previous composer as its input)



ppoFinal.blendPass.uniforms.tAdd.value = ppoRGB.composer.renderTarget2.texture;


and render() is called on both composers.



ppoRGB.composer.render();
ppoFinal.composer.render();


This pattern allows you to apply postprocessing effects selectively and it works well. The problem is the scalability of the method and probably performance. Because when you want to apply another object with yet different effect, you need to introduce 3rd scene and 3rd composer. For my little project in the past I ended up with 4 scenes and 4 composers...






share|improve this answer
























  • thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

    – qwertasyx
    Nov 15 '18 at 8:20













  • The trick with layers is much smarter. I love it!

    – Lukasz Guminski
    Nov 15 '18 at 17:34











  • any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

    – qwertasyx
    Nov 16 '18 at 12:09











  • Nope, sorry. I played with your example for a few minutes, but nothing worked.

    – Lukasz Guminski
    Nov 16 '18 at 14:50














0












0








0







I had a similar problem once. An example from this comment helped me.



Note that in that example there are 2 scenes and 2 composers (the final composer gets output of the previous composer as its input)



ppoFinal.blendPass.uniforms.tAdd.value = ppoRGB.composer.renderTarget2.texture;


and render() is called on both composers.



ppoRGB.composer.render();
ppoFinal.composer.render();


This pattern allows you to apply postprocessing effects selectively and it works well. The problem is the scalability of the method and probably performance. Because when you want to apply another object with yet different effect, you need to introduce 3rd scene and 3rd composer. For my little project in the past I ended up with 4 scenes and 4 composers...






share|improve this answer













I had a similar problem once. An example from this comment helped me.



Note that in that example there are 2 scenes and 2 composers (the final composer gets output of the previous composer as its input)



ppoFinal.blendPass.uniforms.tAdd.value = ppoRGB.composer.renderTarget2.texture;


and render() is called on both composers.



ppoRGB.composer.render();
ppoFinal.composer.render();


This pattern allows you to apply postprocessing effects selectively and it works well. The problem is the scalability of the method and probably performance. Because when you want to apply another object with yet different effect, you need to introduce 3rd scene and 3rd composer. For my little project in the past I ended up with 4 scenes and 4 composers...







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 12:18









Lukasz GuminskiLukasz Guminski

383214




383214













  • thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

    – qwertasyx
    Nov 15 '18 at 8:20













  • The trick with layers is much smarter. I love it!

    – Lukasz Guminski
    Nov 15 '18 at 17:34











  • any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

    – qwertasyx
    Nov 16 '18 at 12:09











  • Nope, sorry. I played with your example for a few minutes, but nothing worked.

    – Lukasz Guminski
    Nov 16 '18 at 14:50



















  • thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

    – qwertasyx
    Nov 15 '18 at 8:20













  • The trick with layers is much smarter. I love it!

    – Lukasz Guminski
    Nov 15 '18 at 17:34











  • any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

    – qwertasyx
    Nov 16 '18 at 12:09











  • Nope, sorry. I played with your example for a few minutes, but nothing worked.

    – Lukasz Guminski
    Nov 16 '18 at 14:50

















thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

– qwertasyx
Nov 15 '18 at 8:20







thanks for the hint with the multiple composers, i tried but couldn´t really achieve what i want. I ran into Problems with rendering bloom behind solid objects, which led me to this example.

– qwertasyx
Nov 15 '18 at 8:20















The trick with layers is much smarter. I love it!

– Lukasz Guminski
Nov 15 '18 at 17:34





The trick with layers is much smarter. I love it!

– Lukasz Guminski
Nov 15 '18 at 17:34













any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

– qwertasyx
Nov 16 '18 at 12:09





any idea how i could make the bloom also "glow" over the grey not blooming objects? :) jsfiddle.net/qwertasyx/qaht7beg/1

– qwertasyx
Nov 16 '18 at 12:09













Nope, sorry. I played with your example for a few minutes, but nothing worked.

– Lukasz Guminski
Nov 16 '18 at 14:50





Nope, sorry. I played with your example for a few minutes, but nothing worked.

– Lukasz Guminski
Nov 16 '18 at 14:50


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280396%2fapplying-postprocessing-steps-for-specific-objects%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Tangent Lines Diagram Along Smooth Curve

Yusuf al-Mu'taman ibn Hud

Zucchini