”影響マップファイル2” ver1.0.0.1


1,影響マップファイルとは
2,フォーマット
3,ボーン番号の設定方法について


/////////////////////
1,影響マップファイルとは
/////////////////////

影響マップファイル2は、各頂点が、どのボーンから、どのように影響を受けるかを
保存、編集するファイルです。
拡張子はim2です。

//////////////
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です。





トップページに戻る