기본 패턴
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