3. js: Проблема с объединением обрезки трафарета с помощью EffectComposer - PullRequest
1 голос
/ 02 августа 2020

ПРИМЕЧАНИЕ. Похоже, я слишком упростил свой первоначальный вопрос. См. Правку ниже.

Я пытаюсь объединить технику, показанную в примере обрезки / трафарета из 3. js, который использует буфер трафарета для рендеринга «шапок» при обрезке геометрии , с конвейером рендеринга на основе Effect Composer, но я столкнулся с некоторыми трудностями. Скрипку, демонстрирующую проблему, можно найти по адресу https://jsfiddle.net/2vc76ajd/1/.

Эффект Composer имеет два прохода: RenderPass и ShaderPass с использованием CopyShader (см. Код ниже).

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

Первый рендерит сцену как обычно, второй просто копирует цель рендеринга в полноэкранный квад. Если я отключу ShaderPass, все будет работать так, как задумано: геометрия обрезается, а плоскости сечения рисуются другим цветом:

enter image description here

When the ShaderPass is enabled by clicking the 'copy pass' checkbox in the upper right, however, the entire cutting plane gets rendered, rather than just the 'caps':

enter image description here

Presumably there is some interaction here between offscreen render targets and stencil buffers. However, I have so far been unable to find a way to have subsequent render passes look the same as the initial render. Can anyone tell me what I am missing?

EDIT: While WestLangley's answer solved my initial problem, it unfortunately doesn't work when you're using an SSAOPass, which is what I was doing before trying to simplify the problem for the question. I have posted an updated fiddle at https://jsfiddle.net/bavL98hf/1/, включая предлагаемое исправление и теперь переключается между RenderPass и SSAOPass. При включенном SSAO результат будет следующим:

введите описание изображения здесь

Я попытался установить для stencilBuffer значение true для всех целей рендеринга, используемых в SSAOPass, в дополнение к тем, что в Effect Composer, но, к сожалению, на этот раз это не сработало. Может ли кто-нибудь сказать мне, что еще я не замечаю?

...