Game Dev게임 수학

보간, damping, 회전 보간

Lerp, Slerp, damping을 같은 것으로 보지 않고, 위치 이동·카메라 추적·회전 보간에서 각각 언제 써야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

text
position = lerp(current, target, t)
rotation = slerp(currentRot, targetRot, t)

설명

  • 보간은 "시작값과 목표값 사이를 어떻게 이어 줄 것인가"의 문제입니다. 하지만 Lerp 하나로 모든 움직임을 처리하려 하면 속도 감각이 이상해지거나, frame rate에 따라 도착 시간이 바뀌는 문제가 생깁니다.
  • Lerp는 두 점 사이의 선형 보간이고, Slerp는 방향이나 회전처럼 구면상 보간이 더 자연스러운 경우에 유용합니다. 회전이 큰 경우 Quaternion.Slerp는 각속도 감각이 더 자연스럽지만 비용은 더 큽니다.
  • damping은 "목표를 향해 부드럽게 수렴"하는 느낌을 만드는 데 가깝고, 정확한 도착 시간보다 반응 감각이 중요할 때 쓰입니다. 카메라 추적, UI follow, spring-like movement가 대표적입니다.
  • 초보자가 자주 하는 실수는 current = Lerp(current, target, deltaTime * speed)를 "속도 일정 이동"이라고 오해하는 것입니다. 이 방식은 지수적 수렴에 가까워서 목표에 점점 느리게 접근합니다.
  • 그래서 먼저 "정확한 시간 안에 도착해야 하는가", "항상 일정 속도로 움직여야 하는가", "부드럽게 따라가기만 하면 되는가"를 구분해야 합니다. 보간 함수 선택은 수학 취향이 아니라 감각 설계 문제입니다.

짧은 예제

text
문 열기: 정해진 시간 안에 회전 완료 -> time-based interpolation
3인칭 카메라 추적: 자연스럽게 따라오기 -> damping
방향 전환: 급격한 축 뒤집힘 완화 -> quaternion slerp

빠른 정리

방식잘 맞는 상황
Lerp시간 기반 위치 보간, 단순 값 보간
Slerp회전, 방향 벡터, 큰 각도 변화
damping카메라 추적, 부드러운 follow
MoveTowards 계열일정 속도 이동
핵심 질문시간 보장인가, 속도 보장인가, 느낌 보장인가

주의할 점

Lerp를 매 frame 현재값에 다시 적용하는 방식은 "딱 그 시간에 도착"이 아니라 "점점 가까워지는" 동작에 더 가깝습니다. 의도한 감각이 일정 속도인지, 정해진 시간인지, 부드러운 수렴인지 먼저 분리하세요.

참고 링크

2 sources