VMDファイルフォーマット

まとまっているファイルフォーマットの情報が無かったのでメモ。

ヘッダ

VMDファイルはヘッダから始まります。 "\0"はC言語の終端文字を表しています。
オフセット 長さ(バイト) 内容
0 30 char[30] "Vocaloid Motion Data 0002\0" の文字列
30 20 char[20] "初音ミク\0"などのモデル名の文字列
50 4 unsigned long フレームデータ数

フレームデータ

ヘッダに続いて54バイト目からフレームデータが繰り返し続きます
オフセット 長さ(バイト) 内容
0 15 char[15] "頭\0"などのボーン名の文字列
15 4 unsigned long フレーム番号
19 4 float ボーンのX軸位置。位置データがない場合は0
23 4 float ボーンのY軸位置。位置データがない場合は0
27 4 float ボーンのZ軸位置。位置データがない場合は0
31 4 float ボーンのクォータニオンのX。データがない場合は0
35 4 float ボーンのクォータニオンのY。データがない場合は0
39 4 float ボーンのクォータニオンのZ。データがない場合は0
43 4 float ボーンのクォータニオンのW。データがない場合は0
47 64 char[64] 補間パラメータ

補間パラメータはしたらばのMMD板の情報が載っていた。 MMDでは補間パラメータを4点のベジエ曲線(0,0),(ax,ay),(bx,by),(127,127)で表している。

各軸のパラメータを
X軸の補間パラメータ (X_ax,X_ay),(X_bx,X_by)
Y軸の補間パラメータ (Y_ax,Y_ay),(Y_bx,Y_by)
Z軸の補間パラメータ (Z_ax,Z_ay),(Z_bx,Z_by)
回転の補間パラメータ (R_ax,R_ay),(R_bx,R_by) 

とした時、補間パラメータは以下の通り。
X_ax,Y_ax,Z_ax,R_ax,X_ay,Y_ay,Z_ay,R_ay,X_bx,Y_bx,Z_bx,R_bx,X_by,Y_by,Z_by,R_by,
Y_ax,Z_ax,R_ax,X_ay,Y_ay,Z_ay,R_ay,X_bx,Y_bx,Z_bx,R_bx,X_by,Y_by,Z_by,R_by,01,
Z_ax,R_ax,X_ay,Y_ay,Z_ay,R_ay,X_bx,Y_bx,Z_bx,R_bx,X_by,Y_by,Z_by,R_by,01,00,
R_ax,X_ay,Y_ay,Z_ay,R_ay,X_bx,Y_bx,Z_bx,R_bx,X_by,Y_by,Z_by,R_by,01,00,00

inserted by FC2 system