본문 바로가기

Graphics Note

[Mathematics] quaternion interpolation

모델의 애니메이션을 위해서 각 프레임의 변환(transform)정보를 가지고있어야 한다. 하지만 모든 프레임에 대한 변환 정보를 저장하기에는 비용이 너무 크다. 때문에 몇몇 'key frame' 에 대한 변환 정보만을 저장하고 중간의 정보는 이들 key frame을 보간하여 생성하게된다.

이번 글에선 이들 변환 정보중 회전변환의 보간에 대해서 설명하려 한다.

 

애니메이션의 회전변환은 회전행렬의 보간시 발생하는 심각한 문제 때문에 사원수로 표현해야만 한다.

두 사원수 [math]\mathbf{p}[/math]와 [math]\mathbf{q}[/math]의 보간은 단위길이 1의 구체에서 이 두 사원수가 표현하는 지점의 최단거리 호(shortest arc)상의 지점을로 나타나게 된다.

 

 

[math]0\le t \le 1[/math]인 정규화된 파라미터 [math]t[/math]에 대하여 두 사원수를 보간하면 위 그림과 같은 결과를 갖게된다.

보간된 결과를 [math]\mathbf{r}[/math]라 하면

[math!]\mathbf{r} = n\mathbf{p} + m\mathbf{q}[/math!]

가 그 값이된다. [math]n[/math]의 값을 먼저 구해보자. [math]h = n\sin\theta[/math]로 부터 [math]n=\frac{h}{\sin\theta}[/math]를 구할 수 있다. 위 원은 단위구로 부터의 대원(great circle) 이므로 반지름은 1이다. 즉, [math]h=\sin\theta(1-t)[/math]이므로 [math]n[/math]는 다음의 값을 가진다.

[math!]n=\frac{\sin\theta(1-t)}{\sin\theta}[/math!]

비슷한 방법으로 [math]m[/math]의 값 또한 계산할 수 있다.

[math!]m=\frac{\sin\theta t}{\sin\theta}[/math!]

이를 정리하면 최종적으로 다음과 같이 표현된다.

[math!]\frac{\sin\theta(1-t)}{\sin\theta}\mathbf{p} + \frac{\sin\theta t}{\sin\theta}\mathbf{q}[/math!]

설명에서 보았듯, 두 사원수의 보간은 구면을 따라 보간되므로 흔히 구면 선형 보간(spherical linear interpolation)이라 불리며 slerp로 줄여 표현한다.

'Graphics Note' 카테고리의 다른 글

rigid body collision 1  (0) 2014.04.21
automatic linking the first out variable of fragment shader  (4) 2014.04.02
[Mathematics] rotation quaternion details  (0) 2014.03.28
device context and rendering context  (0) 2014.02.24
Bezier curve  (0) 2014.02.04