키프레임 애니메이션?
컴퓨터 그래픽스에서 주로 사용되는 애니메이션 기법 중 하나입니다.
키프레임 애니매이션 기법은 3D 모델의 움직임(동작)을 주요 프레임들로 구성 합니다.
중간 프레임들은 보간(interpolation)을 통하여 계산되어지고 자연스러운 움직임을 생성 합니다.
키프레임의 구성
키프레임 애니메이션은 다음과 같은 단계로 진행 됩니다.
1. 키프레임의 생성
3D 모델이 움직이는 동안의 주요 프레임을 정의 하는 단계입니다.
각 키프레임은 객체의 위치, 회전, 스케일 등을 포함하는 정보들을 가지고 있습니다.
이러한 키프레임은 애니메이션 디자이너에 의해서 만들어집니다.
2. 인터폴레이션(보간) 실행
키프레임 사이의 중간 프레임을 계산합니다.
보간(interpolation)기법을 사용하여 애니메이션의 부드러운 전환을 위하여 객체의 상태를 키프레임 사이에 더욱 자연스럽게 이동할 수 있습니다.
주로 선형 보간(Lerp, Linear Interpolation)이 사용됩니다.
그외에도 곡선 보간(Curved Interpolation)기법도 사용할 수 있습니다.
3. 애니메이션 재생
계산된 중간 프레임을 사용하여 애니메이션을 재생할 수 있습니다.
각 프레임마다 3D 모델의 위치, 회전, 스케일 등을 업데이트하여 움직임을 표현합니다.
DirectX Graphics를 사용하면 3D 장면을 렌더하고 애니매이션을 화면에 표시할 수 있습니다.
정리
키프레임 애니메이션은 게임, 영화, 컴퓨터 그래픽스 등 다양한 분야에서 널리 사용되는 기법입니다.
DirectX Graphics에서는 키프레임 애니매이션을 구현하기 위하여 행렬변환(Matrix Transformation)을 사용하거나 애니메이션 쉐이더(Animation Shader)를 활용할 수 있습니다.
(키프레임 애니메이션관 관련된 코드는 차후 정리할 예정)
참고
DirectX 에서 사용하고있는 또다른 애니매이션 기법들도 참고하기위하여 기록 합니다.
1. 스켈레탈 애니메이션(Skeletal Animation)
스켈레탈 애니메이션은 3D 모델의 뼈대 구조를 기반으로 애니메이션을 생성하는 기법입니다.
각 뼈는 가중치(weight)와 함께 3D 모델의 일부에 연결되어 있으며, 이러한 뼈들의 계층 구조를 사용하여 모델의 움직임을 제어합니다.
스켈레탈 애니메이션은 보통 스켈레톤헤어라 불리는 애니메이션 데이터를 사용하여 구현됩니다.
2. 블렌딩 애니메이션(Blending Animation)
블렌딩 애니메이션은 여러 개의 애니메이션 클립을 혼합(Blending)하여 생성하는 기법입니다.
각 애니메이션 클립은 특정 동작(ex. 걷기, 뛰기, 공격 ...)을 나타내며 이러한 클립들을 가중치(weight)를 적용하고 조합하여 부드러운 애니메이션 전환을 가능하게 합니다.
예시로 걷기+점프 애니메이션을 블렌딩하여 걷는 도중에 자연스럽게 점프로 바뀌는 동작이 가능합니다.
3. 물리 기반 애니메이션(Physics Based Animation)
물리 기반 애니메이션은 물리엔진을 사용하여 객체의 움직임을 시뮬레이션하는 기법입니다.
질량, 중력, 마찰력 등과 같은 물리적 특성을 고려하여 객체의 동작을 자동으로 계산합니다.
이를 통하여 좀더 현실적이며 자연스러운 움직임의 구현이 가능합니다.
DirectX에서는 물리 엔진을 사용하여 물리 기반 애니메이션을 구현할 수 있는 라이브러리를 제공하기도 합니다.
4. 파티클 애니메이션(Particle Animation)
파티클 애니메이션은 작은 입자(Particle)들을 사용하여 다양한 효과를 구현하는 기법입니다.
예를들어 폭발, 연기, 불꽃 등등의 이펙트 를 표현하기 위하여 사용됩니다.
주로 시각적인 효과를 제공하기 위하여 사용되며 DirectX에서도 파티클 시스템을 구현하는 기능을 제공합니다.
위의 애니메이션들 외에 다양한 종류들도 있으나 참고정도로만 알고 있도록 합니다.
'공부 > 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] 스키닝(Skinning) 애니메이션 (0) | 2023.06.22 |
댓글