Three.js 如何应用后期处理EffectComposer渲染过程而不清除以前的渲染过程?
在three.js中,我在背景中有一个红色平面,在前景中有一个旋转的白色立方体。我试图将Three.js 如何应用后期处理EffectComposer渲染过程而不清除以前的渲染过程?,three.js,3d,render,post-processing,Three.js,3d,Render,Post Processing,在three.js中,我在背景中有一个红色平面,在前景中有一个旋转的白色立方体。我试图将TAARenderPass添加到多维数据集,同时保持背景平面不变。但是,添加TAARenderPass(以及BokehPass、SAOPass,以及其他常见的后期处理效果)将清除其后面的所有内容,红色平面将消失 我在这里深入研究了类似的问题,并尝试了renderer.setClearColor(0x000000,0),renderer.autoClear=false,以及renderer.autoClearC
TAARenderPass
添加到多维数据集,同时保持背景平面不变。但是,添加TAARenderPass
(以及BokehPass
、SAOPass
,以及其他常见的后期处理效果)将清除其后面的所有内容,红色平面将消失
我在这里深入研究了类似的问题,并尝试了renderer.setClearColor(0x000000,0)
,renderer.autoClear=false
,以及renderer.autoClearColor=false
。现在一切都是这样设置的:
renderer = new THREE.WebGLRenderer( { alpha: true, antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setClearColor( 0x000000, 0 );
document.body.appendChild( renderer.domElement );
// EffectComposer
const params = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: false };
const renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, params );
effectComposer = new THREE.EffectComposer( renderer , renderTarget );
effectComposer.setSize( window.innerWidth, window.innerHeight );
// Render Passes
const renderPassBg = new THREE.RenderPass( sceneBg , camera );
const renderPassFg = new THREE.RenderPass( sceneFg , camera );
renderPassFg.clear = false;
const taaRenderPass = new THREE.TAARenderPass( sceneFg, camera );
taaRenderPass.clear = false;
const copyPass = new THREE.ShaderPass( THREE.CopyShader );
copyPass.renderToScreen = true;
effectComposer.addPass( renderPassBg );
effectComposer.addPass( renderPassFg );
// effectComposer.addPass( taaRenderPass );
effectComposer.addPass( copyPass );
有一个完整的密码笔
当注释掉effectComposer.addPass(taaRenderPass)
时,一切都按预期工作(减去后处理效果)。但是当删除注释时,只有白色立方体渲染
如何在
taaRenderPass
后面渲染红色平面?谢谢大家! 你能在taa通行证之前用renderToScreen=false
插入copyPass吗?你能在taa通行证之前用renderToScreen=false
插入copyPass
吗?谢谢你的建议。我尝试在OP中链接的代码笔中添加第二个copyPass
,带有renderToScreen=false
,并在addPass(taaRenderPass)
之前立即执行addPass(secondCopyPass)
操作,但仍然存在相同的问题--taaRenderPass
清除它前面的所有内容。可以肯定的是,我是否有可能误解了如何实施你的建议?啊。。刚刚意识到这是TAA(暂时的反别名)通行证。TAA需要将屏幕空间速度渲染到帧缓冲区,以便在antialias中使用。。这可能就是为什么缓冲区会被核爆。你能换成FXA吗?谢谢你的建议。我尝试在OP中链接的代码笔中添加第二个copyPass
,带有renderToScreen=false
,并在addPass(taaRenderPass)
之前立即执行addPass(secondCopyPass)
操作,但仍然存在相同的问题--taaRenderPass
清除它前面的所有内容。可以肯定的是,我是否有可能误解了如何实施你的建议?啊。。刚刚意识到这是TAA(暂时的反别名)通行证。TAA需要将屏幕空间速度渲染到帧缓冲区,以便在antialias中使用。。这可能就是为什么缓冲区会被核爆。你能切换到fxantialias吗?