UDN
Search public documentation:

BinaryFormatSpecificationsJP
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

骨格アニメーションのソースファイルのバイナリフォーマット仕様

ドキュメントの概要: 骨格アニメーション/メッシュのソースバイナリファイルのフォーマット関する説明。

ドキュメントの変更ログ: Lina Halper? により最終更新。バージョン 2.21 (3dsMax) とバージョン 2.46 (Maya) に関する内容を更新し、レイアウトに関する部分を書き直した。原作は Erik de Neve (EpicGames)。

骨格アニメーションとメッシュのソースバイナリ

Max または Maya から ActorXJP プラグインを使ってエクスポートした PSA と PSK バイナリファイルには、Unreal Engine に骨格アニメーションアートをインポートするのに使われる未処理の (raw) アニメーションおよびメッシュの情報が含まれています。以下に紹介するフォーマット仕様は、フォーマットの拡張や、サードパーティユーティリティ (スキンペイントプログラム、他の 3D パッケージ用のエクスポートツールなど) の作成に興味があるユーザー向けに参照目的で提供するものです。

PSK フォーマット:

これには、メッシュ、ボーン影響度のインデックス、各頂点のウェイト、ボーンの名前、ボーン階層、骨格のデフォルトポーズが含まれています。

PSK フォーマット、バージョン 1.0 (注意: すべてのヘッダーのタイプは VChunkHeader ) - 通常、ファイルはヘッダーとデータのペアで構成されています。ヘッダーには、それに続くデータ項目の数が指定されています (Datacount フィールド) 。

登場順 説明
汎用ヘッダー (General Header) Typeflag 値が 10進数 1999801 以下の場合、バージョン 1.0 の PSK ファイルのレイアウトであることを意味します。
Points ヘッダー 点の数を示すヘッダー (Datacount で定義)。
Points データ VPoint を含む配列。
Wedges ヘッダー ウェッジの量を示すヘッダー。
Wedges データ VVertex ウェッジ配列 (ウェッジは UV ペアで構成され、3次元点の配列へのインデックスを持つ)。
Faces ヘッダー フェイスの量を示すヘッダー。
Faces データ VTriangle フェイス配列。
Materials ヘッダー マテリアルの量を示すヘッダー。
Materials データ VMaterial マテリアル配列
Bones ヘッダー ボーンの量を示すヘッダー。
Bones データ VBone ボーン配列。
Influences ヘッダー ボーン影響度の量を示すヘッダー。
Influences データ VRawBoneInfluence 影響度の配列。

PSA フォーマット:

PSA ファイルには、ボーンの名前、1 つまたは複数のシーケンス名、さらに、シーケンスごとに、フレーム番号 N、各ボーンの N における回転と平行移動トラックの数が含まれます。

PSA フォーマット、バージョン 1.0 (注意: すべてのヘッダーのタイプは VChunkHeader です) - PSK ファイルと同様、PSA ファイルはヘッダーとデータのペアで構成されています。

登場順 説明
General ヘッダー Typeflag 値が 10進数 20090127 (Maya)、=2003321= (3dsMax) の以上の場合、バージョン 1.0 の PSA ファイルのレイアウトであることを意味します。
Bones ヘッダー ボーンの量を示すヘッダー。
Bones データ FNamedBoneBinary ボーン名の配列。
Animations ヘッダー アニメーションシーケンスの情報チャンクの量を示すヘッダー。
Animations データ アニメーションシーケンスの情報チャンクの AniminfoBinary 配列。
Raw keys ヘッダー ローキーの量を示すヘッダー。
Raw keys データ VQuatAnimKey 配列。
Scale keys ヘッダー スケールキーの量を示すヘッダー。
Scale keys データ VScaleAnimKey 配列。
Curve keys ヘッダー カーブキーの量 (Blendshapes の数) を示すヘッダー。(Maya からエクスポートした場合のみサポート)
Curve keys データ VBlendCurve 配列。(Maya からエクスポートした場合のみサポート)

ローキー配列は、すべての指定シーケンス内にあるすべてのボーンのキーを、以下のように整理して格納します。

各 AnimInfoBinary のシーケンスに対して、VQuatAnimKeys には [ボーンの数][フレームキーの数] の量のキーがあり、PSA の FnamedBoneBinary 配列で定義されているボーンの順に、各ボーンの [numframes] 個のキーのトラックとして並べられています。

個々の VBlendCurve には、BlendCurveName[128] とウェイト値の float 配列 ([フレームキーの数] に相当) があります。

エンジン内部のアニメーションデータ

PSK (Native の骨格メッシュに処理される) と PSA (1 つ以上のシーケンスを含む Native のアニメーションオブジェクトに処理される) から得られたデータは、実行時にひとつに関連付けられ、その名前によってボーンにつなぎ合わせられます。骨格内のあらゆるボーン (PSK データ) 、またはアニメーション シーケンス内にパートナーが見つからないボーン (PSA データ) は、参照ポーズのスタンスを取ります (PSK ファイルには、参照スケルトンを組み立てる VBones があり、そのオフセットと回転データにより定義されます)。

エディタのアニメーションブラウザにインポートされる Native アニメーションとメッシュコードデータは、UKX パッケージファイルの形式を取ります。

使用される C++ 構造

関連する構造体とクラスは、次のヘッダーファイルにまとめられています。

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

すべての構造は VC++ によって DoubleWord (32 ビット) サイズの倍数でパディングされる点に注意してください。カスタムコードを記述するときに、定義の前後に #pragma pack(push,1) を挿入すると PSA/PSK バイナリの互換性が無効になります。 #pragma pack(push,4) を使ってデフォルトのパッキングを強制することができます。幸いなことに、これはローデータの場合だけなので、この「無駄な」スペースは問題にはなりません。Max/Maya のエクスポート機能だけでなく、エディタのインポートコードも同じパディングが行われます。