얕은 심도

Shallow depth of field

조리개를 크게 열수록(f값이 작을수록) 초점 앞뒤가 더 빠르게 흐려지는 효과. 피사체만 선명하게 남기고 배경을 지웁니다.

다른 이름: 아웃포커싱Out-of-focus backgroundf-stopAperture blur
···
html
<div class="stage">
  <div class="bg">
    <i class="dot d1"></i><i class="dot d2"></i><i class="dot d3"></i><i class="dot d4"></i><i class="dot d5"></i>
  </div>
  <div class="subject"></div>
  <div class="fg"></div>
  <div class="hud">
    <svg viewBox="0 0 60 60" width="30" height="30">
      <circle cx="30" cy="30" r="26" fill="none" stroke="rgba(255,255,255,.5)" stroke-width="2"/>
      <g id="hex"><polygon points="30,8 48,19 48,41 30,52 12,41 12,19" fill="#0a0a0a"/></g>
    </svg>
    <span class="fstop" id="fstop">f/1.4</span>
  </div>
</div>
css
.stage{position:absolute;inset:0;background:linear-gradient(180deg,#8fc7e8,#dff0e0 70%)}
.bg{position:absolute;inset:0;transition:filter 1.1s ease}
.bg .dot{position:absolute;border-radius:50%}
.d1{width:15%;aspect-ratio:1;left:8%;top:18%;background:radial-gradient(circle at 35% 35%,#fff6c8,#ffd23f 70%)}
.d2{width:9%;aspect-ratio:1;left:24%;top:44%;background:radial-gradient(circle at 35% 35%,#ffffff,#a9d6ff 70%)}
.d3{width:20%;aspect-ratio:1;left:66%;top:12%;background:radial-gradient(circle at 35% 35%,#ffe6c8,#ff9a5b 70%)}
.d4{width:11%;aspect-ratio:1;left:80%;top:46%;background:radial-gradient(circle at 35% 35%,#ffffff,#8fe0c8 70%)}
.d5{width:60%;height:22%;left:0;bottom:0;background:linear-gradient(180deg,#79b06a,#4f8a49)}
.subject{position:absolute;left:38%;top:30%;width:26%;height:46%;border-radius:46% 46% 40% 40%/50% 50% 38% 38%;
  background:linear-gradient(160deg,#3a3f55,#20232f);box-shadow:0 10px 16px rgba(0,0,0,.25)}
.fg{position:absolute;left:-6%;bottom:-8%;width:46%;height:34%;border-radius:50% 40% 60% 30%;
  background:#2e5c34;opacity:.85;transition:filter 1.1s ease}
.hud{position:absolute;right:5%;top:5%;display:flex;flex-direction:column;align-items:center;gap:2px}
#hex{transition:transform 1.1s ease;transform-origin:30px 30px}
.fstop{font:700 11px ui-monospace,monospace;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.6)}
js
const stops=[1.4,2.8,5.6,11,16];
const bg=document.querySelector('.bg');
const fg=document.querySelector('.fg');
const hex=document.getElementById('hex');
const label=document.getElementById('fstop');
let i=0;
function step(){
  const f=stops[i];
  const openness=1-(Math.log(f/1.4)/Math.log(16/1.4))*0.78;
  hex.style.transform='scale('+openness.toFixed(2)+')';
  const blurAmt=openness*9;
  bg.style.filter='blur('+blurAmt.toFixed(1)+'px)';
  fg.style.filter='blur('+(blurAmt*0.8).toFixed(1)+'px)';
  label.textContent='f/'+f;
  i=(i+1)%stops.length;
}
step();
setInterval(step,1500);

피사계 심도(depth of field)는 초점이 맞은 것처럼 보이는 앞뒤 범위입니다. 조리개(aperture)를 크게 열수록(f/1.4처럼 f값이 작을수록) 이 범위가 좁아져 배경과 전경이 빠르게 흐려지고, 조리개를 좁힐수록(f/16처럼 f값이 클수록) 앞뒤로 넓게 선명해집니다.

데모의 육각형 아이콘은 조리개 날(blade)이 열리고 닫히는 걸 흉내 낸 것입니다 — 열릴수록(구멍이 커질수록) f값이 작아지고 배경 블러가 강해집니다. 웹에서는 실제 렌즈 광학 없이 배경·전경 레이어에 filter: blur()만 걸어도 같은 인상을 줄 수 있습니다.

같은 초점 거리에서도 센서(또는 필름)가 클수록, 피사체와의 거리가 가까울수록 심도는 더 얕아집니다. 그래서 스마트폰 '인물 모드'는 얕은 광학 심도를 흉내 내려고 배경만 소프트웨어로 인위적으로 흐립니다.

언제 쓰나

제품·인물 사진에서 배경을 정리하고 싶을 때, 카드 UI에서 하나의 요소만 강조하고 싶을 때 CSS 블러로 흉내 낼 수 있습니다.