什么是 Three.js 的 CopyShader?

Dan*_*Dan 5 three.js aframe

我看到很多项目CopyShader在后处理链的末端使用。我在 Three.js 上找不到它的任何文档。它具体有什么作用?另外,为什么setRenderTarget这里有必要?如果移除,则不会应用效果。但是如果包含它,那么它将“冻结”a-scene到位,停止所有动画。我能够使用ticksetInterval恢复动画,但性能受到了巨大的打击。

例如:

var composer = new THREE.EffectComposer( renderer );

renderer.setRenderTarget( composer.readBuffer );

var renderPass = new THREE.RenderPass( scene, camera );

var copyPass = new THREE.ShaderPass( CopyShader );
composer.addPass( renderPass );

var vignettePass = new ShaderPass( VignetteShader );
vignettePass.uniforms[ "darkness" ].value = 1.0;

composer.addPass( vignettePass );
composer.addPass( copyPass );
composer.render();

this.composer = composer; // To run as composer.render()
Run Code Online (Sandbox Code Playgroud)

man*_*rax 7

后处理管道在 2 个屏幕外缓冲区之间来回渲染。当最后一遍完成后,需要将结果复制到实际屏幕上。这就是 CopyShader 所做的。可以想象,您可以构建您的通道,以便将最终通道直接渲染到可见屏幕,但在实践中,这会引入一些复杂性。