728x90
반응형
13.1 캐릭터 골격과 공간 이전
- 실시간 캐릭터 애니메이션을 위해서는 대체로 캐릭터의 골격(Skeleton)을 이용한다.
- 골격은 다수의 뼈(Bone)로 구성된 관절체(Articulated body)이다.
13.1.1 골격
- (b)의 경우 3ds Max에서 제공하는 바이페드(biped)라는 기본 골격이다.
- (a)와 같은 캐릭터의 기본 자세를 드레스 포즈(dress pose)라 한다.
- 위의 그림은 뼈를 마치 부피를 가진 물체처럼 그렸는데, 이는 골격을 드레스 포즈에 맞추는 과정에서만 쓰인다.
- 일단 골격이 드레스 포즈에 맞춰지면, 각 뼈마다 하나의 변환 행렬이 자동으로 계산된다.
13.1.2 뼈와 공간 이전
- 골격을 구성하는 뼈들은 계층적으로 부모-자식(Parent-child) 관계를 형성한다.
- 캐릭터 애니메이션에서는 관례적으로 골반(pelvis)을 루트 노드로 정한다.
- 한 뼈의 움직임은 자식, 손주 ... 모두 영향을 미친다.
- 뼈는 관절(Joint)로 연결되어 있다.
- 정점 $v_u$, $v_f$, $v_h$는 각각 위팔, 아래팔, 손에 속한다. 한 뼈가 움직이면 그 뼈에 속한 정점도 움직인다.
- 한 물체는 자신의 오브젝트 공간과 결합되어 있다. 아래팔과 그 오브젝트 공간은 항상 같이 움직이므로, 오브젝트 공간에 정의된 $v_f$는 항상 아래팔과 같이 움직이게 된다.
- 캐릭터 메시의 모든 정점이 정의되어 있는 공간을 캐릭터 공간이라 부르자.
- 드레스 포즈에 골격이 맞춰지면, 캐릭터 공간의 각 정점은 자신이 속한 뼈의 오브젝트 공간으로 변환되어야 하는데, 이를 간단히 뼈 공간이라 부르자.
- 아래팔 공간에서 (2,0)의 좌표를 가지는 $v_f$를 캐릭터 공간으로 변환할 것인데, 이는 역(inverse)을 취하면 바로 우리가 원하는 변환을 얻게 된다.
- 맨 위의 그림 (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
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [3/4] (0) | 2022.06.06 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [2/4] (0) | 2022.05.26 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [2/2] (0) | 2022.03.16 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [1/2] (0) | 2022.03.16 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 11 - 오일러 변환 및 쿼터니언 [2/2] (0) | 2022.03.11 |