EffectComposer는 렌더 결과를 화면에 바로 찍는 대신 텍스처(렌더 타겟)에 담아, 그 텍스처를 다음 패스가 입력으로 받는 식으로 여러 효과를 체인처럼 쌓습니다. 각 Pass는 이전 패스의 결과(tDiffuse)를 받아 자기만의 프래그먼트 셰이더로 처리한 뒤 다음 패스로 넘깁니다.
데모는 RenderPass(일반 렌더) → RGBShiftShader(빨강·파랑 채널을 반대 방향으로 살짝 어긋나게 해 색수차를 흉내) → FilmPass(필름 그레인과 스캔라인) → VignetteShader(가장자리를 어둡게) → OutputPass(최종 색 공간 보정) 순으로 쌓았습니다. 이런 개별 셰이더는 ShaderPass(shader)로 감싸서 체인에 끼워 넣습니다.
패스를 몇 개를 쌓든 렌더러 호출은 renderer.render()가 아니라 composer.render() 하나면 됩니다. 다만 패스가 늘수록 풀스크린 텍스처 샘플링이 그만큼 늘어나니, 모바일 등에서는 정말 필요한 효과만 남기는 게 좋습니다.
언제 쓰나
전체적인 색보정·필름 룩·화면 왜곡처럼, 개별 오브젝트가 아니라 "카메라 렌즈"에 거는 효과가 필요할 때.