728x90
반응형
13.3 스키닝
- 캐릭터의 폴리곤 메시를 피부(skin)라고도 부르는데, 이 챕터는 골격 움직임에 따라 어떻게 피부를 부드럽게 변형하는지 다룬다.
- (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)이라 부른다.
- $v$는 드레스 포즈의 캐릭터 공간에서 정의된 정점이고, v는 $M_6,d^-1$에 의해 아래팔 공간으로 변환된 것을 $v_5$로 표기한다.
- $v_5$와 $v_6$는 각각 $M_5,a$와 $M_6,a$에 의해 애니메이션되고 캐릭터 공간으로 변환된 후, 미리 정의된 가중치 $w_5$와 $w_6$를 사용해 블렌딩되고 결과는 위와 같다.
- 한 정점에 영향을 주는 뼈들과 그 가중치는 애니메이션 과정 전체에 걸쳐 일정하게 유지되는데, m개의 뼈가 한 정점에 영향을 준다고 가정할때 위의 식은 다음과 같이 일반화된다.
- 위의 그림은 일반화 된 식이 어떻게 구현되는지 보여준다.
- 야구 선수 캐릭터의 골격은 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
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 14 - 노멀 매핑 [1/2] (0) | 2022.06.11 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [4/4] (0) | 2022.06.06 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [2/4] (0) | 2022.05.26 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [1/4] (0) | 2022.05.20 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [2/2] (0) | 2022.03.16 |