본문 바로가기
프로그래밍/공부

[Graphcis] 스키닝 애니메이션

by Sik.K 2023. 6. 22.

스켈레탈 본은 객체를 구성하는 뼈대이다.
 
각 본에는 메시가 매치되어 피부를 형성하는데, 이때 메쉬 내부의 정점이 하나의 뼈에 대응한다고 하면 애니메이션을 출력할 때, 부자연스러운 움직임이 나타난다.
 
가령 관절 부분이 끊어져 움직이는 현상 같은 것이 발생하는데, 이를 방지하기 위한 기법이 바로 스키닝 애니메이션이다.
 


사람의 관절은 뼈가 움직여 피부의 길이가 늘어나도 되게끔 긴 피부가 관절의 각도에 따라 펼쳐지거나 접히거나 한다.
 
스키닝 혹은 정점 블렌딩이라고 하는 기법도 이에 착안한 방법이다.
 
각 뼈(스켈레탈 본)가 메시를 구성하는 각 정점에 얼마나 영향을 주는지에 대해 블렌딩 가중치라는 값을 주어 구분하고 이에 따라 상황에 맞게 정점이 블렌딩 된다.
 
여기에는 소프트웨어 스키닝과 하드웨어 스키닝 기법으로 나뉘는데, 소프트웨어 스키닝은 CPU, 하드웨어 스키닝은 GPU를 이용한 기법이다.
 
 
소프트웨어 스키닝
 
각 정점의 위치를 CPU를 사용하여 계산하고 결과를 임시 메시에 저장, 렌더한다. 간단하고 직관적이지만 하드웨어 스키닝에 비해 속도가 느리다.
 
그러나 렌더링할 객체가 메시의 형태로 메모리에 저장되므로 그림자 캐스팅, 피킹 등의 추가 작업을 하기 쉽고, 정점에 영향을 미치는 본의 수에 제한이 없다.
 
 
하드웨어 스키닝
 
정점의 계산을 GPU에게 맡긴다. 그림자 캐스팅, 피킹 등의 추가 작업이 가능하기는 하지만, 소프트웨어 스키닝에 비해 많은 노력이 필요하다. 정점의 영향을 미치는 본의 수에 제한이 있다.
 
하지만 소프트웨어 스키닝에 비해 속도가 빠르다.
 
 
 


 
가중치(Weight)
 
앞서 언급했듯, 스키닝 애니메이션에는 가중치라는 개념이 적용된다.
 
본 계층 구조에서 메시를 구성하는 정점은 하나 혹은 그 이상의 본과 링크된다. 정점의 렌더링 좌표는 해당 정점에 링크된 각각의 본이 그 정점에 어느 정도 영향을 미치는가를 나타내는 것이 바로 가중치 개념이다.
 
이때, 한 정점에 링크된 모든 본의 가중치(중량)값의 합은 1.0이다.
 
정점의 위치를 결정짓는 최종 변환 행렬은 그 정점과 링크된 모든 본들의 중량, 변환 행렬을 곱한 것들의 합이다.
 
애니메이션 되는 객체의 스킨을 구성하는 정점의 위치가 매 프레임마다 변하므로, 매 프레임마다 렌더하기 전에 스키닝을 통해 정점의 위치들을 새로 계산해주어야 한다.

댓글