我有一个简单的示例,使用一个透视相机,两个场景(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空间关系。也就是说,如果旋转场景以使右侧立方体显示在中央(蒙版/效果)立方体的“顶部”,则中央立方体将按预期被遮挡。
非常感谢您的协助!谢谢。