스톱모션

Stop motion

실제 물체를 아주 조금씩 옮기며 한 프레임씩 사진을 찍어 이어 붙이는 애니메이션 기법. 손으로 만드는 작업이라 완벽하게 매끄럽지 않은 미세한 떨림이 특징입니다.

다른 이름: ClaymationStop-frame animation
···
html
<div class="stage">
  <div class="desk"></div>
  <div class="shadow"></div>
  <div class="clay" id="clay"></div>
</div>
css
.stage{position:absolute;inset:0;overflow:hidden}
.desk{position:absolute;inset:0;background:
  linear-gradient(180deg,var(--surface) 0 62%,var(--line) 62% 64%,var(--bg) 64% 100%)}
.shadow{position:absolute;left:50%;bottom:24%;width:clamp(50px,19vmin,92px);height:10px;margin-left:calc(clamp(50px,19vmin,92px) / -2);
  border-radius:50%;background:var(--muted);opacity:.25;filter:blur(3px)}
.clay{position:absolute;left:50%;bottom:27%;width:clamp(54px,20vmin,100px);height:clamp(54px,20vmin,100px);margin-left:calc(clamp(54px,20vmin,100px) / -2);
  border-radius:46% 54% 50% 50% / 55% 50% 50% 45%;background:var(--accent-2);box-shadow:0 6px 14px rgba(0,0,0,.18)}
js
const clay = document.getElementById('clay');
let frame = 0;
function jitter() {
  frame++;
  const t = frame * 0.5;
  const x = Math.sin(t) * 26 + (Math.random() - 0.5) * 3;
  const y = -Math.abs(Math.sin(t * 1.3)) * 14 + (Math.random() - 0.5) * 2;
  const rot = Math.sin(t * 0.8) * 8 + (Math.random() - 0.5) * 4;
  const squash = 1 + Math.abs(Math.sin(t * 1.3)) * 0.18;
  clay.style.transform = 'translate(' + x + 'px,' + y + 'px) rotate(' + rot + 'deg) scale(' + (2 - squash) + ',' + squash + ')';
}
jitter();
setInterval(jitter, 140);

클레이(점토), 인형, 종이 오브젝트, 심지어 일상 사물까지 뭐든 피사체가 될 수 있다. 한 프레임을 찍고, 물체를 몇 밀리미터 옮기고, 다시 찍는 과정을 1초 분량(보통 12~24장)만큼 반복한다.

디지털 애니메이션과 결정적으로 다른 점은 "완벽한 반복이 불가능하다"는 것이다. 사람 손으로 매번 옮기다 보니 위치가 미세하게 들쭉날쭉하고, 조명이나 그림자도 조금씩 흔들린다 — 이 불완전함이 오히려 스톱모션 특유의 "손으로 만든 느낌"을 만든다. 라이카(코렐라인)나 아드만(월레스와 그로밋) 스튜디오는 이 흔들림을 극도로 정교하게 통제하는 것으로 유명하다.

디지털 애니메이션에 스톱모션 "느낌"만 흉내 낼 땐, 프레임마다 위치에 아주 작은 무작위 오프셋을 더해 그 미세한 떨림을 재현한다.

언제 쓰나

떨림을 완전히 없애려 하지 마세요. 지나치게 매끈하면 스톱모션 특유의 질감 자체가 사라집니다.