您可以使用掩蔽通行证来实现此目的。我相信这是解决问题的正确方法。你原来的代码将需要一些补充来实现这一点。
首先,您需要创建一个渲染目标,该渲染目标有一个模板缓冲区已启用,可以传入效果编辑器使用。模板缓冲区中的信息允许进行掩蔽。
renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: true };
renderTarget = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, renderTargetParameters);
composer = new THREE.EffectComposer(renderer, renderTarget);
接下来,我建议让你的背景和前景都通过作曲家。它使渲染栈更清洁。当您渲染前景场景时,请确保其clear属性设置为false,以便保留掩模传递的模板缓冲区数据。
然后是一个遮罩通道,ssao通道,一个清除遮罩路径和一个最终着色器通道以将其全部渲染到屏幕上。您可以在这里使用简单的着色器或fxaa。可能还有另外一种渲染到屏幕的方式,但我不知道,但是您不能将ssao传递给渲染到屏幕上,并且在透明遮罩传递遵循它时使其工作。
这里是用这种方法小提琴的链接实现http://jsfiddle.net/xqLdz/3/
谢谢安德鲁!我永远无法摆脱面具,所以你的jsFiddle例子真的有所帮助。 – 2013-04-01 09:44:57