Three.js:使用单个摄像机,两个场景渲染深度问题以及使用蒙版场景进行后期处理

时间:2019-01-17 21:45:49

标签: three.js camera masking scene post-processing

我有一个简单的示例,使用一个透视相机,两个场景(sceneMain和sceneMasked)和三个立方体(cube1,cube2和cube3)。将cube1放置在sceneMasked中,将cube2和cube3放置在sceneMain中。立方体1位于居中位置,而立方体2和立方体3位于其侧面(每侧一个)。

后处理应用于sceneMasked(点屏)。多维数据集1确实具有点屏(如预期),而多维数据集2和多维数据集3没有(如预期)。

问题在于,将场景渲染到单个画布上然后进行环绕运动时,多维数据集1总是出现在多维数据集2和/或多维数据集3的顶部。

我从以下示例开始:https://threejs.org/examples/webgl_postprocessing_advanced.html

此处具有改进的遮罩: Post-processing to selected meshes

后面的示例仅将遮罩应用于前景对象。

我想将样本缩小到更接近最终目标的位置:单个摄像机而不是两个,而后处理效果(光晕)仅应用于我的合成场景的一小部分。 [我在示例中使用点屏;在最终代码中它将被Bloom代替。 Bloom非常重,因此我正在测试一种既可见又轻的东西,即点屏。]

我想我知道,后处理效果的蒙版应用程序和单个场景之间存在1:1的相关性;不起作用的是多维数据集之间的3D空间关系。绕轨道运行时,看起来就像是被遮罩的场景仅覆盖了主要场景。

我很确定这是可以预期的,因为实际上场景是分开的。但是我还没有弄清楚如何在单个场景中仅掩盖单个元素,因此我被困在这里。

在这一点上,我什至不确定是否可以做到这一点(因为似乎必须有两个场景)。上面引用的样本具有简单的平面背景;我想要一个具有多个3D元素的复合3D场景,后处理效果将应用于单个元素。

在任何将多个3D元素组合在一起的效果都仅应用于单个元素的地方,我找不到任何样本。

我猜测了渲染循环,因为后处理渲染循环的模式对于双场景/单摄像机渲染循环(在此处threejs: rendering multiple scenes in a single webgl renderer)有所不同。

我准备了一个codeandbox项目。 (这是我所知道的唯一一个允许多个JS文件的网站。)

该项目应为公开项目,并位于以下位置: https://codesandbox.io/s/9j575w60jr

演示页面在这里: https://9j575w60jr.codesandbox.io/

我想要获得的结果是,当立方体绕轨道运行时,它们保持了预期的3D空间关系。也就是说,如果旋转场景以使右侧立方体显示在中央(蒙版/效果)立方体的“顶部”,则中央立方体将按预期被遮挡。

非常感谢您的协助!谢谢。

0 个答案:

没有答案