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

1. Squad의 개념

이중 구면 보간(Spherical Quadrangle Interpolation, Squad)은 여러 키 회전 사이의 매끄러운 보간을 위해 설계된 방법이다. 켄 슈메이크(Ken Shoemake)가 SLERP를 도입한 같은 1985년 논문에서 함께 제안하였다. Squad는 SLERP를 반복적으로 결합하여 미분 가능한(매끄러운) 곡선을 생성한다.

2. Squad의 동기

SLERP는 두 회전 사이의 보간에는 이상적이지만, 여러 키 회전 사이를 SLERP로 차례로 보간하면 키 회전 지점에서 미분 불연속이 발생한다. 즉, 보간 곡선의 1차 도함수가 키 회전에서 갑자기 변화한다. 이는 시각적으로는 회전 속도의 급격한 변화로 나타나며, 매끄러운 운동을 요구하는 응용에서 문제가 된다.

Squad는 이 문제를 해결하기 위해 도입되었으며, 4개의 쿼터니언을 사용하여 매끄러운(C¹ 연속) 보간을 제공한다.

3. Squad의 정의

Squad는 4개의 쿼터니언 \mathbf{q}_0, \mathbf{a}, \mathbf{b}, \mathbf{q}_1과 매개변수 t \in [0, 1]에 대해 다음과 같이 정의된다.

\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))

이 식은 다음의 구조를 가진다.

  1. \mathbf{q}_0\mathbf{q}_1 사이를 SLERP로 보간한다.
  2. \mathbf{a}\mathbf{b} 사이를 SLERP로 보간한다.
  3. 두 결과를 다시 SLERP로 보간하되, 매개변수가 2t(1-t)이다.

4. \mathbf{a}\mathbf{b}의 의미

Squad에서 \mathbf{q}_0\mathbf{q}_1은 보간의 끝점이며, \mathbf{a}\mathbf{b}는 보간의 형태를 제어하는 “제어점“이다. \mathbf{a}\mathbf{q}_0 근처의 보조점, \mathbf{b}\mathbf{q}_1 근처의 보조점이다.

이는 베지에 곡선(Bézier curve)에서 끝점과 제어점의 관계와 유사하다. 끝점은 곡선이 통과하는 점이고, 제어점은 곡선의 형태를 결정한다.

5. 베지에 곡선과의 유사성

Squad는 4개의 점에 의한 베지에 곡선과 구조적으로 유사하다. 평면에서의 베지에 곡선이

\mathbf{B}(t) = \mathrm{LERP}(\mathrm{LERP}(\mathrm{LERP}(\mathbf{P}_0, \mathbf{P}_1, t), \mathrm{LERP}(\mathbf{P}_1, \mathbf{P}_2, t), t), \mathrm{LERP}(\mathrm{LERP}(\mathbf{P}_1, \mathbf{P}_2, t), \mathrm{LERP}(\mathbf{P}_2, \mathbf{P}_3, t), t), t)

의 다중 LERP로 정의되는 것과 같이, Squad는 다중 SLERP로 정의된다. 이런 의미에서 Squad는 “구면 베지에 곡선“이라고도 불린다.

6. 매끄러운 키 회전 보간

여러 키 회전 \mathbf{q}_0, \mathbf{q}_1, \mathbf{q}_2, \ldots, \mathbf{q}_n이 주어졌을 때, 각 구간 [\mathbf{q}_i, \mathbf{q}_{i+1}]에서 Squad를 적용한다. 이때 각 구간의 제어점 \mathbf{a}_i\mathbf{b}_i를 적절히 선택하여 인접한 구간이 매끄럽게 연결되도록 한다.

7. 제어점의 계산

매끄러운 연결을 위해 제어점은 일반적으로 다음의 공식으로 계산된다.

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

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

여기서 \exp\log는 쿼터니언의 지수와 로그 사상이다. 이 공식은 인접 키 회전들의 평균을 사용하여 매끄러운 곡선을 만든다.

8. Squad의 성질

8.1 끝점 일치

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

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

이는 t = 0에서 2t(1-t) = 0이고 t = 1에서 2t(1-t) = 0이므로 직접 확인된다.

8.2 매끄러운 미분

Squad는 t에 대해 매끄럽게 미분 가능하다. 인접 Squad 구간 사이에서 1차 도함수가 연속이도록 제어점을 선택할 수 있다.

8.3 단위 노름 보존

Squad는 SLERP들의 합성이므로 결과가 항상 단위 쿼터니언이다. 정규화가 필요 없다.

8.4 비측지선

Squad의 결과는 단일 측지선이 아니다. 곡선의 형태는 제어점에 의해 영향을 받으며, 일반적으로 더 복잡한 곡선이다.

9. Squad의 응용

9.1 키프레임 애니메이션

키프레임 애니메이션에서 여러 키 자세 사이를 매끄럽게 보간하는 데 Squad가 사용된다. SLERP만 사용하면 키프레임에서 회전 속도가 갑자기 변하지만, Squad는 이를 매끄럽게 만든다.

9.2 카메라 경로

가상 카메라가 여러 시점을 통과하면서 매끄럽게 회전하도록 Squad가 사용된다. 각 시점이 키 회전이 되고 Squad가 그 사이를 보간한다.

9.3 모션 캡처 데이터 평활화

모션 캡처의 노이즈를 평활화할 때, 키 자세를 추출하고 Squad로 매끄럽게 보간하면 더 자연스러운 모션이 산출된다.

9.4 우주선 자세 명령

우주선의 자세 명령이 여러 단계의 자세를 거치는 경우, Squad로 매끄러운 자세 변화를 생성하여 제어 시스템의 부담을 줄인다.

10. Squad의 한계

10.1 계산 비용

Squad는 3개의 SLERP를 요구하므로 단일 SLERP의 약 3배 계산 비용이 든다. 실시간 응용에서 부담이 될 수 있다.

10.2 제어점의 결정

매끄러운 곡선을 위해 제어점을 적절히 계산해야 하며, 이는 추가적인 계산을 요구한다. 잘못된 제어점은 비매끄럽거나 의도하지 않은 곡선을 만든다.

10.3 측지선이 아님

Squad는 측지선이 아니므로, 두 회전 사이의 “가장 짧은 경로“가 아니다. 매끄러움을 위해 길이가 약간 길어진다.

10.4 과도한 회전

Squad 곡선이 키 회전을 통과하지만 키 사이에서 의도하지 않은 큰 회전을 포함할 수 있다. 제어점의 위치가 부적절하면 곡선이 멀리 우회한다.

11. Squad 알고리즘

function Squad(q0, a, b, q1, t):
    slerp1 = SLERP(q0, q1, t)
    slerp2 = SLERP(a, b, t)
    return SLERP(slerp1, slerp2, 2*t*(1-t))

function ComputeControlPoint(q_prev, q_curr, q_next):
    # 매끄러운 연결을 위한 제어점 계산
    log1 = LogQuaternion(Inverse(q_curr) * q_next)
    log2 = LogQuaternion(Inverse(q_curr) * q_prev)
    return q_curr * ExpQuaternion(-(log1 + log2) / 4)

function MultiKeySquad(qs, t):
    # qs[0..n]의 키 쿼터니언 사이의 보간
    i = floor(t * (n))  # 현재 구간의 시작 인덱스
    s = t * n - i  # 구간 내의 매개변수
    
    a = ComputeControlPoint(qs[i-1], qs[i], qs[i+1])
    b = ComputeControlPoint(qs[i], qs[i+1], qs[i+2])
    
    return Squad(qs[i], a, b, qs[i+1], s)

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

방법미분 연속성키프레임 통과측지선계산 비용
LERPC⁰아니오매우 낮음
NLERPC⁰근사낮음
SLERPC⁰ (구간)중간
SLERP 체인C⁰구간별중간
Squad아니오높음
큐빅 스플라인아니오중간

Squad는 미분 연속성이 SLERP보다 좋지만 측지선이 아니다. 더 매끄러운 미분이 필요하면 큐빅 스플라인 같은 더 복잡한 방법이 사용된다.

13. Squad의 변형과 확장

13.1 비균일 매개변수

Squad의 매개변수 t를 비선형 함수로 변환하여 가속/감속 효과를 만들 수 있다.

13.2 가중 Squad

각 키 회전에 가중치를 부여하여 곡선의 형태를 더 세밀하게 제어한다.

13.3 고차 Squad

더 매끄러운 미분(C²)이 필요한 경우 더 많은 SLERP를 결합한 고차 보간이 사용될 수 있다.

14. 회전 보간법의 위계

회전 보간법은 다음과 같이 정렬할 수 있다.

  1. LERP: 가장 단순, 단위 노름 미보존
  2. NLERP: LERP + 정규화
  3. SLERP: 정확한 측지선 보간
  4. Squad: 매끄러운 미분 보장
  5. 고차 스플라인: 더 매끄러운 미분 (C², C³ …)

응용의 요구에 따라 적절한 수준을 선택한다. 대부분의 실용적 응용에서는 SLERP나 Squad가 충분하다.

15. 참고 문헌

  • 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 on Math for SIGGRAPH.
  • Watt, A., & Watt, M. (1992). Advanced Animation and Rendering Techniques. Addison-Wesley.
  • Eberly, D. H. (2002). 3D Game Engine Design (2nd ed.). Morgan Kaufmann.
  • Lengyel, E. (2011). Mathematics for 3D Game Programming and Computer Graphics (3rd ed.). Course Technology.

version: 1.0