본문 바로가기

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

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

728x90
반응형

 

 

 

13.4 역기구학

 

 

 

  • 정기구학(forward kinematics)은 로봇 팔의 관절 각도를 입력으로 받아 말단 장치의 위치 및 방향을 결정한다.
  • 이러한 작업의 역(逆)순을 역기구학(inverse kinematics; 이하 IK로 약칭)이라 한다.
  • 즉, 목표로 하는 말단 장치의 위치 및 방향이 입력으로 주어지면, 이 목표를 달성하기 위해 필요한 각 관절의 각도를 계산한다.

 

  • 로봇 분야에서 개발된 IK는 캐릭터 애니메이션에도 유용하게 사용된다.
  • 로봇 분야에서는 미분 방정식을 풀어서 IK 해를 구하는데, 이는 복잡한 계산 과정을 거치고 연산 시간이 많이 든다는 단점이 있다.
  • 실시간 응용 분야에서는 이를 대신하는 간단한 알고리즘이 널리 사용되는데, 이 절은 그 중 두 가지 기법을 소개하고 있다.

 

 

 

 

13.4.1 해석적 기법

 

관절과 자유도. (a) 1자유도의 팔꿈치 (b) 3자유도의 어깨

 

 

  • 물체의 상태를 정의하는 독립적인 변수의 개수를 자유도(degrees of freedom; DOF)라 부른다.
  • (a)의 로봇 팔꿈치는 기구학적으로 경첩(hinge)과 같아서, 아래팔을 위아래로 움직이는 자유도만 가지고 있으므로, 1자유도 관절이라 한다.
  • (b)의 어깨는 기구학적으로 볼 조인트(ball joint)와 같은데, 위 팔이 특정한 방향을 가리키려면 좌우로 한 번 움직이고 위아래로 한 번 움직이면 된다.
  • 여기에 위팔은 스크루 드라이버처럼 회전될 수 있다. 결국 자유도는 하나 증가하여 3이 된다. 즉, 어깨는 3자유도 관절이다.

 

 

 

IK를 풀기 위한 해석적 기법. (a) 목표 위치 $G$와 초기 자세를 입력으로 받아 최종 자세가 출력된다. (b) 1자유도 팔꿈치의 관절각 ∂를 계산한다. (c) 3자유도 어깨에서는 회전추고가 회전각 ∮를 계산한다.

 

  • IK를 위해 해석적(analytic) 기법을 사용할 수 있는데, 방향은 무시하고 위치만 고려했을때 (a)에서는 아래팔의 끝점 $T$가 $G$로 표기된 목표 위치에 닿을 수 있도록 위팔과 아래팔이 회전되어야 한다.
  • IK는 이렇게 위팔과 아래팔을 회전시키는데 필요한 어깨와 팔꿈치의 관절각(joint angle)을 계산한다.

 

 

코사인 법칙과 위 그림이 계산된 결과

 

  • 1자유도 관절인 팔꿈치의 관절각은 간단히 계산된다. 위팔과 아래팔의 길이는 각각 $l_u$와 $l_f$로 표기하고, $T$가 $G$에 닿았을 때의 팔꿈치 관절각을 ∂로 표기하고, 위치가 고정되어 있는 어깨와 목표 지점 $G$ 사이의 거리를 $l_g$로 표기하고 여기에 코사인 법칙을 적용하면 위와 같다.

 

  • 여기서 어깨와 $T$를 연결하는 단위 벡터를 $v_1$, 어깨와 $G$를 연결하는 단위 벡터를 $v_2$라 하면, 회전각 ∂는 $v_1$과 $v_2$의 내적을 통해 계산된다.
  • 여기에 회전축이 필요한데, 이는 $v_1$과 $v_2$에 모두 수직이어야 하므로 이들의 벡터곱을 통해 결정된다.
  • 이렇게 구해진 회전축을 중심으로 위팔이 ∂만큼 회전하면 $T$는 $G$에 닿게 된다.

 

 

 

 


 

 

 

 

13.4.2 CCD 알고리즘

 

 

  • 간단한 관절체의 경우 해석적 기법을 사용하면 빠르고 정확하게 IK를 해결할 수 있다. 하지만 많은 관절을 가진 복잡한 관절체에는 이것을 사용하기 어렵다.
  • 대안으로 종종 CCD(cyclic coordinate descent)알고리즘이 채택된다. CCD는 말단 장치로부터 시작해 계층 구조를 거슬러 올라가면서, 말단 장치와 목표 지점 간 거리가 최소화되도록 관절각을 조정하고, 말단 장치와 목표 지점 간 거리가 임계값 이상 벌어지면, 말단 장치로부터 시작해 관절각을 조정하는 작업을 반복한다.

 

 

CCD 알고지름. (a) 초기 자세. (b) 손이 회전되었고, 다음은 아래팔이 회전할 차례 (c) 아래팔이 회전되었고, 위팔이 회전할 차례 (d) 위팔이 회전되었다. $T$와 $G$간 거리가 충분히 가깝지 않으면, 다시 손부터 시작하는 회전을 반복할 것이다.

 

  • CCD의 최종 목표는 $T$와 $G$를 같게 하는 것이다. CCD는 말단 장치인 손부터 움직이는데, T가 G를 가리키도록 회전시킨다. 여기서의 회전각과 회전축은 앞에서 나왔듯이 각각 내적과 벡터곱으로 구할 수가 있다.
  • $T$와 $G$간 거리를 계산해서 그 거리가 충분히 가까우면 CCD 알고리즘은 종료되지만, 아니라면 (d)에서 보이는 것처럼 말단 장치인 손에서 시작해 동일한 작업을 반복하게 된다.
  • 이러한 반복은 $T$와 $G$간 거리가 미리 정한 임계값 이하가 되거나 혹은 미리 설정한 최대 반복 횟수에 도달했을 때 중단된다.

 

 

 

날아가는 공을 응시하고 공을 향해 손을 뻗는데 IK가 사용되었다.

 

  • 게임에서는 자연스러운 캐릭터 애니메이션을 위해 다음 그림과 같이 IK를 자주 사용한다.

 

 

 

 

 

 

 

출처

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

 

 

 

 

728x90