对选定网格进行后处理

8
在three.js中,是否可以仅将后处理效果应用于选定的网格?
例如,让一个立方体具有颗粒效果,而场景的其余部分则没有。 谢谢!
2个回答

6

是的。有一个 three.js示例,展示了如何使用掩模将后处理应用于选定的网格。

我认为那个示例可以更清晰地改进,但你可以像这样修改示例:

composer4 = new THREE.EffectComposer( renderer, new THREE.WebGLRenderTarget( rtWidth, rtHeight, rtParameters ) );

composer4.addPass( renderScene );
composer4.addPass( renderMask );
composer4.addPass( effectDotScreen );
composer4.addPass( clearMask );
composer4.addPass( effectVignette );

您将获得如下输出:

postprocessing to selected mesh

这是一个复杂的例子,所以你需要仔细学习它

three.js.r.77


谢谢@WestLangley,我已经成功让它工作了。但是我有一个关于深度信息丢失的问题:不可能使用three-js的后处理(主要是构建为片段着色器)作为网格材料使用,绕过需要使用遮罩吗? - Rui d'Orey
另外一个问题:我有一组分离的物体围绕中心物体旋转,我想对中心物体应用不同于旋转物体集合的遮罩...是否有任何方法添加/减去遮罩以获得两个元素中不同的后处理效果而不会出现深度故障? - Rui d'Orey
(1) 是的,可以使用自定义的“ShaderMaterial”。 (2) 或许你应该发布一个新问题并向社区提问。 - WestLangley
谢谢。对于(1),您能否提供一个示例或链接?对于(2),请参考http://stackoverflow.com/questions/38464211/threejs-correctly-mask-a-set-of-objects-rotating-around-other-and-keep-depth。 - Rui d'Orey

5

是的,如果您将对象放到另一个场景中,但您将面临深度渲染的问题,某些对象将始终处于顶部。这取决于场景的情况。


是的,我需要有深度的工作...例如,我可以先渲染相同的场景并对没有后处理的元素应用一些遮罩,然后在另一个场景中渲染除了“后处理元素”以外的所有内容。这样,“非后处理元素”在第二个场景中不可见,但仍会遮挡“后处理元素”。 - Rui d'Orey
那取决于你使用的后处理方式。我只知道使用渲染器进行后处理,而且渲染器需要用于整个场景。 - Martin
我不能将着色器通道应用于材质吗?或者调整材质着色器,根据屏幕坐标进行一些颜色/效果计算? - Rui d'Orey
谢谢!我会检查它。 - Rui d'Orey
那么我可以通过使用MultiMaterial将后处理片段着色器材质添加到通常的Phong/Lambert/Standard中吗? - Rui d'Orey
THREE js没有多材质,如果我从Blender理解这个术语的话。每个面只能有一个材质。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接