UDN
Search public documentation:

BinaryFormatSpecificationsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 테크니컬 아티스트 > 스켈레탈 애니메이션 소스 파일용 바이너리 포맷 세부사항

스켈레탈 애니메이션 소스 파일용 바이너리 포맷 세부사항


스켈레탈 애니메이션과 메시 소스 바이너리


Maya, PSA, 또는 PSK의 ActorX에 의해 내보내기되는 바이너리 파일은 뼈대 애니메이션 아트를 Unreal 엔진으로 가져오기하는데 사용되는 raw 애니메이션과 메쉬 정보를 포함합니다. 여기서 주어진 사양은 형식을 확장하거나 또는 타사 유틸리티(스킨 페인터 프로그램, 타사 패키지용 내보내기 도구, 등)를 작성하는데 관심이 있는 모든 이를 돕기 위함입니다.

PSK 형식:


이것에는 메쉬, 각 정점에 대한 뼈 영향 인덱스 및 가중치, 뼈 이름, 뼈 계층구조, 뼈대 기본 포즈가 포함됩니다.

PSK 형식, 버전1.0(주의: 모든 헤더는 VChunkHeader 유형입니다). 일반적으로 파일은 데이터 쌍인 헤더로부터 생성됩니다. 헤더는 이에 따르는 데이터 항목의 수를 지정합니다(Datacount 필드에서).

표시되는 순서 설명
General Header(일반 헤더) Typeflag 값이 decimal 1999801 과 같거나 또는 그 이하일 경우, 이것은 PSK 파일의 버전 1.0 레이아웃을 나타냅니다.
Points Header(포인트 헤더) Datacount 에서 정의된 지점(points)의 수를 지정하는 헤더.
Points Data(포인트 데이터) VPoint 를 가진 배열.
Wedges Header(쐐기 헤더) 쐐기(wedge)의 양을 지정하는 헤더.
Wedges Data(쐐기 데이터) VVertex 쐐기 배열(3d 지점 배열로의 UV와 인덱스 쌍으로 이루어진 쐐기)
Faces Header(면 헤더) 면의 수를 지정하는 헤더.
Faces Data(면 데이터) VTriangle 면 배열.
Materials Header(재질 헤더) 재질의 수를 지정하는 헤더.
Materials Data(재질 데이터) VMaterial 재질 배열.
Bones Header(뼈 헤더) 뼈의 수를 지정하는 헤더.
Bones Data(뼈 데이터) VBone 뼈 배열.
Influences Header(영향 헤더) 뼈 영향의 수를 지정하는 헤더.
Influences Data(영향 데이터) VRawBoneInfluence 영향 배열.

PSA 형식:


PSA 파일은 뼈 이름과 1개 이상의 시퀀스 이름을 포함하고, 각 시퀀스에 대해 프레임 수 N과 각 뼈에 대한 N 회전과 N 이동(translations)의 트랙을 포함합니다.

PSA 형식, 버전1.0(주의: 모든 헤더는 VChunkHeader 유형입니다). PSK 파일처럼 PSA 파일은 데이터 쌍인 헤더로부터 생성됩니다.

표시되는 순서 설명
General Header(일반 헤더) Typeflag 값이 decimal 20090127 (Maya의 경우), 2003321 (3dsMax의 경우)과 같거나 또는 그 이상일 경우, 이것은 PSK 파일의 버전 1.0 레이아웃을 나타냅니다.
Bones Header(뼈 헤더) 뼈의 수를 지정하는 헤더.
Bones Data(뼈 데이터) FNamedBoneBinary 뼈 이름 배열.
Animations Header(애니메이션 헤더) 애니메이션 시퀀스 정보 뭉치를 지정하는 헤더.
Animations Data(애니메이션 데이터) AniminfoBinary 애니메이션 시퀀스 정보 뭉치 배열.
Raw keys Header(raw 키 헤더) raw 키의 양을 지정하는 헤더.
Raw keys Data(raw 키 데이터) VQuatAnimKey 배열.
Scale keys Header(스케일 키 헤더) 스케일 키의 양을 지정하는 헤더.
Scale keys Data(스케일 키 데이터) VScaleAnimKey 배열.
Curve keys Header(곡선 키 헤더) 곡선 키(블렌드형상의 수)의 양을 지정하는 헤더. (Maya에서 내보내기된 경우에만 지원됨)
Curve keys Data(곡선 키 데이터) VBlendCurve 배열. (Maya에서 내보내기된 경우에만 지원됨)

모든 뼈에 대한 모든 키를 모든 지정된 시퀀스로 지니고 있는 raw 키 배열. 다음과 같이 정리됩니다.

각 AnimInfoBinary의 시퀀스에 대해 [뼈의 개수][프레임 키의 개수] 를 곱한 것이 VQuatAnimKeys에 있습니다. 이것은 PSA의 FnamedBoneBinary 배열에서 정의된 뼈의 순서로 각 뼈에 대한 [numframes] 키의 트랙으로 펼쳐집니다.

각 VBlendCurve는 BlendCurveName[128]과 가중치 값의 float 배열([프레임 키의 개수] 와 동일)을 포함합니다.

엔진내의 애니메이션 데이터


일단 PSK(이제 native 뼈대 메쉬로 처리됨)와 PSA(1개 이상의 시퀀스를 포함한 native 애니메이션 객체로 처리됨)의 데이터가 런타임시 서로 연관되면 뼈 이름에 의해 연결되어집니다. 애니메이션 시퀀스에서 파트너를 찾지 못하는 뼈대(PSK로부터)에서의 모든 뼈는 각각의 참조 포즈 위치(PSK로부터 참조 뼈대를 구성하는 VBones의 오프셋 및 회전에서 정의되듯이)를 가정합니다.

에디터의 Animation Browser로 가져오기된 native 애니메이션과 메쉬 코드 데이터는 UKX 패키지 파일의 형상을 취합니다.

사용된 C++ 구조


관련된 구조와 클래스는 다음의 헤드 파일에서 요약됩니다.

https://udn.epicgames.com/pub/Three/BinaryFormatSpecifications/UnrealAnimDataStructs.h

사용자 지정 코드 작성 시 모든 구조체는 DoubleWord (32 비트) 크기의 배수로 패드된다고 가정하여 #pragma pack(push,1) 을 정의 주위에 두면 psa/psk 바이너리 호환성을 깨뜨리게 된다는 것에 유의하십시오. 기본 패킹은 #pragma pack(push,4) 를 사용하여 실행될 수 있습니다. 다행히도 이것은 raw 데이터 전용이기 때문에 ‘허비된’ 공백은 문제가 되지 않습니다. 에디터의 가져오기 코드뿐만 아니라 Max/Maya 내보내기 도구에서도 동일한 패딩이 가정됩니다.