No edit summary |
No edit summary |
||
Line 16: | Line 16: | ||
</div></div><br/><br/> |
</div></div><br/><br/> |
||
− | ===''' |
+ | ==='''Chunk Header'''=== |
− | The |
+ | The chunk header contains information about its companion data chunk: '''id''', '''type''', '''size''' and '''count'''. There are four possible IDs, corresponding to each of the eight mesh objects: |
:* '''ANIMHEAD''': Does not contain a data pair. |
:* '''ANIMHEAD''': Does not contain a data pair. |
||
Line 53: | Line 53: | ||
The head data chunk is defined by its header as having zero size and zero elements (count). Since it contains no information, it derives that only the header chunk has useful meaning. The header chunk may act as a file-header, but does not necessarily have to be the first chunk in the file.<br/><br/> |
The head data chunk is defined by its header as having zero size and zero elements (count). Since it contains no information, it derives that only the header chunk has useful meaning. The header chunk may act as a file-header, but does not necessarily have to be the first chunk in the file.<br/><br/> |
||
+ | |||
+ | ==='''Bones'''=== |
||
+ | |||
+ | The bones data chunk contains an array of bones. Each bone is defined as a 100 bytes struct. |
||
+ | |||
+ | {| border="0" cellpadding="0" cellspacing="1" class="article-table mw-collapsible mw-collapsed" style="width: 320px;" |
||
+ | |- |
||
+ | ! scope="col"|Bytes |
||
+ | ! scope="col"|Type |
||
+ | ! scope="col"|Description |
||
+ | |- |
||
+ | | 64 |
||
+ | | Char |
||
+ | | Bone name |
||
+ | |- |
||
+ | | 4 |
||
+ | | Int32 |
||
+ | | Flags |
||
+ | |- |
||
+ | | 4 |
||
+ | | Int32 |
||
+ | | Children |
||
+ | |- |
||
+ | | 4 |
||
+ | | Int32 |
||
+ | | Parent index |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Rotation X |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Rotation Y |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Rotation Z |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Rotation W |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Position X |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Position Y |
||
+ | |- |
||
+ | | 4 |
||
+ | | Float |
||
+ | | Position Z |
||
+ | |- |
||
+ | | 16 |
||
+ | | 4 * Int32 |
||
+ | | Padding |
||
+ | |}<br/> |
||
+ | |||
+ | ==='''Info'''=== |
||
+ | |||
+ | ==='''Keys'''=== |
||
==ME3Explorer Classes== |
==ME3Explorer Classes== |
Revision as of 21:19, 2 January 2015
This page is currently being edited by Foggene (talk). |
Overview
PSA and PSK binary files contain the raw animation and mesh information used to import skeletal animation art into the Unreal engine. The PSA file contains the bone names, one or more sequence names, and for each sequence, its frame number N, and tracks of N rotations and N translations for each bone. In Mass Effect 3, PSA data is included inside PCC files and can be exported using the PCC Editor tool integrated in ME3Explorer. To learn how to export and edit PSA data from ingame files read the PSA Editing Tutorial. This page will be concerned with the specifcs of the PSA binary format.
File Structure
The PSA file is structured as a collection if header-data pairs, of which there are four known types: Head, Bones, Info, Keys.
Chunk Header
The chunk header contains information about its companion data chunk: id, type, size and count. There are four possible IDs, corresponding to each of the eight mesh objects:
- ANIMHEAD: Does not contain a data pair.
- BONENAMES: Array with the bone names.
- ANIMINFO: Array of animation sequence info chunks.
- ANIMKEYS: Array of raw keys.
The header is contained within a 32 byte struct:
Bytes | Type | Description |
---|---|---|
20 | Char | Chunk ID |
4 | Int32 | Type Flag |
4 | Int32 | Data Size |
4 | Int32 | Data Count |
Head
The head data chunk is defined by its header as having zero size and zero elements (count). Since it contains no information, it derives that only the header chunk has useful meaning. The header chunk may act as a file-header, but does not necessarily have to be the first chunk in the file.
Bones
The bones data chunk contains an array of bones. Each bone is defined as a 100 bytes struct.
Bytes | Type | Description |
---|---|---|
64 | Char | Bone name |
4 | Int32 | Flags |
4 | Int32 | Children |
4 | Int32 | Parent index |
4 | Float | Rotation X |
4 | Float | Rotation Y |
4 | Float | Rotation Z |
4 | Float | Rotation W |
4 | Float | Position X |
4 | Float | Position Y |
4 | Float | Position Z |
16 | 4 * Int32 | Padding |
Info
Keys
ME3Explorer Classes
ME3Explorer > PSAViewer > PSAViewer.cs
ME3Explorer > Unreal > PSAFile.cs
References
- EpicGames page on binary format specifications for skeletal and vertex animation source files
- Gildor's ActorX Importer