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를 ab에 대해 푸는 방법은 다음과 같다.

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

ab를 대입하고 삼각 함수 항등식을 활용하면

\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