스키닝 애니메이션?
Skinning Animation은 3D 모델의 뼈대 또는 스켈레톤을 기반으로 하는 애니메이션 기술이며 3D 모델의 피부또는 외부 메쉬를 뼈대(Bone) 또는 스켈레톤(Skeleton)에 결합시키는 프로세스 입니다.
캐릭터 모델링에서 주로 사용되고 있으며, 캐릭터의 뼈대를 구성하는 복수의 뼈(또는 조인트)에 의해서 제어됩니다. 각 뼈는 변환 행렬을 가지고 있으며, 이런 행렬은 캐릭터의 뼈대에 따라 움직임을 계산하여 제어할 수 있으며 이를 통하여 모델이 움직일 때 피부가 자연스럽게 변형되어 애니메이션 효과를 만들 수 있습니다.
스키닝 애니메이션의 구성
스키닝 애니메이션의 주요한 구성은 다음과 같습니다.
1. 스켈레톤 또는 뼈대
모델의 움직임을 제어하는 뼈대의 구조 입니다.
일반적으로 스켈레톤은 계층적인 구조로 이루어져 있으며, 각각의 뼈는 회전 및 변환(transform)의 정보를 저장합니다.
2. 스킨웨이트(Skin Weights)
모델의 각 버텍스(vertex)가 뼈에 어떻게 영향을 받는 지에 대한 값 입니다.
각 버텍스에 대해 해당 버텍스에 영향을 주는 뼈들과 그에 대한 가중치(Weight)를 지정합니다.
가중치는 일반적으로 0 ~ 1 사이의 값으로 표현이 되며, 버텍스가 가까운 뼈일수록 해당 뼈에 대한 영향이 더 크게 나타납니다.
스키닝 애니메이션의 작동 원리
1. 각 프레임에서 스켈레톤은 원하는 모션에 따라 회전 및 변환 정보를 갖는 각 뼈를 업데이트 합니다.
2. 업데이트된 뼈 정보에 기반하여 각 버텍스의 위치를 계산합니다. 이때 각 버텍스의 스킨의 가중치 값과 해당하는 뼈의 변환정보를 사용하여 버텍스의 최종 위치를 결정합니다. 일반적으로 선형보간(Linear interpolation)을 사용하여 버텍스의 위치를 계산합니다.
3. 계산된 버텍스 위치로부터 피부(surface)를 생성하고 렌더링 합니다. 피부는 버텍스의 위치에 따라 자연스럽게 변형이되고 이에따라 마치 움직이는 듯한 애니메이션 효과를 나타낼 수 있습니다.
스키닝 애니메이션의 계산식
V_world =
V_local(mesh의 로컬좌표)
* M_world(mesh의 월드행렬)
* M_world의 역행렬(bone의 월드의 역행렬)
* M_Animation(bone의 애니메이션 월드행렬)
* W_0(0번째 가중치값)
계산식 출처 : https://skmagic.tistory.com/18
위의 공식은 0번째에 해당하는 스키닝 공식 입니다.
V_local * M_world(mesh의 월드행렬) 을 통해 우선 메시의 월드 공간으로 정점을 옮겨 줍니다.
그후 M_world의 역행렬(bone의 월드의 역행렬)을 통해 bone의 좌표공간으로 옮길 수 있습니다.
위처럼 좌표공간을 통일시킨뒤 M_Animation(bone의 애니메이션 월드행렬)을 곱하여 애니메이션 행렬연산을 적용 시켜 줍니다.
마지막으로 W_0(0번째 가중치값)를 곱해준다면 0번째 스키닝 행렬을 구할 수 있습니다.
3D 캐릭터 애니메이션에 사용되는 기술인 Skinning 은 구현 방식에 따라 두가지로 나뉠 수 있습니다.
소프트웨어 스키닝 & 하드웨어 스키닝
1. 소프트웨어 스키닝 (Software Skinning)
소프트웨어 스키닝은 중앙처리장치(CPU)를 사용하여 스킨 애니메이션을 처리하는 방식 입니다.
이 방법은 변환 행렬 계산과 버텍스 변형을 CPU에서 수행합니다.
소프트웨어 스키닝은 다음과 같은 특징을 가지고 있습니다.
[유연성]
소프트웨어 스키닝은 복잡한 움직임의 논리를 구현하기에 유연성이 높습니다.
복잡한 애니메이션 시스템을 구현하는 데에는 추가적인 로직 및 계산이 필요하지만, 런타임에 유연하게 조작이 가능합니다.
[CPU부하]
소프트웨어 스키닝은 CPU를 사용하므로 이에 따른 부하가 발생합니다.
많은 캐릭터의 애니메이션을 처리하기에 적합하지 않습니다.
[이식성]
소프트웨어 스키닝은 특정 하드웨어에 종속되지 않으므로 이식성이 높고 다양한 플랫폼 및 시스템에서 동작이 가능합니다.
2. 하드웨어 스키닝 (Hardware Skinning)
하드웨어 스키닝은 그래픽카드(GPU)를 사용하여 스킨 애니메이션을 처리하는 방식입니다.
그래픽 카드의 GPU가 변환 행렬 계산과 버텍스 변형을 수행합니다.
하드웨어 스키닝은 다음과 같은 특징을 가지고 있습니다.
[고성능]
하드웨어 스키닝은 GPU의 병렬 처리 기능을 활용할 수 있기 떄문에 빠른 계산의 수행이 가능합니다.
많은 수의 캐릭터 또는 복잡한 애니메이션도 효율적으로 처리할 수 있습니다.
[제한된 유연성]
그래픽 카드의 하드웨어에 의존하기 때문에 유연성이 소프트웨어스키닝에 비하여 떨어집니다.
특정 하드웨어의 제한된 기능 세트에 따라 구현이 제한 될 수 있습니다.
[이식성]
하드웨어 스키닝은 그래픽 카드의 성능에 따라 제한되기 때문에 이식성이 낮을 수 있습니다.
특정 그래픽 카드나 지원되는 기능을 고려하여 개발해야 합니다.
위처럼 소프트웨어 스키닝 & 하드웨어 스키닝은 개발자가 프로젝트 요구상항 및 대상 플랫폼, 필요한 성능 등을 고려하여 선택해야하는 중요한 결정입니다.
일반적으로 많은 캐릭터나 고성능의 애니메이션을 처리해야 할 경우 하드웨어 스키닝에 의존도가 높을 수 있습니다.
구현한 스키닝 부분 정리
'공부 > Animation' 카테고리의 다른 글
[Animation] 스키닝(Skinning) 부분 정리 (0) | 2023.07.04 |
---|---|
[Animation] Animation 클래스 정리 (0) | 2023.07.04 |
[Animation] 애니메이션 블렌드(Animation Blend) (0) | 2023.07.04 |
[Skeleton] Skeleton.h & Skeleton.cpp 정리 (0) | 2023.06.28 |
[Animation] 키프레임(KeyFrame) 애니메이션 (0) | 2023.06.28 |
댓글