10.32 이중 구면 보간(Squad)의 원리

1. Squad의 개념

이중 구면 보간(Spherical Quadrangle Interpolation, Squad)은 여러 키 쿼터니언 사이의 매끄러운 미분 가능 보간을 위해 설계된 방법이다. 슈메이크(Shoemake)가 1985년 SLERP와 함께 제안한 고차 보간이며, SLERP의 구간 사이에서 발생하는 미분 불연속을 해결한다.

Squad라는 이름은 “Spherical Quadrangle”(구면 사각형)에서 유래하며, 4개의 쿼터니언을 사용하여 보간하는 방법을 반영한다.

2. SLERP의 한계와 Squad의 동기

2.1 SLERP 체인의 문제

여러 키 쿼터니언 \mathbf{q}_0, \mathbf{q}_1, \mathbf{q}_2, \ldots 사이를 SLERP로 차례로 보간하면, 각 키에서 미분 불연속(velocity discontinuity)이 발생한다.

  • 구간 [\mathbf{q}_0, \mathbf{q}_1]에서의 각속도
  • 구간 [\mathbf{q}_1, \mathbf{q}_2]에서의 각속도

이 두 각속도가 일반적으로 다르므로, 키 \mathbf{q}_1에서 각속도가 갑자기 변한다. 이는 시각적으로 회전이 부드럽지 않게 느껴진다.

2.2 Squad의 해결

Squad는 각 키에서 미분 연속성(C¹ 연속성)을 보장한다. 즉, 각속도가 매끄럽게 변한다.

3. Squad의 정의

두 주요 쿼터니언 \mathbf{q}_0\mathbf{q}_1, 그리고 두 제어 쿼터니언 \mathbf{a}\mathbf{b}로부터 Squad는 다음과 같이 정의된다.

\mathrm{Squad}(\mathbf{q}_0, \mathbf{a}, \mathbf{b}, \mathbf{q}_1, t) = \mathrm{SLERP}(\mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, t), \mathrm{SLERP}(\mathbf{a}, \mathbf{b}, t), 2t(1-t))

즉, 두 개의 SLERP를 수행한 후, 그 결과들 사이를 다시 SLERP로 보간한다. 이중 SLERP의 구조가 “이중 구면” 이름의 이유이다.

3.1 세 번째 매개변수

세 번째 SLERP의 매개변수 2t(1-t)[0, 1] 구간에서 0에서 시작하여 t = 0.5에서 최대값 0.5에 도달하고 다시 0으로 돌아간다. 이는 Squad가 끝점에서 주 SLERP와 일치하고, 중간에서 제어 SLERP의 영향을 받도록 한다.

4. Squad의 구조

Squad는 다음의 세 SLERP로 구성된다.

  1. 주 SLERP: \mathrm{SLERP}(\mathbf{q}_0, \mathbf{q}_1, t) — 두 주 쿼터니언 사이
  2. 제어 SLERP: \mathrm{SLERP}(\mathbf{a}, \mathbf{b}, t) — 두 제어 쿼터니언 사이
  3. 결합 SLERP: 위 두 결과 사이의 SLERP

결합 SLERP의 매개변수가 t가 아니라 2t(1-t)인 이유는 끝점 t = 0, 1에서 결합 SLERP가 주 SLERP의 결과를 그대로 반환하도록 하기 위함이다.

5. 끝점 일치 확인

t = 0:

\mathrm{Squad}(\ldots, 0) = \mathrm{SLERP}(\mathbf{q}_0, \mathrm{SLERP}(\mathbf{a}, \mathbf{b}, 0), 0) = \mathbf{q}_0

t = 1:

\mathrm{Squad}(\ldots, 1) = \mathrm{SLERP}(\mathbf{q}_1, \mathrm{SLERP}(\mathbf{a}, \mathbf{b}, 1), 0) = \mathbf{q}_1

이는 2t(1-t)t = 0, 1에서 0이고, \mathrm{SLERP}(\mathbf{q}, \mathbf{q}', 0) = \mathbf{q}이기 때문이다.

6. 제어 쿼터니언의 선택

Squad의 핵심은 제어 쿼터니언 \mathbf{a}\mathbf{b}의 선택이다. 이 선택에 따라 보간의 형태가 결정된다.

6.1 매끄러운 연결

인접한 Squad 구간이 매끄럽게 연결되려면 제어 쿼터니언이 적절히 선택되어야 한다. 일반적인 공식은 다음과 같다.

주 쿼터니언 시퀀스 \ldots, \mathbf{q}_{i-1}, \mathbf{q}_i, \mathbf{q}_{i+1}, \ldots에 대해 \mathbf{q}_i의 제어 쿼터니언은

\mathbf{a}_i = \mathbf{q}_i\exp\left(-\frac{\log(\mathbf{q}_i^{-1}\mathbf{q}_{i+1}) + \log(\mathbf{q}_i^{-1}\mathbf{q}_{i-1})}{4}\right)

여기서 \exp\log는 쿼터니언의 지수와 로그 사상이다.

6.2 슈메이크의 공식

슈메이크의 원래 논문에서 제시된 공식은 베지에 곡선의 제어점 선택 방법에 기반한다. 인접 키 쿼터니언들의 평균을 사용하여 매끄러운 경로를 만든다.

7. 매끄러움의 보장

Squad는 C¹ 연속(1차 미분 연속)을 보장한다. 즉, 보간 곡선의 속도가 연속적이다. 인접 Squad 구간의 경계(주 쿼터니언에서)에서 속도가 매끄럽게 연결된다.

7.1 C² 연속의 한계

Squad는 일반적으로 C² 연속(2차 미분 연속, 가속도 연속)을 보장하지 않는다. 더 매끄러운 미분이 필요하면 더 고차의 스플라인이 필요하다.

8. Squad 알고리즘

function squad(q0, a, b, q1, t):
    # 세 SLERP를 차례로 수행
    slerp1 = slerp(q0, q1, t)
    slerp2 = slerp(a, b, t)
    return slerp(slerp1, slerp2, 2 * t * (1 - t))

function compute_control_point(q_prev, q_curr, q_next):
    # 매끄러운 연결을 위한 제어점 계산
    log1 = log_quaternion(q_curr.inverse() * q_next)
    log2 = log_quaternion(q_curr.inverse() * q_prev)
    return q_curr * exp_quaternion(-(log1 + log2) / 4)

function multi_key_squad(quaternions, t):
    n = len(quaternions) - 1
    i = int(t * n)  # 현재 구간
    s = t * n - i  # 구간 내 매개변수
    
    if i == 0:
        a = quaternions[0]
    else:
        a = compute_control_point(quaternions[i-1], quaternions[i], quaternions[i+1])
    
    if i == n - 1:
        b = quaternions[n]
    else:
        b = compute_control_point(quaternions[i], quaternions[i+1], quaternions[i+2])
    
    return squad(quaternions[i], a, b, quaternions[i+1], s)

9. Squad의 기하학적 해석

9.1 개의 쿼터니언

Squad는 4개의 쿼터니언을 입력으로 받는다.

  • \mathbf{q}_0: 시작 쿼터니언
  • \mathbf{a}: 시작 근처의 제어점
  • \mathbf{b}: 끝 근처의 제어점
  • \mathbf{q}_1: 끝 쿼터니언

이는 2차원 평면의 4점 베지에 곡선과 유사하다.

9.2 베지에 곡선과의 유사성

평면 베지에 곡선은 다음의 중첩 선형 보간으로 정의된다.

\mathbf{B}(t) = \mathrm{LERP}(\mathrm{LERP}(\ldots, t), \mathrm{LERP}(\ldots, t), t)

Squad는 LERP를 SLERP로 대체한 형태이다. 다만 매개변수 2t(1-t)가 다르다.

9.3 구면 베지에

슈메이크의 논문은 Squad를 “구면 베지에 곡선“의 한 형태로 제시한다. 구면 위에서 베지에 곡선의 개념을 일반화한 것이다.

10. Squad의 응용

10.1 키프레임 애니메이션

3D 애니메이션의 키프레임 사이를 매끄럽게 보간한다. SLERP만 사용하면 키에서 각속도가 급변하지만, Squad는 매끄러운 변화를 보장한다.

10.2 카메라 경로

가상 카메라가 여러 시점을 통과할 때 매끄러운 회전을 위해 Squad가 사용된다.

10.3 모션 캡처 데이터

모션 캡처의 스파스한 키프레임 사이를 Squad로 보간하여 자연스러운 모션을 재구성한다.

10.4 우주선 자세 명령

여러 단계의 자세 변경이 필요한 우주선 임무에서 매끄러운 자세 명령 생성에 Squad가 사용된다.

11. Squad의 계산 비용

Squad는 3번의 SLERP를 요구하므로, 단일 SLERP의 약 3배 계산 비용이 든다.

  • 주 SLERP: 약 15 곱셈 + 3 삼각 함수
  • 제어 SLERP: 약 15 곱셈 + 3 삼각 함수
  • 결합 SLERP: 약 15 곱셈 + 3 삼각 함수

총 약 45 곱셈 + 9 삼각 함수이다.

제어 쿼터니언을 사전 계산하면 매 프레임의 비용을 줄일 수 있다.

12. Squad의 한계

12.1 계산 비용

SLERP의 3배 비용이 실시간 응용에서 부담이 될 수 있다.

12.2 제어점 계산

제어점 계산이 쿼터니언 로그와 지수를 포함하므로 복잡하다.

12.3 측지선이 아님

Squad의 결과 경로는 측지선이 아니다. 즉, 두 쿼터니언 사이의 최단 경로보다 약간 길어진다.

12.4 매끄러움의 한계

Squad는 C¹ 연속만 보장한다. 더 매끄러운 미분이 필요하면 더 고차의 방법이 필요하다.

13. Squad와 다른 보간법의 비교

방법미분 연속성측지선계산 비용
LERPC⁰아니오매우 낮음
NLERPC⁰낮음
SLERPC⁰중간
SLERP 체인C⁰구간별중간
Squad아니오높음
고차 스플라인C² 이상아니오매우 높음

Squad는 C¹ 연속성과 계산 비용의 균형을 제공한다.

14. 키 수의 확장

Squad는 4개의 쿼터니언으로 정의되지만, 여러 키프레임 사이를 연쇄적으로 적용할 수 있다.

14.1 키 시퀀스

n개의 키 쿼터니언 \mathbf{q}_0, \mathbf{q}_1, \ldots, \mathbf{q}_{n-1}에 대해, 각 구간 [\mathbf{q}_i, \mathbf{q}_{i+1}]에서 Squad를 적용한다.

14.2 제어 쿼터니언의 체인

각 키 \mathbf{q}_i에 대해 두 제어 쿼터니언(이전 구간의 끝 제어점과 다음 구간의 시작 제어점)이 필요하다. 이 두 제어점이 일치하도록 설계하면 C¹ 연속성이 보장된다.

14.3 경계 조건

첫 번째 키(\mathbf{q}_0)와 마지막 키(\mathbf{q}_{n-1})에서는 특별한 처리가 필요하다. 일반적으로 경계에서 제어점을 같은 키로 설정한다.

15. Squad의 구면 위치 해석

4차원 단위 구면 S^3 상에서 Squad의 결과를 시각화할 수 있다(4차원은 시각화할 수 없지만, 저차원 비유로 이해할 수 있다).

  1. 주 쿼터니언 \mathbf{q}_0\mathbf{q}_1이 구면 위의 두 점이다.
  2. 두 점을 잇는 측지선(대원)이 SLERP의 경로이다.
  3. 제어 쿼터니언 \mathbf{a}\mathbf{b}가 구면의 다른 위치에 있다.
  4. Squad는 측지선에서 제어점들로 “당겨진” 경로를 그린다.

이는 평면 베지에 곡선의 구면 버전이다.

16. 결론

Squad는 여러 키 쿼터니언 사이의 매끄러운 C¹ 보간을 제공하는 고차 보간 방법이다. SLERP의 3배 계산 비용이 있지만, 키프레임 애니메이션과 카메라 경로 등의 응용에서 매끄러운 품질을 제공한다. 제어 쿼터니언의 적절한 선택이 핵심이며, 인접 키의 평균을 이용한 표준 공식이 일반적으로 사용된다.

17. 참고 문헌

  • Shoemake, K. (1985). “Animating Rotation with Quaternion Curves.” SIGGRAPH Computer Graphics, 19(3), 245–254.
  • Shoemake, K. (1991). “Quaternion Calculus for Animation.” SIGGRAPH Course Notes.
  • Watt, A., & Watt, M. (1992). Advanced Animation and Rendering Techniques. Addison-Wesley.
  • Eberly, D. H. (2002). 3D Game Engine Design (2nd ed.). Morgan Kaufmann.
  • Kuipers, J. B. (1999). Quaternions and Rotation Sequences. Princeton University Press.

version: 1.0