로토스코핑

Rotoscoping

실사 촬영 영상을 프레임 단위로 따라 그리거나 윤곽을 추출해, 애니메이션을 만들거나 배경에서 인물을 분리하는 기법.

다른 이름: Roto로토 작업
···
html
<div class="stage">
  <div class="footage"></div>
  <svg class="roto" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid meet">
    <path id="silhouette" d="M40,92 C35,60 37,38 40,20 C42,8 58,8 60,20 C63,38 65,60 60,92 Z"/>
    <path id="line" d=""/>
  </svg>
</div>
css
.stage{position:absolute;inset:0;overflow:hidden}
.footage{position:absolute;inset:0;background:var(--surface)}
.roto{position:absolute;inset:0;width:100%;height:100%}
#silhouette{fill:var(--line);stroke:none}
#line{fill:none;stroke:var(--accent);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
js
const line = document.getElementById('line');
const PATH = 'M40,92 C35,60 37,38 40,20 C42,8 58,8 60,20 C63,38 65,60 60,92 Z';
line.setAttribute('d', PATH);
const len = line.getTotalLength();
line.style.strokeDasharray = String(len);
const DUR = 1600, HOLD = 900, GAP = 500;
const start = performance.now();
function loop(now) {
  const t = (now - start) % (DUR + HOLD + GAP);
  let offset;
  if (t < DUR) offset = len * (1 - t / DUR);
  else if (t < DUR + HOLD) offset = 0;
  else offset = len;
  line.style.strokeDashoffset = String(offset);
  requestAnimationFrame(loop);
}
requestAnimationFrame(loop);

1915년 막스 플라이셔가 발명한 로토스코프 장치가 원조다. 촬영한 필름을 유리판에 한 프레임씩 투사해, 그 위에 종이를 대고 사람의 동작을 손으로 그대로 따라 그렸다 — 디즈니 <백설공주>의 사람처럼 자연스러운 움직임도 이 방식으로 만들어졌다.

현대 VFX·합성 작업에서 "로토(roto)"는 뜻이 넓어져, 그림을 그리는 게 아니라 인물이나 물체의 윤곽선을 프레임마다 따서 배경과 분리하는 마스크 작업 전체를 가리킨다. 그린스크린 없이 촬영한 영상에서 인물만 오려내야 할 때(광고 합성, 자막 뒤로 인물을 배치할 때) 이 수작업이 여전히 필요하다.

AI 기반 자동 로토 도구(Runway 등)가 등장했지만, 머리카락이나 투명한 물체의 경계처럼 까다로운 부분은 여전히 사람이 프레임 단위로 손보는 경우가 많다.

언제 쓰나

로토는 업계에서 가장 지루하고 시간이 오래 걸리는 작업으로 악명 높습니다. 그린스크린으로 찍을 수 있다면 애초에 로토를 피하세요.