Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 如何应用后期处理EffectComposer渲染过程而不清除以前的渲染过程?_Three.js_3d_Render_Post Processing - Fatal编程技术网

Three.js 如何应用后期处理EffectComposer渲染过程而不清除以前的渲染过程?

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

在three.js中,我在背景中有一个红色平面,在前景中有一个旋转的白色立方体。我试图将
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吗?