@@ -18,6 +18,7 @@ import {
1818 // @ts -ignore
1919 DepthDownsamplingPass ,
2020 Effect ,
21+ Pass ,
2122} from 'postprocessing'
2223import { isWebGL2Available } from 'three-stdlib'
2324
@@ -122,16 +123,34 @@ export const EffectComposer = React.memo(
122123 const group = useRef ( null )
123124 const instance = useInstanceHandle ( group )
124125 useLayoutEffect ( ( ) => {
125- let effectPass : EffectPass
126+ let passes : Pass [ ] = [ ]
127+
126128 if ( group . current && instance . current && composer ) {
127- effectPass = new EffectPass ( camera , ...( instance . current . objects as unknown as Effect [ ] ) )
128- effectPass . renderToScreen = true
129- composer . addPass ( effectPass )
129+ const children = instance . current . objects as unknown [ ]
130+
131+ for ( let i = 0 ; i < children . length ; i ++ ) {
132+ const child = children [ i ]
133+
134+ if ( child instanceof Effect ) {
135+ const effects : Effect [ ] = [ ]
136+ while ( children [ i ] instanceof Effect ) effects . push ( children [ i ++ ] as Effect )
137+ i --
138+
139+ const pass = new EffectPass ( camera , ...effects )
140+ passes . push ( pass )
141+ } else if ( child instanceof Pass ) {
142+ passes . push ( child )
143+ }
144+ }
145+
146+ for ( const pass of passes ) composer ?. addPass ( pass )
147+
130148 if ( normalPass ) normalPass . enabled = true
131149 if ( downSamplingPass ) downSamplingPass . enabled = true
132150 }
151+
133152 return ( ) => {
134- if ( effectPass ) composer ?. removePass ( effectPass )
153+ for ( const pass of passes ) composer ?. removePass ( pass )
135154 if ( normalPass ) normalPass . enabled = false
136155 if ( downSamplingPass ) downSamplingPass . enabled = false
137156 }
0 commit comments