2015.08.06 22:39

지금까지 골격을 애니메이션하는 방법을 살펴보았다.

이제 골격을 둘러싸는 스킨 단일 매쉬를 애니메이션하는 방법에 대해 논의할 차례이다.

이는 정점 블랜딩 (Vertex Blending)으로 불린다.

정점 블랜딩을 설명하기에 앞서 스킨 매쉬는 각각의 뼈대마다 존재하는 것이 아닌 bind-space상에 존재하는 단일 매쉬라는 것을 기억하자.


스키닝 애니메이션에서 정점의 최종 위치는 정점에 영향을 주는 뼈대들의 가중치 평균에 따라 결정된다.

( 해당 가중치는 대부분 모델링 과정에서 아티스트에 의해 결정된다.)


지구상에 존재하는 대부분의 실제 생물학적 구조에서 하나의 정점에 영향을 주는 뼈대는 최대 4개이다.

따라서 스키닝 애니메이션에서는 관습적으로 최대 influence bone의 개수를 4로 지정하는 것이 관례이다.


정점의 최종 위치가 영향을 주는 뼈들의 가중치 평균에 의해 결정된다고 했으므로 각각의 정점은 자신에게 영향을 주는 뼈대의 인덱스들(최대 4개)를 가진다.

이 인덱스는 골격의 최종 변환 행렬의 한 원소를 가리키며 이를 bone matrix palette라고 흔히 부른다.

또한 각 정점에는 각각의 영향을 주는 뼈대가 그 정점에 얼마나 영향을 미치는지를 결정하는 가중치 4개도 갖는다.


이런 형식의 정점들로 이루어져있는, 뼈대들과 가중치가 적절히 배정되어있는 매쉬를 스키닝된 매쉬라고 부른다.


임의의 정점 v에 대해서 정점 블랜딩을 통해 얻는 정점의 root-space기준 위치는 다음과 같은 가중치 평균 공식으로 얻는다.

V ' = W0vF0 + W1vF1 + W2vF2 + W3vF3

여기서 가중치 w0 + w1 + w2 + w3 = 1이다. 즉 가중치의 합은 1이어야한다.


공식을 말로 설명하자면 정점 V에 영향을 주는 모든 뼈대의 최종 변환을 정점에 적용하고, 그 결과들의 가중치 평균을 구해서 최종 위치 V'을 구하는 것이다.

이와 같은 방법으로 법선 또한 구한다.


다음은 위의 과정을 수행하는 정점 셰이더 코드의 예이다.



 








[참고문헌 : 프랭크 D. 루나 저 류광 역, DirectX 11을 이용한 3D 게임 프로그래밍 입문 ,

원제 : Introduction to 3d game programming with Directx 11 ]


[참고 URL : http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/skinned-mesh-animation-using-matrices-r3577

]

출처 : http://blog.naver.com/jidon333

신고
Posted by 우엉 여왕님!! ghostkyow

티스토리 툴바