ボーン情報のテキスト入出力


形状データや、ボーン構造などを変更するたびに、
ボーンの設定を、最初からやりなおなさければならない問題を解消するために、
ボーン情報の入出力機能をつけました。

メインウインドウの、file メニューから、出力、入力が出来ます。

ボーン情報のファイルの拡張子は bon にしました。
ファイルのフォーマットは、2種類用意しました。
それぞれ、”混合タイプ”、”セパレートタイプ” と呼ぶことにします。

どちらのフォーマットにおいても、ジョイントのシリアル番号と、名前の情報を記述することになります。

ジョイントのシリアル番号は、RokDeBone2で確認できます。
階層構造エディタの、”表示パラメータの設定”メニューを選択すると、
”Sig Params ダイアログ”が出てきます。
ダイアログの上から2行目に、serialno : として表示されます。

また、ボーン情報の入っている(線分データの入っている)rok, mqo を読み込むんだときに、
ジョイントの名前に、シリアル番号が付けるようにしたので、一目で分かると思います。
ただし、RokDeBone2 ver1.0.1.8以前のバージョンで読み込んだデータの名前に付いている番号は、
シリアル番号ではないので、注意してください。



以下に、それぞれのフォーマットの説明を書きます。

混合タイプのフォーマット

まず、混合タイプの出力例をご覧ください。

----------- file のはじまり ------------------------
BoneFile : type mixed : ver1001

0103:,0135:移動,0134:尻,0148:スカート前1,0147:スカート前2,0146:スカート前3,0145:スカート前4,
0134:,0149:スカート右前1,0152:スカート右前2,0151:スカート右前3,0150:スカート右前4,
0134:,0156:スカート右1,0155:スカート右2,0154:スカート右3,0153:スカート右4,
0134:,0160:スカート右後1,0159:スカート右後2,0158:スカート右後3,0157:スカート右後4,
0134:,0164:スカート後1,0163:スカート後2,0162:スカート後3,0161:スカート後4,
0134:,0168:スカート左後1,0167:スカート左後2,0166:スカート左後3,0165:スカート左後4,
0134:,0172:スカート左1,0171:スカート左2,0170:スカート左3,0169:スカート左4,
0134:,0176:スカート左前1,0175:スカート左前2,0174:スカート左前3,0173:スカート左前4,
0134:,0140:左もも,0139:左ひざ,0138:左足,0137:end-左足,
0134:,0143:右もも,0142:右ひざ,0141:右足,0136:end-右足,

(途中省略)

0121:,0117:end-頭,
0107:,0106:胸不動1,0105:胸不動2,
-------------- file のおわり ----------------------

上の結果は、E3DHSPのサンプルに入っている、ni_parts_4_bone.sig の
ボーン情報を出力したものです。
一部、省略してあります。

まず、ファイルの先頭に、”BoneFile : type mixed : ver1001”という行があります。
これは、RokDeBone2が、混合タイプであることを見分けるために、必要な行です。
改行やスペースを含めて、半角で、正しく記述する必要があります。
”type” の後に続く、”mixed”という部分に、特に注意してください。


行と行の間に、依存関係はありません。
各行とも、独立した情報になるようにしました。

フォーマットは、次の通りです。
1,行の先頭には、親のボーンのシリアル番号を書く。(:マークも付ける)
  親のボーンがない場合には、”0000:” と書く。
2,各行には、親,子供,孫, ひ孫, ... の順で要素をカンマで区切って、並べて書く。
3,各要素は、”シリアル番号:要素名” の形式で書く。
4,シリアル番号は、4桁で書く。たとえば12の場合は、0012 と書く。
5,シリアル番号、コロン、カンマは、半角で書く

例えば、
0134:,0140:左もも,0139:左ひざ,0138:左足,0137:end-左足,
という行について見てみますと、

まず、左ももの親のボーンの番号134を4桁プラス コロン表記で書きます。(0134:)
次に、134番のボーンの子供として、140番の左ももを書きます。
次に、左ももの子供として、139番の左ひざを書きます。
次に、左ひざの子供として、138番の左足をかきます。
。。。。
という具合です。

セパレートタイプのフォーマット

セパレートタイプの出力例は、以下のようになります。

----------- file のはじまり -----------
BoneFile : type separated : ver1001

NAMEPART_START
0104:右手不動2
0105:胸不動2
0106:胸不動1
0107:胸
0108:右肩
0109:右ひじ

(途中省略)

0272:左薬指2
0273:左薬指1
0274:左小指3
0275:左小指2
0276:左小指1
NAMEPART_END


TREEPART_START

0103,0135,0134,0148,0147,0146,0145,
0134,0149,0152,0151,0150,
0134,0156,0155,0154,0153,
0134,0160,0159,0158,0157,
0134,0164,0163,0162,0161,
0134,0168,0167,0166,0165,

(途中省略)

0121,0119,0118,
0121,0117,
0107,0106,0105,
TREEPART_END
------- file の終わり ---------------

上の結果も、E3DHSPのサンプルに入っている、ni_parts_4_bone.sig の
ボーン情報を出力したものです。
一部、省略してあります。

まず、ファイルの先頭に、”BoneFile : type separated : ver1001”という行があります。
これは、RokDeBone2が、セパレートタイプであることを見分けるために、必要な行です。
改行やスペースを含めて、半角で、正しく記述する必要があります。
”type” の後に続く、”separated”という部分に、特に注意してください。

セパレートタイプの場合は、
シリアル番号対名前の情報と、
階層構造情報を、分けて記述します。

名前情報、あるいは、階層構造情報のどちらか一方のみ書かれたファイルでも、
RokDeBone2で入力することが出来ます。


名前情報は、NAMEPART_START と NAMEPART_END で、はさまれた部分に記述します。
一行に、一個のジョイントの名前の情報を記述します。
4桁表記のシリアル番号 + 半角のコロン + ジョイントの名前
の形式で記述します。

たとえば、
”0104:右手不動2”
の行は、シリアル番号104のジョイントの名前を、右手不動2という名前にしなさい、という記述です。


階層構造情報は、TREEPART_START と、 TREEPART_END で、はさまれた部分に記述します。
各行には、親, 子供, 孫, ひ孫, ... の順でシリアル番号をカンマで区切って、並べて記述します。
シリアル番号は、4桁表記で記述します。(12の場合は、0012と書く。)

たとえば、
” 0121,0119,0118,”
の行は、シリアル番号102のジョイントの子供として、シリアル番号119のジョイントを登録し、
シリアル番号119のジョイントの子供として、シリアル番号118のジョイントを登録することを意味しています。


シリアル番号、コロン、カンマ、NAMEPART_START, NAMEPART_END, TREEPART_START, TREEPART_END, ファイルの先頭行は、
半角で記述する必要があります。



相対値モードについて(ver1.0.3.1以降のRokDeBone2)

ver1.0.3.1からは、ボーンファイルに相対値モードが、追加されました。
相対値モードとは、シリアル番号の部分に、実際の値ではなく、相対値を記述するモードのことです。
ボーンのシリアル番号の内、一番小さいシリアル番号をfirst_serial、任意のボーンのシリアル番号をcur_serialとすると、
シリアル番号の部分に、cur_serial - firset_serial の値を記述することになります。

例えば、ボーンの中で、一番小さいシリアル番号が13であったとすると、
通常のモードで、シリアル番号16のボーンの記述は、0016になりますが、
相対値モードでは、16 - 13 = 3 なので、0003と記述することになります。

このモードの利点は、
モデルデータ(*.rokや、*.mqo)中に、記述されている、ボーンの出現順番(0から始まり1ずつ増える番号)と、
相対値が等しいことにあります。
そのため、他のソフトで作ったデータから、RokDeBone2で使用可能なボーンファイルを作成する際に、
便利になります。

また、もう一つの利点は、
相対値モードで、ボーンファイルを保存しておけば、
形状データ部分だけ、データが更新された場合に、
保存しておいたボーンファイルを、そのまま、読み込むことで、
ボーン構造を復元できる点です。
(ボーン構造などが変化した場合は、ボーンファイルも編集し直さないといけません。)

相対値なので、マイナスの値もサポートすることになりました。
マイナスの場合は、半角の-符号の後に、4桁の番号を記述します。
例えば、一番親のボーンの親の番号を指定する際には、
-0001 と書くことになると思います。

相対値モードのボーンファイルを、手で編集する場合は、
ボーンファイルが相対値モードであることを宣言しなければなりません。
これは、ボーンファイル中に、
RELATIVE_BONENO_MODE
という行を書けばOKです。
行と書いたのは、改行マークも含まれていないといけないことを意味します。


RokDeBone2から、相対値モードのボーンファイルを作る場合は、
fileメニューの、「ボーン情報のテキスト出力」を選んでください。
ファイル名を指定した後、下の図のような、ダイアログが出てきます。



ダイアログの、「シリアル番号を相対値で記録する」チェックボックスをチェックすると、
相対値モードのボーンファイルが作成されます。




RokDeBone2のダウンロードのページへ

トップページに戻る