본문 바로가기

공부/Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문

[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [1/4]

728x90
반응형

 

 

13.1 캐릭터 골격과 공간 이전

  • 실시간 캐릭터 애니메이션을 위해서는 대체로 캐릭터의 골격(Skeleton)을 이용한다.
  • 골격은 다수의 뼈(Bone)로 구성된 관절체(Articulated body)이다.

 

 

 

 

13.1.1 골격

 

캐릭터의 폴리곤 메시와 골격

 

  • (b)의 경우 3ds Max에서 제공하는 바이페드(biped)라는 기본 골격이다.
  • (a)와 같은 캐릭터의 기본 자세를 드레스 포즈(dress pose)라 한다.
  • 위의 그림은 뼈를 마치 부피를 가진 물체처럼 그렸는데, 이는 골격을 드레스 포즈에 맞추는 과정에서만 쓰인다.
  • 일단 골격이 드레스 포즈에 맞춰지면, 각 뼈마다 하나의 변환 행렬이 자동으로 계산된다.

 

 

 

 

13.1.2 뼈와 공간 이전

 

  • 골격을 구성하는 뼈들은 계층적으로 부모-자식(Parent-child) 관계를 형성한다.
  • 캐릭터 애니메이션에서는 관례적으로 골반(pelvis)루트 노드로 정한다.

 

이 장에서 사용할 캐릭터의 골격은 계층 구조를 가지는 20개의 뼈로 이루어졌다.
세 개의 뼈와 세 개의 관절. 좌측 2차원 그림의 배경으로 주어진 격자를 사용하면 $v_u$, $v_f$, $v_h$의 뼈 공간 좌표를 쉽게 이해할 수 있다.

 

 

  • 한 뼈의 움직임은 자식, 손주 ... 모두 영향을 미친다.
  • 뼈는 관절(Joint)로 연결되어 있다.
  • 정점 $v_u$, $v_f$, $v_h$는 각각 위팔, 아래팔, 손에 속한다. 한 뼈가 움직이면 그 뼈에 속한 정점도 움직인다.
  • 한 물체는 자신의 오브젝트 공간과 결합되어 있다. 아래팔과 그 오브젝트 공간은 항상 같이 움직이므로, 오브젝트 공간에 정의된 $v_f$는 항상 아래팔과 같이 움직이게 된다.

 

 

  • 캐릭터 메시의 모든 정점이 정의되어 있는 공간을 캐릭터 공간이라 부르자.
  • 드레스 포즈에 골격이 맞춰지면, 캐릭터 공간의 각 정점은 자신이 속한 뼈의 오브젝트 공간으로 변환되어야 하는데, 이를 간단히 뼈 공간이라 부르자.
  • 아래팔 공간에서 (2,0)의 좌표를 가지는 $v_f$를 캐릭터 공간으로 변환할 것인데, 이는 역(inverse)을 취하면 바로 우리가 원하는 변환을 얻게 된다.

 

$v'$는 위 행렬 식$M_f,p$에 의해 위팔 공간으로 변환될 수 있다.
$M_h,p$가 $M_f,p$와 결합되어 손에 속하는 정점을 조부모인 위팔 공간으로 변환한 것

 

 

  • 맨 위의 그림 (f)에서와 같이 드레스 포즈에 골격이 맞춰지면, 부모와 자식 뼈 사이의 상대적인 위치와 방향이 결정된다.
  • 한 뼈에 속한 정점을 그 부모의 뼈 공간으로 변환하는 것을 우리는 부모 변환(to-parent transform)이라 부른다.
  • 아래팔의 부모 변환 행렬을 $M_f,p$ 이라 표기하자.
  • 아래팔에서 위팔로의 공간 이전(Space change)을 의미하는 $M_f,p$는 위팔 좌표계를 아래팔 좌표계에 포개는 행렬과 같다. (이해가 안된다면 5장의 뷰 변환을 복습해라)
  • 이 사실을 일반화하면, 한 뼈의 정점이 주어졌을 때 부모 변환 행렬을 계속 결합하면 골격 계층 구조의 어떤 조상이든지 그것의 뼈 공간으로 정점을 변환할 수 있음을 알 수 있다.

 

 

 

 

13.1.3 캐릭터 공간에서 뼈 공간으로의 변환

 

부모 변환

 

  • 골반(pelvis)은 1, 척추(spine)는 2와 같은 일련 번호로 부르자.
  • 드레스 포즈의 골격이 주어지면, 각 뼈 공간에서 캐릭터 공간으로의 변환을 결정할 수 있다. 이 행렬을 $M_i,d$로 표기하자. ($i$는 뼈의 일련번호를, $d$는 드레스 포즈를 의미한다.)
  • 골반은 루트 노드이므로, 골반 공간은 캐릭터 공간과 동일하다고 간주하자. 따라서 $M_1,d$는 단위 행렬($I$)이다.

 

  • 척추 공간에서 캐릭터 공간으로 변환하는 행렬 $M_2,d$를 구해보면 다음과 같이 두 개 행렬의 결합으로 정의된다.

$M_2,d = M_1,d M_2,p$

  • 즉 척주의 정점은 $M_2,p$에 의해 척추의 부모인 골반의 뼈 공간으로 우선 변환되고, 그 다음 $M_1,d$에 의해 캐릭터 공간으로 변환된다.

 

오른쪽 그림은 쇄골 공간에서 캐릭터 공간으로
위 그림은 뼈 공간에서 캐릭터 공간으로, 아래 그림은 캐릭터 공간에서 뼈 공간으로 가는 변환이다.

 

 

 

  • 드레스 포즈 골격이 주어지면, 각 뼈의 부모 변환 행렬 $M_i,p$가 즉시 결정된다. 이는 $M^-1_i,p$이 즉시 결정된다는 뜻이기도 하다.
  • 이런식으로 골격 계층을 거슬러 올라가 보면 우리에게 궁극적으로 필요한 것은 루트 노드인 골반의 $M^-1_i,d$임을 알 수 있다.
  • 다행히 $M^-1_i,d은 단위 행렬이다. 따라서, $M^-1_i,d$부터 시작해서 골격 계층 구조를 따라 '위에서 아래로 내려가면서' 모든 뼈의 $M^-1_i,d$을 구할 수 있다.

 

 

 

 

 

 

출처

한정현 - [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.

 

728x90