9.72 SLERP의 수학적 유도와 구현
1. 유도의 출발점
SLERP의 수학적 유도는 단위 구면 S^3 상의 두 점을 잇는 측지선을 따른 균일한 진행을 정의하는 데서 시작한다. 두 단위 쿼터니언 \mathbf{q}_0, \mathbf{q}_1 \in S^3이 주어졌을 때, \mathbf{q}_0에서 \mathbf{q}_1까지의 호 위에서 t 비율의 위치에 있는 점을 구하는 것이 목표이다.
2. 두 쿼터니언 사이의 각도
두 단위 쿼터니언 \mathbf{q}_0와 \mathbf{q}_1 사이의 각도 \Omega는 4차원 내적으로 정의된다.
\cos\Omega = \mathbf{q}_0 \cdot \mathbf{q}_1 = q_{0,w}q_{1,w} + q_{0,x}q_{1,x} + q_{0,y}q_{1,y} + q_{0,z}q_{1,z}
이는 두 단위 벡터가 4차원 공간에서 이루는 각도이다. \Omega \in [0, \pi]의 범위를 가지며, 두 점 사이의 측지선 거리이다.
3. 측지선 보간의 형식
측지선 위의 보간된 점은 \mathbf{q}_0와 \mathbf{q}_1의 선형 결합으로 표현된다.
\mathbf{q}(t) = a(t)\mathbf{q}_0 + b(t)\mathbf{q}_1
여기서 a(t)와 b(t)는 다음의 조건을 만족해야 한다.
3.1 조건 1: 단위 노름 보존
\lVert \mathbf{q}(t) \rVert = 1
3.2 조건 2: 끝점 일치
a(0) = 1, b(0) = 0, a(1) = 0, b(1) = 1
3.3 조건 3: 일정한 각속도
\mathbf{q}(t)는 \mathbf{q}_0로부터 정확히 t\Omega 떨어져 있어야 한다.
\mathbf{q}_0 \cdot \mathbf{q}(t) = \cos(t\Omega)
4. a(t)와 b(t)의 결정
조건 3을 사용하여 a(t)와 b(t)를 결정한다. \mathbf{q}_0 \cdot \mathbf{q}(t)를 전개하면
\mathbf{q}_0 \cdot (a\mathbf{q}_0 + b\mathbf{q}_1) = a + b\cos\Omega
이고 이것이 \cos(t\Omega)와 같아야 한다.
a + b\cos\Omega = \cos(t\Omega) \quad \text{(식 1)}
대칭적으로 \mathbf{q}_1 \cdot \mathbf{q}(t) = \cos((1-t)\Omega)이므로
a\cos\Omega + b = \cos((1-t)\Omega) \quad \text{(식 2)}
5. 연립 방정식의 해
식 1과 식 2를 a와 b에 대해 푸는 방법은 다음과 같다.
5.1 식의 행렬 형태
\begin{bmatrix}1 & \cos\Omega \\ \cos\Omega & 1\end{bmatrix}\begin{bmatrix}a \\ b\end{bmatrix} = \begin{bmatrix}\cos(t\Omega) \\ \cos((1-t)\Omega)\end{bmatrix}
5.2 행렬 역
\begin{bmatrix}a \\ b\end{bmatrix} = \frac{1}{1 - \cos^2\Omega}\begin{bmatrix}1 & -\cos\Omega \\ -\cos\Omega & 1\end{bmatrix}\begin{bmatrix}\cos(t\Omega) \\ \cos((1-t)\Omega)\end{bmatrix}
1 - \cos^2\Omega = \sin^2\Omega이므로
\begin{bmatrix}a \\ b\end{bmatrix} = \frac{1}{\sin^2\Omega}\begin{bmatrix}\cos(t\Omega) - \cos\Omega\cos((1-t)\Omega) \\ \cos((1-t)\Omega) - \cos\Omega\cos(t\Omega)\end{bmatrix}
5.3 삼각 함수 항등식의 적용
분자를 곱-합 공식을 이용하여 단순화한다.
\cos(t\Omega) - \cos\Omega\cos((1-t)\Omega) = \cos(t\Omega) - \frac{1}{2}[\cos(t\Omega) + \cos((2-t)\Omega)]
= \frac{1}{2}\cos(t\Omega) - \frac{1}{2}\cos((2-t)\Omega)
= \sin\Omega\sin((1-t)\Omega)
(곱-합 공식 \frac{1}{2}[\cos A - \cos B] = \sin(\frac{A+B}{2})\sin(\frac{B-A}{2}) 적용)
마찬가지로
\cos((1-t)\Omega) - \cos\Omega\cos(t\Omega) = \sin\Omega\sin(t\Omega)
5.4 최종 형태
따라서
a(t) = \frac{\sin((1-t)\Omega)}{\sin\Omega}, \quad b(t) = \frac{\sin(t\Omega)}{\sin\Omega}
이며, SLERP 공식이 다음과 같이 도출된다.
\mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, t) = \frac{\sin((1-t)\Omega)}{\sin\Omega}\mathbf{q}_0 + \frac{\sin(t\Omega)}{\sin\Omega}\mathbf{q}_1
6. 단위 노름 검증
유도된 SLERP 공식이 단위 노름을 보존함을 확인하자.
\lVert \mathbf{q}(t) \rVert^2 = a^2 + b^2 + 2ab\cos\Omega
a와 b를 대입하고 삼각 함수 항등식을 활용하면
\lVert \mathbf{q}(t) \rVert^2 = \frac{\sin^2((1-t)\Omega) + \sin^2(t\Omega) + 2\sin((1-t)\Omega)\sin(t\Omega)\cos\Omega}{\sin^2\Omega}
분자를 단순화하면 \sin^2\Omega가 되며, 결과는 1이다.
\lVert \mathbf{q}(t) \rVert = 1 \checkmark
7. 일정한 각속도 검증
\mathbf{q}_0 \cdot \mathbf{q}(t) = \cos(t\Omega)임을 확인한다. 이는 식 1로부터 직접 만족된다.
따라서 \mathbf{q}(t)가 \mathbf{q}_0로부터 정확히 t\Omega 만큼의 각도에 있다. t가 균일하게 증가할 때 각도도 균일하게 증가하므로, 일정한 각속도가 보장된다.
8. 알고리즘 구현
8.1 기본 SLERP 알고리즘
function SLERP(q0, q1, t):
# 1단계: 두 쿼터니언 사이의 각도 계산
cos_omega = dot(q0, q1)
# 2단계: 부호 보정 (짧은 경로 선택)
if cos_omega < 0:
q1 = -q1
cos_omega = -cos_omega
# 3단계: 작은 각도에서의 LERP 대체
if cos_omega > 0.9995:
result = (1 - t) * q0 + t * q1
return normalize(result)
# 4단계: 일반 SLERP 계산
omega = arccos(cos_omega)
sin_omega = sin(omega)
a = sin((1 - t) * omega) / sin_omega
b = sin(t * omega) / sin_omega
return a * q0 + b * q1
8.2 알고리즘의 단계별 설명
8.2.1 단계: 내적 계산
두 쿼터니언의 4차원 내적을 계산하여 두 점 사이의 각도의 코사인을 얻는다.
8.2.2 단계: 부호 보정
\cos\Omega < 0이면 두 쿼터니언이 4차원 공간에서 둔각을 이루며, 보간이 긴 경로를 따르게 된다. \mathbf{q}_1의 부호를 반전시켜 짧은 경로를 선택한다.
8.2.3 단계: 작은 각도 처리
\cos\Omega가 1에 매우 가까우면(즉, \Omega \approx 0이면) \sin\Omega \approx 0이 되어 SLERP 공식의 분모가 0에 가까워진다. 이 경우 LERP를 사용한다(작은 각도에서는 LERP와 SLERP가 거의 동일).
8.2.4 단계: SLERP 공식 적용
일반적인 경우 SLERP 공식을 직접 적용한다.
9. 수치적 안정성 고려 사항
9.1 임계값의 선택
작은 각도와 일반 SLERP의 경계가 되는 임계값(예: \cos\Omega > 0.9995)은 응용에 따라 조정될 수 있다. 더 엄격한 임계값은 더 정확하지만 작은 각도에서도 SLERP의 수치 오차에 노출된다.
9.2 클램핑
부동 소수점 오차로 인해 \cos\Omega가 정확히 \pm 1을 약간 벗어날 수 있다. \arccos가 NaN을 반환하지 않도록 클램핑이 필요하다.
cos_omega = max(-1, min(1, cos_omega))
9.3 고정밀도 계산
SLERP 결과의 매우 높은 정확도가 필요한 경우 더 정밀한 삼각 함수 계산을 사용한다(예: long double, 다중 정밀도 라이브러리).
10. 효율적 구현 기법
10.1 사전 계산
같은 \mathbf{q}_0, \mathbf{q}_1에 대해 여러 t 값으로 보간하는 경우, \Omega와 \sin\Omega를 사전 계산하여 재사용한다.
10.2 SIMD 최적화
쿼터니언의 4 성분 연산은 SIMD 명령으로 최적화될 수 있다. 행렬 라이브러리(Eigen 등)는 자동으로 활용한다.
10.3 룩업 테이블
게임이나 시각화에서 t의 값이 미리 알려진 경우, \sin(t\Omega)를 룩업 테이블로 캐싱한다.
11. SLERP의 성능
11.1 계산 비용
기본 SLERP는 다음의 비용을 가진다.
- 내적: 4 곱셈, 3 덧셈
- \arccos: 1회
- \sin: 2회 (분자), 1회 (분모)
- 곱셈: 8회 (선형 결합)
- 덧셈: 4회
총 약 15곱셈, 7덧셈, 4 삼각함수 호출이다. 이는 LERP(8 곱셈, 4 덧셈)보다 비싸지만, 현대 CPU에서는 마이크로초 단위로 완료된다.
11.2 실시간 응용에서의 적합성
SLERP는 실시간 60FPS 게임 등에서도 충분히 빠르다. 다만 매우 큰 수의 회전(수만 개)을 동시에 보간하는 경우 NLERP가 더 효율적일 수 있다.
12. SLERP의 변형
12.1 비균일 SLERP
매개변수 t를 비선형 함수로 변환하여 가속/감속 효과를 만든다.
\mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, f(t))
여기서 f(t)는 f(0) = 0, f(1) = 1인 단조 증가 함수이다 (예: f(t) = t^2 또는 ease-in-out 함수).
12.2 회전 행렬 SLERP
회전 행렬에 대한 SLERP는 \mathbf{R}(t) = \mathbf{R}_0\exp(t\log(\mathbf{R}_0^{-1}\mathbf{R}_1))로 직접 계산된다. 이는 쿼터니언 SLERP와 등가이다.
13. 검증과 테스트
13.1 끝점 검증
\mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, 0) = \mathbf{q}_0, \mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, 1) = \mathbf{q}_1 (또는 부호 반전된 형태)을 확인한다.
13.2 일정한 각속도 검증
여러 t 값에 대해 \mathbf{q}_0로부터의 각도를 측정하고, t에 비례함을 확인한다.
13.3 단위 노름 검증
모든 t에 대해 \lVert \mathbf{q}(t) \rVert = 1임을 확인한다(부동 소수점 오차의 임계값 내에서).
13.4 부호 처리 검증
\mathbf{q}_0 \cdot \mathbf{q}_1 < 0인 경우 부호 보정이 올바르게 동작하는지 확인한다.
14. 참고 문헌
- Shoemake, K. (1985). “Animating Rotation with Quaternion Curves.” SIGGRAPH Computer Graphics, 19(3), 245–254.
- Diebel, J. (2006). “Representing Attitude: Euler Angles, Unit Quaternions, and Rotation Vectors.” Stanford University Technical Report.
- Park, F. C., & Ravani, B. (1997). “Smooth Invariant Interpolation of Rotations.” ACM Transactions on Graphics, 16(3), 277–295.
- Watt, A., & Watt, M. (1992). Advanced Animation and Rendering Techniques. Addison-Wesley.
- Lynch, K. M., & Park, F. C. (2017). Modern Robotics: Mechanics, Planning, and Control. Cambridge University Press.
version: 1.0