Three.js 的 CopyShader 是什么?
What is CopyShader for Three.js?
我看到很多项目在 post 处理链的末端使用 CopyShader
。我在 Three.js 上找不到它的任何文档。它具体做什么?另外,为什么这里需要setRenderTarget
?如果移除,则不会应用效果。但如果包含它,那么它将 'freeze' 和 a-scene
就位,停止所有动画。我可以使用 tick
和 setInterval
恢复动画,但性能受到很大影响。
例如:
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()
后处理管道在 2 个屏幕外缓冲区之间来回渲染。当最后一遍完成时,需要将结果复制到实际屏幕上。这就是 CopyShader 所做的。可以想象,您可以构建您的通道,以便最终通道直接渲染到可见屏幕,但实际上,这会带来一些复杂性。
我看到很多项目在 post 处理链的末端使用 CopyShader
。我在 Three.js 上找不到它的任何文档。它具体做什么?另外,为什么这里需要setRenderTarget
?如果移除,则不会应用效果。但如果包含它,那么它将 'freeze' 和 a-scene
就位,停止所有动画。我可以使用 tick
和 setInterval
恢复动画,但性能受到很大影响。
例如:
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()
后处理管道在 2 个屏幕外缓冲区之间来回渲染。当最后一遍完成时,需要将结果复制到实际屏幕上。这就是 CopyShader 所做的。可以想象,您可以构建您的通道,以便最终通道直接渲染到可见屏幕,但实际上,这会带来一些复杂性。