ファイルに出てくる順番 | バイトサイズ | 説明 |
1. | 8 | シグネーチャ("ObjTree_"など文字列でもある) |
2. | 8 | 開始ブロック中身サイズ(次のファイルオフセット+このデータ=次のブロック) |
ログを吐かれているだけで、ファイルから読み取っている形跡はないため、ファイル中においてあるデータではない |
ファイルオフセット(16進数) | バイトサイズ(10進数) | 説明 |
0 | 6 | シグネーチャ AnimeEffects用ファイルを表す |
6 | 2 | エンディアンチェック 1バイト目が0xff,2バイト目が0x00でなければfalse(多分0x00ffなら「リトルエンディアン」で、そうでなければエラーで終わるようになってる) |
8 | 4 | 符号なし4バイト整数 メジャーバージョン |
0x0c | 4 | 4:符号なし4バイト整数 マイナーバージョン |
0x10 | 16 | 空き領域 |
ファイルオフセット(16進数) | バイトサイズ(10進数) | 説明 |
0x20 | 4 | テキストタイプでシグネーチャ"GLBL" |
0x24 | 4 | 符号なし4バイト整数 中身が64でなければエラーでおわるようになってる lengthという一時変数に入れられている |
0x28 | 4 | 横幅,符号なし整数 |
0x2c | 4 | 縦幅,符号なし整数 |
0x30 | 4 | 最大フレーム数,符号なし整数 |
0x34 | 4 | FPS(1秒ごとのフレーム数),符号なし整数 |
0x38 | 4 | ループ設定があるかどうか,符号なし整数 |
0x3c | 44 | 空き領域 |
0x68 | 可変 | B-1リソースホルダ、C-1オブジェクトツリーの順へ続く |
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"Resource" |
2. | 符号付4バイト整数 | トップノードの数 |
3. | 文字列(可変サイズ、4バイト境界) | ファイルパス |
4. | B-2リソースノード | |
5. | エンドブロック |
ResourceHolder mResourceHolder;を持ちます。
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"ResNode_" |
2. | 文字列(4バイト境界) | ID |
3. | 符号付き4バイト整数 | 子供の数 |
4. | 符号付き4バイト整数 | バインドID |
5. | 符号なし4バイト整数 | レイヤーかどうか |
6. | 符号付4バイト整数×4 | 長方形位置データ(左、上、横幅、縦幅の順) |
7. | 1バイト×4 | 文字列互換形式でブレンドID(レイヤーの合成方法) |
8. | 符号なし4バイト整数 | 圧縮形式 0=圧縮なし(画像なしの場合に使われるようです),1以上=圧縮 |
9. | 符号なし4バイト整数 | 画像横幅 |
10. | 符号なし4バイト整数 | 画像縦幅 |
11. | 符号なし8バイト整数 | 中身データのバイトサイズ(圧縮されている場合(現バージョンでは中身データがある場合圧縮されている)、圧縮された状態でのサイズ) |
12. | 符号なし4バイト整数 | ARGBどれか1チャンネルの横1ラインのバイトサイズ |
13. | 可変サイズ(「12.」のサイズ) | ARGBどれか1チャンネルの横1ラインの中身データ |
14. | エンドブロック | |
15. | 可変 | 「3.」の子供の数だけ、子階層を表す「B-2:リソースノード」データが続く |
ResourceHandle mHandle;リソースハンドルはさらに
std::shared_ptr<ResourceData> mData;ただし、AnimeEffectsのソースはクラスで演算子オーバーライド
img::Buffer mBuffer;という名前で入っています。
BlendMode_Normal, BlendMode_Darken, BlendMode_Multiply, BlendMode_ColorBurn, BlendMode_LinearBurn, BlendMode_Lighten, BlendMode_Screen, BlendMode_ColorDodge, BlendMode_LinearDodge, // Equal to Add BlendMode_Overlay, BlendMode_SoftLight, BlendMode_HardLight, BlendMode_VividLight, BlendMode_LinearLight, BlendMode_PinLight, BlendMode_HardMix, BlendMode_Difference, BlendMode_Exclusion, BlendMode_Subtract, BlendMode_Divide,
BlendMode_TERM};
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"ObjTree_" |
2. | 符号付4バイト整数 | トップノードの数(0か1のみ) |
3. | C-2:オブジェクトノードのデータ | |
4. | エンドブロック |
ObjectTree mObjectTree;を持ちます。
QScopedPointer<ObjectNode> mTopNode;に入ります。
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"ObjNode_" |
2. | 符号付4バイト整数 | オブジェクトノードのタイプ(0=レイヤー,1=フォルダ) |
3. | 符号付4バイト整数 | 子供の数 |
4. | C-3:フォルダーノードまたはC-4:レイヤーノードのデータ | |
5. | エンドブロック | |
6. | 「3.子供の数」分、子階層のC-2:オブジェクトノードデータの並び |
typedef tTreeNode TreeNodeType; typedef TreeChildren<tTreeNode> Children;
Children mChildren;という形で保持されます。
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"FolderNd" |
2. | 文字列(可変サイズ4バイト境界) | フォルダ名 |
3. | 符号なし4バイト整数 | 表示中かどうか |
4. | 符号なし4バイト整数 | IsSlimmedDownフラグ |
5. | 符号付4バイト整数 | 位置データ(横位置、縦位置、横幅、縦幅の順) |
6. | 符号なし4バイト整数 | クリッピングしているかどうか |
7. | C-5:タイムラインデータ | |
8. | エンドブロック |
QString mName;に入ります。
bool mIsVisible;に入ります。
bool mIsSlimmedDown;に入ります。
QRect mInitialRect;に入ります。
bool mIsClipped;に入ります。
TimeLine mTimeLine;に入ります。
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"LayerNd_" |
2. | 文字列(可変サイズ4バイト境界) | レイヤー名 |
3. | 符号なし4バイト整数 | 表示中かどうか |
4. | 符号なし4バイト整数 | IsSlimmedDownフラグ |
5. | 符号付4バイト整数 | 位置データ(横位置、縦位置、横幅、縦幅の順) |
6. | 符号なし4バイト整数 | クリッピングしているかどうか |
7. | C-5:タイムラインデータ | |
8. | エンドブロック |
QString mName;に入ります。
bool mIsVisible;に入ります。
bool mIsSlimmedDown;に入ります。
QRect mInitialRect;に入ります。
bool mIsClipped;に入ります。
TimeLine mTimeLine;に入ります。
ファイルに出てくる順番 | データタイプ | 説明 |
1. | 開始ブロック16バイト | シグネーチャ"TimeLine" |
2. | 符号付4バイト整数 | タイムマップの数 |
3. | 開始ブロック16バイト | シグネーチャ"TimeMap_" |
4. | 文字列最大8バイト4バイト境界(0終端部分を含むサイズで4バイト境界) | タイムキーのタイプ名 ("FFD"と"Opa"のみ4バイト、それ以外は8バイトファイルサイズを占領している) |
5. | 符号なし4バイト整数 | このキータイプのデフォルトキーを持つかどうか |
6. | デフォルトキーがあればデフォルトキーのC-6:タイムキーデータ | |
7. | 符号付4バイト整数 | このキータイプのタイムキーの数(デフォルトキーを除く) |
8. | 符号付4バイト整数 | タイムキーの位置(インデックス) |
9. | C-6:タイムキーデータ | |
10. | タイムマップのエンドブロック | |
11. | C-5:タイムラインデータのエンドブロック |
"Move" "Rotate" "Scale" "Depth" "Opa" "Bone" "Pose" "Mesh" "FFD" "Image"があります。
core::TimeKeyType_Image, core::TimeKeyType_Mesh, core::TimeKeyType_FFD, core::TimeKeyType_Bone, core::TimeKeyType_Pose, core::TimeKeyType_Move, core::TimeKeyType_Rotate, core::TimeKeyType_Scale, core::TimeKeyType_Depth, core::TimeKeyType_Opa};
プロジェクトファイル「.anie」の即席の解析結果です。 内容に誤まりなどがあるかもしれませんので自己責任でお願いします。 表ができたら消しますが、それまで残しておきます。 読み込みの基本関数はcore/Deserializer.h(.cpp)で行われています。 具体的な読み込みは例えばMeshKey.cpp内のDeserialize系のメソッドという風に各データのメソッドで行われます。 画像の読み込みは bool Deserializer::readImage(XCMemBlock& aValue) で書かれています。 ;;各データ(個別化して表示) ;補足:文字列の「4バイト境界」とは、次のデータが4バイト境界で始まるように0などを追加で埋めるという意味 ;「符号付整数4バイト ID(バインド用)」は ;Deserializer::bindIDData関数で読まれた部分 ;「符号付4バイト整数 ID(order)」は ;Deserializer::orderIDData関数で読まれた部分 ;.anieヘッダ ファイルオフセット(16進数)、バイトサイズ(10進数)、説明の順 0:6:シグネーチャ AnimeEffects用ファイルを表す 6:2:エンディアンチェック 1バイト目が0xff,2バイト目が0x00でなければfalse(多分0x00ffなら「リトルエンディアン」で、そうでなければエラーで終わるようになってる) 8:4:符号なし4バイト整数 メジャーバージョン 0x0c:4:符号なし4バイト整数 マイナーバージョン 0x10:16バイト:空き 0x20: ;animeグローバルブロック 0x20:4:テキストタイプでシグネーチャ"GLBL" 0x24:4:符号なし4バイト整数 中身が64でなければエラーでおわるようになってる lengthという一時変数に入れられている 0x28:4:横幅,符号なし整数 0x2c:4:縦幅,符号なし整数 0x30:4:最大フレーム数,符号なし整数 0x34:4:FPS(1秒ごとのフレーム数),符号なし整数 0x38:4:ループ設定があるかどうか,符号なし整数 0x3c::空き 0x68:リソースホルダ、続いてオブジェクトツリー 以降のデータは、「数字.」説明の順で表記します。 数字.はファイル上に出てくる順番を指します。 ;;開始ブロックのデータ型(16バイト) ;1. シグネーチャ(1バイト×8)("ObjTree_"などANSI) ;2. ブロックサイズ(8バイト)(「1.」と「2.」を除いたブロック中身の部分のバイトサイズ。「2.」のデータの次のファイルオフセット+「2.」データ=次のブロック) ;;エンドブロックのデータ型 ;1.ログを吐かれているだけで、ファイルから読み取っている形跡はないため、ファイル中においてあるデータではない ;;リソースホルダーのデータ ;1.開始ブロック"Resource" ;2.符号付4バイト整数 リソースのトップノード数 ;3.リソースのトップノードデータ(可変個) ;リソースのトップノードデータ ;1.Null終端文字列(4バイト境界) ファイルパス ;2.リソースのノードデータ ;リソースのノードデータ ;1.開始ブロック"ResNode_" ;2.ID(Null終端文字列、4バイト境界) ;3.符号付4バイト整数 子供の数 ;4.符号付4バイト整数 ID(バインド) ;5.符号なし4バイト整数 レイヤーかどうか(1ならレイヤー) ;6.符号付4バイト整数 ×4 Rect(横位置、縦位置、横幅、縦幅の順 ;7.4バイト固定文字列 ブレンド名 ;8.符号なし4バイト整数 圧縮タイプ ;9.符号なし4バイト整数 画像の横幅 ;10.符号なし4バイト整数 画像の縦幅 ;11.符号なし8バイト整数 圧縮データのバイトサイズ ;中身データ ;12.符号なし4バイト整数 チャンネル1つの横1ラインのバイトサイズ ;13.「12.」のバイトサイズ分のデータ ;「12.」「13.」合わせてARGBのどれか1つのチャンネルの横1ライン分のデータで、これを1セットとし4チャンネル分(4セット)連続している ;このデータは圧縮されているらしく、解凍らしき処理が含まれている(画像データの圧縮形式を参照) ;さらに、それが縦幅分並んでいる ;中身データの一番最後は4バイト境界 ;14.エンドブロック ;15.子供の数だけ再帰的にリソースのノードデータ(トップノードと違ってファイルパスを含まない) ;;オブジェクトツリーのデータ(1つのみ) ;1.開始ブロック"ObjTree_" ;2. 符号付整数4バイト topNodeCount(1になるはずで、そうでなければエラー) ;3.オブジェクトツリーノードのデータ ;4.エンドブロック ;;オブジェクトツリーノードのデータ(可変個数) ;1.開始ブロック"ObjNode_" ;2.4バイト符号付整数 ノードタイプ ;ObjectType_Layer ;ObjectType_Folder ;3.4バイト符号付整数 子供の数 ;4.符号付整数4バイト ノードのID(バインド用) ;5.レイヤーノードorフォルダーノード ;6.エンドブロック ;7.子供の数だけ子供のオブジェクトツリーノードのデータ ;参考: ;ノードタイプはcore/ObjectType.hで次のように定義 enum ObjectType { ObjectType_Layer, ObjectType_Folder, ObjectType_TERM }; ;;フォルダノードのデータ ;1.開始ブロック"FolderNd" ;2.Null終端文字列データ フォルダ名(4バイト境界?)(可変サイズ) ;3.符号なし4バイト整数 表示状態 ;4.符号なし4バイト整数 SlimmedDown状態かどうか ;5.符号付4バイト整数×4 初期Rect(横位置、縦位置、横幅、縦幅の順) ;6.符号なし4バイト整数 クリッピングしてるかどうか ;7.タイムラインデータ ;8.エンドブロック ;タイムラインデータはレイヤーノードのと一緒(下記参照) ;;レイヤーノードのデータ ;1.開始ブロック"LayerNd_" ;2.Null終端文字列データ レイヤー名(4バイト境界?)(可変サイズ) ;3.符号なし整数4バイト 表示状態 ;4.符号なし整数4バイト IsSlimmedDown ;5.符号付整数4バイト×4 初期Rect(横位置、縦位置、横幅、縦幅の順) ;6.符号なし整数4バイト クリッピングしているかどうか ;7.タイムラインデータ 読み込み時にここでオリジナルシェーダーの読み込みなどシェーダーの設定がされています ;8.エンドブロック ;;タイムラインデータ ;1.開始ブロック"TimeLine" ;2.符号付整数4バイト タイムマップ数 ;3.タイムマップデータ(可変個) ;4.エンドブロック ;タイムマップデータ ;1.開始ブロック"TimeMap_" ;2.可変最大8バイト(4バイト境界?)タイムキー名 ;3.符号なし整数4バイト 1の時デフォルトキー ;3-1.デフォルトキーならデフォルトキー用タイムキーデータ読み込み ;4.符号なし整数 4バイト キー数 ;5.符号なし整数4バイト キーインデックス(このキーの該当フレーム位置) ;6.タイムキーデータ ;7.エンドブロック ;補足:「5.」「6.」の順のデータを1セットとして、それがキー数分並んでいる ;キーインデックス(フレーム位置)はソースファイルのデータ上では ;各キーの親クラスであるTimeKeyクラスのint型変数「mFrame」に入ります。 ;;参考:タイムキー名(core/TimeLine.cppにある) Names = { "Move", "Rotate", "Scale", "Depth", "Opa", "Bone", "Pose", "Mesh", "FFD", "Image" }; ;;タイムキーデータ ;タイムマップデータの 2.タイムキー名 によるタイプによって、 ;MoveKey,RotateKey,ScaleKey,DepthKey,OpaKey,BoneKey,PoseKey,MeshKey ;FFDKey,ImageKeyに分かれる(現バージョンで10種類) ;↓に各タイプ別に読み込み方を書きます ;;タイムキーデータ(MoveKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.符号付4バイト整数 スプラインIdx(SplineType_) ;6.float4バイト×2 位置 横、縦の順 ;7.float4バイト×2 centroid 横、縦の順 ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(RotateKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.float 4バイト 回転度 ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(ScaleKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.float 4バイト ×2 拡大縮小度 横、縦の順 ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(DepthKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.float 4バイト 深度(Depth) ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(OpaKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.float 4バイト Opacity(不透明度) ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(BoneKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト ボーンの数 ;3.「2.」のボーンの数だけボーンデータ(可変個) ;4.符号付4バイト整数 ID(order) キャッシュ系のデータ(cash owner) ;5.符号付4バイト整数 キャッシュ数 ;6.「5.」のキャッシュ数だけボーンのキャッシュデータ(可変個数) ;7.符号付4バイト整数 バインディングキャッシュ数 ;8.「7.」のバインディングキャッシュ数だけボーンのバインディングキャッシュデータ(可変個数) ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;ボーンデータ ;1.符号付4バイト整数 子供の数 ;2.符号付4バイト整数 ID(バインド用) ;3.符号付4バイト整数 ID(order) ;4.float 4バイト×2 ローカル座標での位置(X,Yの順) ;5.float 4バイト ローカル座標でのAngle ;6.float4バイト×2 X,Yの順Rangeその1 ;7.float4バイト×2 X,Yの順Rangeその2 ;以下はボーンシェイプデータ ;8.符号なし4バイト整数 有効かどうか ;9.float4バイト×2 セグメントstart X,Yの順 ;10.float4バイト×2 セグメントdir X,Yの順 ;11.float4バイト×2 Vユニット X,Yの順 ;12.float4バイト DirAngle ;13.float4バイト Length ;14.float4バイト×2 Radiusその1 X,Yの順 ;15.float4バイト×2 Radiusその2 X,Yの順 ;16.float4バイト RootBendRange中のangleその1 ;17.float4バイト RootBendRange中のangleその2 ;18.float4バイト TailBendRange中のangleその1 ;19.float4バイト TailBendRange中のangleその2 ;20.float4バイト×4 バウンディングRect 横位置、縦位置、横幅、縦幅の順 ;21.符号付4バイト整数 ポリゴン頂点数 ;22.float4バイト2つ(頂点位置X,Yの順)×ポリゴン頂点数 (可変個) ;ボーンシェイプデータここまで ;23,符号付4バイト整数 バインド数 ;24.符号付4バイト整数×バインド数 ID(order)(可変個) ;25.float4バイト×2 ワールド座標での位置(X,Yの順) ;26.float4バイト ワールド座標でのAngle ;27.float4バイト Rotate ;28.「1.」の子供の数だけボーンデータ(可変個) ;;ボーンのキャッシュデータ ;1.符号付4バイト整数 ID(order) ;2.float4バイト×2 origin offset(X,Yの順、「obsolete」とコメントあり) ;BoneInfluenceデータ系 ;3.符号付4バイト整数 BoneInfluenceデータ:頂点数 ;4.符号付4バイト整数 BoneInfluenceデータ:最大ボーン数 ;5.符号付4バイト整数×上記頂点数 Indicesその1 ;6.符号付4バイト整数×上記頂点数 Indicesその2 ;7.float4バイト×上記頂点数 ウェイトその1 ;8.float4バイト×上記頂点数 ウェイトその2 ;BoneInfluenceデータ系ここまで ;;ボーンのバインディングキャッシュデータ ;1.符号付4バイト整数 ID(order) ;2.符号付4バイト整数 boneIndex ;3.float4バイト×16 innnerMtx(QMatrix4x4) ;;タイムキーデータ (PoseKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3,符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージングウェイト ;5.符号付4バイト整数 ボーン数 ;6.ボーンデータ 「5.」のボーン数だけ (可変個) ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(MeshKey) ;1.符号付4バイト整数 ID(バインド) ;2.float 4バイト オリジンオフセット x位置 ;3.float 4バイト オリジンオフセット y位置 ;4. 符号付4バイト整数 頂点の数 ;5.float 4バイト×2 頂点の位置(横、縦の順)(可変個) ;6.符号付4バイト整数 辺の数 ;7.符号付4バイト整数×2 v0とv1 辺(可変個) ;8.符号付4バイト整数 面の数 ;9.符号付4バイト整数×3 e0 e1 e2面データ ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(FFDKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3.符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージング:ウェイト ;5.符号付4バイト整数 頂点数 ;6.float4バイト×3で1つの位置データ×頂点数 ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;タイムキーデータ(ImageKey) ;1.符号付4バイト整数 ID(バインド) ;2.符号付4バイト整数 イージング:タイプ ;3.符号付4バイト整数 イージング:レンジ ;4.float 4バイト イージング:ウェイト ;5.符号付4バイト整数 ID(order) ;6.1×4バイトでブレンドモード名 ;7.float4バイト×2でイメージオフセット ;8.グリッドメッシュデータ ;符号付4バイト整数 子供の数 ;符号付4バイト整数 子供の数だけ子供のID(order) ;;グリッドメッシュデータ(GridMesh) ;1.開始ブロック"GridMesh" ;2.符号付4バイト整数 タイプ ;3.符号付4バイト整数×2 サイズ横、縦の順 ;4.float4バイト×2 横、縦 オリジンオフセット ;5.符号付4バイト整数 セルピクセル ;6.符号付4バイト整数 プリミティブタイプ ;7.符号付4バイト整数 インデックス数 ;8.符号なし整数4バイト×インデックス数 でインデックスの配列 ;9.符号付4バイト整数 頂点数 ;10.float4バイト×3で1つの頂点位置×頂点数 (x,y,zの順×頂点数) ;11.float4バイト×3で1つの頂点のオフセット×頂点数 ;12.float4バイト×2で1つのテクスチャコード×頂点数(x,yの順×頂点数) ;13.float4バイト×3で1つの法線×頂点数 ;14.符号なし8バイト整数 生サイズ ;15.「14.」の生サイズ分中身データ ;16.Qtバージョン0.5以上の場合 符号付4バイト整数×4 頂点のRectデータ横位置縦位置横幅縦幅 ;17.エンドブロック