[DX] Animation Read Clip
🎬 Animation의 Clip, Frame 정보 읽어오기
애니메이션에는 ModelBone과 ModelMesh가 존재한다.
ModelMesh는 ModelBone을 참조하여 ModelBone의 위치를 가져와 애니메이션을 출력한다.
이때의 ModelBone은 애니메이션이 진행되는 시간에 따라 계속 변화하는데, 이러한 움직이는 정보를 Animation Clip에 저장한다.
Animation Clip은 Bone별로 SRP 정보가 Matrix형태로 저장된다.
이때 ModelBone과 Animation Clip의 Bone정보를 일치시켜서, 해당 프레임에 따라 매칭되는 ModelBone을 움직여 애니메이션대로 출력해 주는 것이다.
이렇게 Keyframe단위로 저장되어있는 애니메이션을 Keyframe Animation이라고 하는데, 실무에서는 용량이나 여러가지 문제로 인해 값이 변하는 순간에만 저장을 한다.
그러나 이번 프로젝트는 교육용이기 때문에 매 프레임마다 애니메이션 정보가 변하든, 변하지않든 모두 저장하여 확인하는 과정을 수행하였다.
✔️ CharGPT의 Converter 소스코드 요약
이 소스 코드는 DirectX 11을 사용하여 3D 게임을 개발하는 과정 중 작성된 Converter 클래스의 일부분입니다. Converter 클래스는 모델 및 애니메이션 데이터를 읽고 내보내는 역할을 수행합니다. 주요 기능과 역할은 다음과 같습니다:
ReadFile 함수: 지정된 파일 경로에서 모델 데이터를 읽어옵니다. Assimp 라이브러리를 사용하여 모델 파일을 읽고 왼손 좌표계로 변환하며, 삼각형으로 변환하고 UV 좌표 및 법선을 생성합니다. 읽어온 모델 데이터는 scene 변수에 저장됩니다.
ExportMesh 함수: 읽어온 모델 데이터를 지정된 경로에 .mesh 파일로 내보냅니다. .mesh 파일에는 모델의 정점 정보, 인덱스 정보, 본 정보, 스킨 정보 등이 포함됩니다. 또한, Vertices.csv 파일에 모델의 정점 데이터를 CSV 형식으로 저장합니다.
ReadBoneData 함수: 모델의 본 정보를 읽어옵니다. 재귀적으로 각 노드를 탐색하면서 각 본의 인덱스, 부모 인덱스, 이름, 변환 행렬 등을 읽어옵니다.
ReadMeshData 함수: 모델의 메시 정보를 읽어옵니다. 각 노드가 가지고 있는 메시 정보를 읽어서 모델의 정점 정보와 인덱스 정보를 생성합니다.
ReadSkinData 함수: 스킨 정보를 읽어옵니다. 모델의 메시와 본 정보를 사용하여 가중치 정보를 생성하고, 정점에 블렌딩 인덱스와 가중치를 할당합니다.
WriteMeshData 함수: 읽어온 모델 데이터를 .mesh 파일로 저장합니다. 본 정보와 메시 정보를 이진 형식으로 저장합니다.
ExportMaterial 함수: 재료 데이터를 내보내는 함수입니다. 읽어온 재료 데이터를 지정된 경로에 .material 파일로 내보냅니다. 재료의 이름, 각종 속성 (앰비언트, 디퓨즈, 스펙큘러, 이밋, 텍스처 파일 등)을 저장합니다.
ReadMaterialData 함수: 재료 데이터를 읽어옵니다. 모델의 재료 정보를 읽어 재료의 이름, 컬러, 텍스처 파일 등을 저장합니다.
WriteMaterialData 함수: 읽어온 재료 데이터를 .material 파일로 저장합니다. XML 형식으로 재료 정보를 저장하며, 텍스처 파일은 해당 경로로 복사됩니다.
ClipList 함수: 애니메이션 클립의 이름 목록을 가져옵니다.
ExportAnimClip 함수: 지정된 인덱스의 애니메이션 클립을 내보내는 함수입니다. 읽어온 애니메이션 클립 데이터를 .clip 파일로 저장합니다.
ReadClipData 함수: 애니메이션 클립 데이터를 읽어옵니다. 애니메이션의 이름, 프레임 레이트, 프레임 수, 각 본의 키프레임 데이터를 저장합니다.
ReadKeyframeData 함수: 각 본의 키프레임 데이터를 읽어옵니다. 재귀적으로 각 노드를 탐색하면서 각 본의 키프레임 데이터를 읽고 저장합니다.
WriteClipData 함수: 읽어온 애니메이션 클립 데이터를 .clip 파일로 저장합니다. 이진 형식으로 애니메이션 클립의 이름, 프레임 레이트, 프레임 수, 각 본의 키프레임 데이터를 저장합니다.
Converter 클래스는 모델과 애니메이션 데이터를 읽고 저장하는 중간 단계로 사용될 수 있으며, 게임 개발 과정에서 모델 및 애니메이션 데이터를 처리하는 데 유용합니다.