실제 카메라 렌즈는 초점이 맞은 거리(focus distance) 근처만 선명하고 그 앞뒤는 점점 흐려집니다(보케). three.js 애드온의 BokehPass(scene, camera, { focus, aperture, maxblur })는 먼저 장면을 깊이(depth) 텍스처로 한 번 렌더링한 뒤, 각 픽셀의 깊이가 focus 값에서 얼마나 떨어져 있는지에 비례해 블러를 섞습니다.
focus는 선명하게 보일 카메라로부터의 거리, aperture는 조리개 값(클수록 흐림이 급격해짐), maxblur는 흐림의 최대 강도입니다. 이 세 값은 bokehPass.uniforms.focus.value처럼 런타임에 계속 바꿀 수 있어서, 데모는 focus를 사인파로 흔들어 마치 카메라가 초점을 앞뒤로 훑듯 5개의 도형 중 어느 것이 선명한지가 계속 바뀝니다.
블러 계산이 화면 전체 텍스처 샘플링을 여러 번 하므로 다른 후처리보다 무거운 편입니다. 카메라의 near/far 값을 실제 장면 깊이에 맞게 좁게 잡아야 depth 텍스처의 정밀도가 확보되어 밴딩 없이 부드럽게 흐려집니다.
언제 쓰나
제품 쇼케이스, 시네마틱한 카메라 워크, 특정 피사체에 시선을 집중시켜야 할 때.