1

注意:看来我过度简化了我最初的问题。请参阅下面的编辑。

我正在尝试将 Three.js 的裁剪/模板示例中显示的技术与基于 EffectComposer 的渲染管道相结合,该技术在裁剪几何图形时使用模板缓冲区渲染“caps”,但我遇到了一些困难。可以在https://jsfiddle.net/2vc76ajd/1/找到演示该问题的小提琴。

EffectComposer 有两个通道:一个 RenderPass 和一个使用 CopyShader 的 ShaderPass(参见下面的代码)。

composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
var shaderPass = new ShaderPass(CopyShader);
shaderPass.enabled = false;
composer.addPass(shaderPass);

第一个像往常一样渲染场景,后者只是将渲染目标复制到全屏四边形上。如果我禁用 ShaderPass,一切都会按预期工作:几何体被剪裁,切割平面以不同的颜色绘制:

在此处输入图像描述

但是,当通过单击右上角的“复制通道”复选框启用 ShaderPass 时,会渲染整个切割平面,而不仅仅是“帽”:

在此处输入图像描述

大概在屏幕外渲染目标和模板缓冲区之间存在一些交互。但是,到目前为止,我一直无法找到一种方法让后续渲染通道看起来与初始渲染相同。谁能告诉我我错过了什么?

编辑:虽然 WestLangley 的回答解决了我最初的问题,但不幸的是,当您使用 SSAOPass 时它不起作用,这是我在尝试简化问题的问题之前所做的。我在https://jsfiddle.net/bavL98hf/1/上发布了一个更新的小提琴,其中包括建议的修复程序,现在可以在 RenderPass 或 SSAOPass 之间切换。打开 SSAO 后,结果如下:

在此处输入图像描述

除了 EffectComposer 中的渲染目标之外,我还尝试在 SSAOPass 中使用的所有渲染目标上将 stencilBuffer 设置为 true,但遗憾的是这一次不起作用。谁能告诉我我还忽略了什么?

4

0 回答 0