본문 바로가기

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

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

728x90
반응형

 

 

 

 

13.3 스키닝

 

  • 캐릭터의 폴리곤 메시를 피부(skin)라고도 부르는데, 이 챕터는 골격 움직임에 따라 어떻게 피부를 부드럽게 변형하는지 다룬다.

 

 

스키닝 애니메이션 - 피부 위의 정점(a) / 블렌딩을 수행하지 않은 경우(b)
스키닝 애니메이션 - 블렌딩 가중치(c) / 블렌딩을 수행한 경우(d)

 

 

  • (b)는 a가 위팔에 속하고 b와 c는 아래팔에 속한다고 가정했을때, 두 팔이 회전했을 때의 결과를 보여준다. 결과인 변형된 피부는 부드럽지 않다.
  • 이러한 문제는 한 정점은 오직 하나의 뼈에 속한다는 제약 때문에 문제가 발생한 것 이다.
  • 여러 개의 뼈가 한 정점에 영향을 주도록 하고 그 결과를 블렌딩(blending)하면 이 문제는 상당히 완화될 수 있다.
  • 각 뼈가 한 정점에 얼마나 영향을 주는지 미리 정해줘야 하는데, 이를 블렌딩 가중치(blending weight) 혹은 간단히 가중치라 부른다.

 

  • (d)를 보면 $a_u'$와 $a_f'$에 각각 0.7과 0.3의 가중치를 곱해 더한 것이 $a'$이다.
  • 즉 가중치를 이용해 $a_u'$와 $a_f'$를 선형보간한 것이다. $c'$도 마찬가지다. 이 3개의 정점을 연결하면 (b)보다 훨씬 부드러운 피부를 얻게 된다.
  • 이러한 기법을 스키닝(skinning) 혹은 정점 블렌딩(vertex blending)이라 부른다.

 

 

 

 

정점 블렌딩. (a) 하나의 정점은 두 개의 뼈 공간에서 서로 다른 좌표($v_5$와 $v_6$)를 가진다. (b) 애니메이션 포즈에서 $v_5$와 $v_6$는 각기 다른 캐릭터 공간  좌표를 가지게 되는데, 이를 블렌딩하여 최종 위치를 결정한다.

 

$v_5$와 $v_6$

  • $v$는 드레스 포즈의 캐릭터 공간에서 정의된 정점이고, v는 $M_6,d^-1$에 의해 아래팔 공간으로 변환된 것을 $v_5$로 표기한다.

 

 

  • $v_5$와 $v_6$는 각각 $M_5,a$와 $M_6,a$에 의해 애니메이션되고 캐릭터 공간으로 변환된 후, 미리 정의된 가중치 $w_5$와 $w_6$를 사용해 블렌딩되고 결과는 위와 같다.

 

  • 한 정점에 영향을 주는 뼈들과 그 가중치는 애니메이션 과정 전체에 걸쳐 일정하게 유지되는데, m개의 뼈가 한 정점에 영향을 준다고 가정할때 위의 식은 다음과 같이 일반화된다.

 

일반화된 식

 

 

 

 

 

스키닝 알고리즘의 입력 및 작동 원리. 팔레트 인덱스와 가중치는 정점별로 고정되어 있다. 스키닝 알고리즘은 드레스 포즈의 $v$를 애니메이션 포즈의 $v'$로 변환한다.

 

 

  • 위의 그림은 일반화 된 식이 어떻게 구현되는지 보여준다.
  • 야구 선수 캐릭터의 골격은 20개의 뼈를 가진다. 따라서 애니메이션 과정의 매 프레임마다 20개의 $M_i$를 갱신해야 한다. 이는 행렬 팔레트(matrix pallette)라 불리는 테이블에 저장된다.
  • 드레스 포즈의 한 정점 $v$를 보면 $v$에 영향을 미치는 뼈의 인덱스는 0, 2, 7, 18이다. 실제로 정점 $v$에 영향을 미치는 뼈는 4개이며, $M_0$, $M_2$, $M_7$, $M_18$ 네 개의 행렬에 의해 변환되고 결합된다. 그 결과가 바로 $v'$이다.

 

  • 일반적으로 스키닝 알고리즘은 정점 쉐이더로 구현된다. 정점 쉐이더에게 행렬 팔레트는 유니폼으로 제공되지만, 팔레트 인덱스와 블렌딩 가중치는 정점 위치, 노멀, 텍스처 좌표 등과 함께 정점 배열에 저장된다.
  • 이들은 모두 정점 쉐이더에게 애트리뷰트로 제공된다.

 

 

 

 

 

 

출처

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

728x90