Post-Processing
Post-processing renders the scene to a texture first, then applies screen-space effects. EffectComposer chains these passes together.
EffectComposer Setup
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
import { FilmPass } from 'three/addons/postprocessing/FilmPass.js';
const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
const bloom = new UnrealBloomPass(
new THREE.Vector2(innerWidth, innerHeight),
1.5, // strength
0.4, // radius
0.85 // threshold
);
composer.addPass(bloom);
const film = new FilmPass(0.35, 0.025, 648, false);
composer.addPass(film);
Replace renderer.render
// Before: renderer.render(scene, camera);
// After:
composer.render();
Resize
window.addEventListener('resize', () => {
composer.setSize(innerWidth, innerHeight);
// also update camera and renderer as usual
});
What to Experiment With
- Add a
ShaderPasswith a vignette shader (darken edges) - Lower bloom threshold to 0.3 to make more surfaces glow
- Toggle passes:
bloomPass.enabled = false
포스트 프로세싱은 씬을 먼저 텍스처로 렌더링한 뒤 화면 공간 효과를 적용합니다. EffectComposer가 이 패스들을 체인으로 연결합니다.
EffectComposer 설정
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
import { FilmPass } from 'three/addons/postprocessing/FilmPass.js';
const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
const bloom = new UnrealBloomPass(
new THREE.Vector2(innerWidth, innerHeight),
1.5, // 강도
0.4, // 반경
0.85 // 임계값
);
composer.addPass(bloom);
const film = new FilmPass(0.35, 0.025, 648, false);
composer.addPass(film);
renderer.render 교체
// 이전: renderer.render(scene, camera);
// 이후:
composer.render();
리사이즈
window.addEventListener('resize', () => {
composer.setSize(innerWidth, innerHeight);
// 카메라와 renderer도 평소대로 업데이트
});
실험해보기
- 비네트 셰이더(엣지 어둡게)로
ShaderPass추가 - bloom 임계값을 0.3으로 낮춰 더 많은 표면이 빛나게
bloomPass.enabled = false로 패스 토글