Three.js 的 CopyShader 是啥?

Posted

技术标签:

【中文标题】Three.js 的 CopyShader 是啥?【英文标题】:What is CopyShader for Three.js?Three.js 的 CopyShader 是什么? 【发布时间】:2019-12-02 01:25:36 【问题描述】:

我看到很多项目在后处理链的末端使用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()

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,这就解释了为什么有时 CopyShader 似乎是可选的。

以上是关于Three.js 的 CopyShader 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

three.js 在线包含它的 URL 是啥?

Three.js:Lambert 和 Phong 之间的确切区别是啥?

最接近 three.js 的完整原生库是啥?

WebGL和three.js的关系是啥样的?

在 Webpack 中使用 Three.js 以便我可以使用 OrbitControls 的正确方法是啥?

Three.js Collada - dispose() 和释放内存(垃圾收集)的正确方法是啥?