”影響マップファイル2” ver1.0.0.1
1,影響マップファイルとは
2,フォーマット
3,ボーン番号の設定方法について
/////////////////////
1,影響マップファイルとは
/////////////////////
影響マップファイル2は、各頂点が、どのボーンから、どのように影響を受けるかを
保存、編集するファイルです。
拡張子はim2です。
将来、ツールによって、この頂点ごとに、ボーンの影響度を編集できるようになる予定です。
im2を使用するためには、形状データが、RokDeBone ver1.0.3.6以降で作成したsigファイルが必要になります。
古いデータも、コンバーターによって、新しい形式に変換すれば、im2を使用することが出来るようになります。
コンバートの際には、古いsigファイルを作る元となった、形状データ(*.rok,
*.mqo)が必要になります。
sigファイルと元データ(*.rok, *.mqo)の間で、頂点数が違ったり、オブジェクトの数が違ったりした場合には、
コンバートできないので、注意してください。
コンバーターは、こちらから、ダウンロードしてください。
SigConvForIM2 ver1.0.0.1(781KB) のダウンロード
//////////////
2,フォーマット
//////////////
ver1.0.0.1では、なるべく簡略化し、
影響するボーンの番号と、計算方法の指定をするだけで、
良い仕様にしました。
将来のバージョンで、ボーンの影響度を、そのまま記述する方法も、取り入れるかもしれません。
ファイルの内容は、以下のようです。
////////////// ファイルの始まり
InfluenceMapFile2 : ver1001
PARTSTART
パートの名前1
頂点の番号1, ボーン番号(子供), ボーン番号(親), 計算方法
頂点の番号2, ボーン番号(子供), ボーン番号(親), 計算方法
頂点の番号3, ボーン番号(子供), ボーン番号(親), 計算方法
PARTEND
PARTSTART
パートの名前2
頂点の番号1, ボーン番号(子供), ボーン番号(親), 計算方法
頂点の番号2, ボーン番号(子供), ボーン番号(親), 計算方法
PARTEND
////////////// ファイルの終わり
ファイルの内容の説明をします。
まず、1行目の、"InfluenceMapFile2 : ver1001"は、ファイルのヘッダーです。
"PARTSTART"と"PARTEND"の行で、はさまれた行中に、
各パーツの頂点の情報を記述します。
パートの名前
の部分には、パートの名前を書きます。
同じ名前が、複数あると、正しく処理されませんので、注意してください。
次に、パートに含まれる頂点の情報を書きます。
頂点の番号, ボーン番号(子供), ボーン番号(親), 計算方法
の形式で記述します。
頂点の番号には、sigの元データであるmqoファイルやrokファイル内での頂点の番号を記述します。
元データがmqoファイルである場合には、
mqoファイルにおける、パーツ内での頂点の出現順番(0から始まる番号)と一致させてください。
元データがrokファイルである場合には、
rokファイルにおける、頂点記述パート内に記述されている頂点のインデックス(1から始まる番号)を記述してください。
頂点の番号に、-1を記述した場合は、パーツ内の全ての頂点に、適用されます。
ボーン番号(子供), ボーン番号(親)の部分で、頂点に影響を与えるボーンのベクトルを一つだけ指定します。
番号は、相対値モードのボーンファイルの値と一致する番号を、記述してください。
これら2つの番号は、必ず、親子関係にあるボーンの番号を、子供、親の順番で記述してください。
親が存在しない場合には、-1と記述してください。
子供のボーン番号に-1を指定すると、エラーになります。
計算方法に、ワンスキンを指定する場合は、
頂点の変換計算時に、ここで指定したボーンの、親のボーンを求めて、
ここで指定したボーンと、その親ボーンとで、ブレンド計算をします。
計算方法に、カクカク曲げを指定する場合は、
ブレンド計算は、行われません。
ボーン番号の設定方法の例は、このページの下の方の、”ボーン番号の設定方法について”を、ご覧ください。
計算方法の部分には、どのような変形を行うかを指定します。
CALC_ONESKIN0
と書いた場合は、ワンスキンの変形を、主に頂点とボーンの距離情報を元に、行います。
CALC_NOSKIN0
と書いた場合は、ワンスキンの変形をせず、ロボットのように、カクカクと曲げるように変形します。
ver1001では、この2種類しか方法を有効にしないつもりですが、
将来、CALC_ONESKIN1, CALC_ONESKIN2など、色々な計算方法を用意したいとも思っています。
例えば、人間の関節っぽく曲げる方法と、もっとクネクネ曲げる方法など、
複数の曲げ方を指定できるようにしたいと思っています。
///////////////////////////////
3,ボーン番号の設定方法について
///////////////////////////////
ここでは、ファイル中の
ボーン番号(子供), ボーン番号(親)
の部分に記述するボーンを、どのように選べばいいかを、説明します。
絶対に、この通りにしなくてはいけない、と言うのではなくて、
一つの簡単な例として、読んでください。
ワンスキン処理の場合
1, まず、任意の頂点に影響を与えるボーンツリーを求めます。
ボーンの影響範囲などを考慮して、ボーンツリーを決定してください。
2, 1で、求めたボーンツリーの中で、頂点から一番近いジョイントを求めます。
ここで、求めるジョイントは、子供ジョイントを持っていることを条件として、探します。
ここで、求めたジョイントの番号を、 ”ボーン番号(親)” の部分に記述します。
3, 2で求めた親ジョイントの全ての子供ジョイントと、頂点との距離を比較し、
一番近い距離にあるジョイントを探します。
ここで、求めたジョイントの番号を”ボーン番号(子供)” の部分に記述します。
と、このように、影響範囲と、距離、親子関係だけの情報から作ったデータで、ほとんどの場合、OKです。