マスキングパスを使用して、これを実現できます。それが問題に取り組む正しい方法だと思います。これを可能にするには、元のコードにいくつかの追加が必要になります。
まず、使用するエフェクトコンポーザーに渡すことができるステンシルバッファーが有効になっているレンダーターゲットを作成する必要があります。ステンシルバッファ内の情報により、マスキングを実行できます。
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/