티스토리 뷰

앞 포스팅에서 캐릭터의 표면을 이루는 정점들이 뼈대에 속해있고 뼈대의 움직임에 따라 정점들을 움직임으로써 애니메이션을 구현한다는 것을 이야기했습니다.

또 뼈대를 계층 구조로 만들면 팔만 움직이거나 손만 움직이거나 하는 애니메이션을 구현할 수 있다고 이야기했죠.

이론상으로는 간단해 보이지만 우리는 컴퓨터에게 규칙을 알려줘야 하기 때문에 수식을 통해 위와 같은 상황을 표현해야겠죠.

 

그래픽스를 해본 여러분이라면 변환(Transformation)에 대해서 알고 계실 겁니다.

 

Transformation은 두 개의 관점으로 볼 수 있습니다.

 

첫 번째 관점은 한 공간 안에 있는 모든 정점들을 특정 규칙에 따라 움직이는 연산으로 생각하는 것이고

두 번째 관점은 하나의 가만히 있는 정점에 대해 다른 좌표계에서 바라보도록 만드는 연산으로 생각하는 것입니다.

 

아래와 같은 Transformation에 대해 생각해보겠습니다.

첫 번째 관점대로 해석하면 위 Transformation은 

아래의 이미지처럼 (x, y)에 있던 정점을 (x+3, y+2)=(x', y') 위치로 이동시키는 Transformation입니다.

반면 두 번째 관점대로 해석하면 위 Transformation은

아래의 이미지처럼 원래의 좌표계를 기준으로 (-3, -2) 지점에 원점을 두고 좌표축의 방향이 같은 좌표계에서

원래의 정점을 바라보게 만드는 Transformation입니다.

두 번째 관점을 좀 더 자세히 설명드리기 위해 예를 들어 설명해보겠습니다.

*설명의 편의를 위해 Translation과 Rotation만을 이용했습니다.

 

목표

A 좌표계에서 (x, y)로 정의된 갈색 정점을 B 좌표계에서는 어떻게 정의되는지 알고 싶다고 해봅시다.

(단, A 좌표계와 B 좌표계 사이의 변환은 단순히 Translation과 Rotation 만으로 가능합니다.)

 

알고 있는 것

A 좌표계에서 정의된 갈색 정점 위치 (x, y)

A 좌표계에서 정의된 B 좌표계의 원점 위치(Ox, Oy)와 축의 방향(Ux, Uy), (Vx, Vy), 축의 방향 벡터 UV는 단위 벡터

이미지가 많이 복잡합니다.

가장 먼저 오른쪽 (x, y) 위치에 있는 갈색 점에 대해서 생각해봅시다.

A 좌표계 기준으로 보면 이 점은 1사 분면에 위치해 있지요.

그 다음은 고개를 왼쪽으로 살짝 갸우뚱하여 B 좌표계와 맞춘 후 B 좌표계를 기준으로 이 점을 봅시다.

이번에는 이 점이 B 좌표계의 2사 분면에 위치해 있지요. (가로 방향으로는 살짝 왼쪽이고 세로 방향으로는 좀 더 위쪽)

우리의 목표는 이 점에 특정한 Transformation을 취해서 A 좌표계의 2사 분면에 위치한 점이 되도록 하는 것입니다.

이 특정한 Transformation은 Transformation을 바라보는 관점에서 설명했듯이, 점을 옮기는 Transformation으로 볼 수도 있고 A 좌표계에서 바라보던 점을 B 좌표계에서 바라보도록 하는 것일 수도 있습니다.

 

Transformation에 대한 첫 번째 관점이 좀 더 직관적이므로 첫 번째 관점으로 해석하여 정점을 A 좌표계의 2사 분면으로 옮겨봅시다.

먼저 두 좌표계의 원점을 일치시키는 Translation을 정점에 취해야 합니다. 

Translation 후의 결과는 다음과 같습니다.

그 후 두 좌표계의 기저 벡터를 맞추기 위해 U 벡터를 (1, 0) 벡터로 옮기는 회전을 해야 합니다.

회전을 하고 나면 이동이 끝난 회색 정점은 검은 색 정점의 위치로 가게 됩니다.

 

A 좌표계에서 정의된 검은 정점은, B 좌표계에서 정의된 갈색 정점과 같은 위치 값을 가진다고 보시면 됩니다.

지금까지 이 특정한 Transformation을 첫 번째 관점으로 해석했습니다.

같은 Transformation을 두 번째 관점으로 해석하면 A 좌표계에서 정의되었던 갈색 정점을 B 좌표계에서 정의되도록 하는 것이지요.

 

장황하게 설명했지만 사실 A 좌표계에서 정의되었던 정점을 B 좌표계에서 정의하려면

단순히 A 좌표계 축을 B 좌표계 축으로 맞추는 회전 행렬 R,

A 좌표계 원점을 B 좌표계 원점으로 이동시키는 이동 행렬을 T라고 했을 때, TR의 역행렬 즉, $(TR)^{-1}$을 곱하면 됩니다. 

 

아무튼 지금까지 Transformation을 바라보는 관점에 대해 설명했습니다.

 

그래픽스 분야에서 자주 쓰이는 MVP(Model, View, Projection) TransformationMV(Model, View) Transformation은 두 번째 관점으로 해석하는 것이 좋습니다.

 

Model 좌표계에서 정의되었던 정점들을 Model Matrix를 곱함으로써 World 좌표계로,

World 좌표계에서 정의되었던 정점들을 View Matrix를 곱함으로써 Camera 좌표계로 옮기게 되는거죠.

 

이 포스팅에서 Transformation의 두 번째 관점에 대해 이토록 자세히 설명한 이유는 스켈레톤 애니메이션에서도 똑같은 방식을 사용하기 때문입니다.

단순히 지금까지 다뤘던 Model, World, Camera 좌표계 외에 Bone 좌표계라는 새로운 좌표계가 생긴 것 뿐이죠.

Bone 좌표계는 각 Bone 마다 가지고 있습니다.

Bone 좌표계에서 정점을 정의하면 보다 손쉽게 Bone에 붙어있는 정점들의 움직임을 만들 수 있기 때문입니다.

 

그 외에도 앞 포스팅에서 말했듯이 하나의 정점은 여러 개의 Bone의 영향을 받을 수도 있다고 하였습니다.

복수 개의 Transformation Matrix의 영향을 받아 Transformation하는 정점은 간단하게 다음과 같이 쓸 수 있습니다.

예를 들어 정점 V가 Transformation A에 0.8 영향을 받고 Transformation B에 0.2 영향을 받아 V'으로 움직인다면 아래처럼 간단한 수식으로 표현할 수 있는거죠.

지금까지 Bone 좌표계와 여러 Bone Transformation의 영향을 받는 정점에 대해 이야기했습니다.

어떻게 그것이 구현되는지는 다음 글에서 설명하겠습니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함