- 頂点に重みをつける -
- 頂点に重みをつける -

[重み]メニューを使用して、頂点に「どのジョイントから、どの程度の影響を受けるか」を設定します。
「影響」というのは「あるジョイントが動いたとき、その頂点はどの程度動くのか」という意味です。
とりあえずやってみましょう。

BrightObjectでは重みの設定方法が2種類あります。

1.頂点をマウスで選択して重みをつける
2.重み付けボックスを使用して複数の頂点に重みをつける

まずは1のパターンをやってみましょう。


●重み付けその1〜頂点をマウスで選択して重みをつける〜

[重み]→[頂点に重みをつける]→[頂点選択で重み付け]を選択します。
選択することで、「頂点に対する重み付けモード」になります。

[頂点選択メニューを押したところ]


オブジェクトの描画が点描画となります。
重みをつけたい頂点(緑色の点)をマウスでクリックします。
そうすると頂点の色が青っぽく変わり、頂点が選択されている状態になります。
頂点を次々に押していくと複数の頂点が選択されます。

[頂点を複数選択したところ]


頂点選択後、頂点にカーソルを合わせて右クリックすると、ダイアログボックスが出てくると思います。
このダイアログボックスで「影響を受けるジョイント」と「どのくらいの影響を受けるか」を指定します。

重みの設定をしていない頂点や複数の頂点を選択した場合、
ダイアログボックスの中身は空の状態で表示されます。
重みが設定されている頂点を1つだけ選択してダイアログボックスを表示させた場合、その重みの情報が表示されます。

[重みが設定されている頂点を1つだけ選択してダイアログボックスを出したところ]


[重みが設定されていない頂点を選択してダイアログボックスを出したところ]
 (赤っぽい頂点が選択した頂点を表しています)


ジョイント周辺に数字も表示されました。
この数字はジョイントにつけられた番号で、表示されたダイアログボックスの「同調するジョイント番号」に指定します。
同調するジョイント番号の指定は「選択した頂点がどのジョイントから影響を受けるのかを指定する」ということです。

隣の「重み」には0.0〜1.0の値を入力します。
0.0は何も影響を受けないという意味で、ジョイントが動いても頂点位置は動きません。
1.0を指定すると選択された頂点はジョイントの動きに100%影響されます。つまり、ジョイントの動きに頂点がついていくということです。
ジョイントの動きに対して半分ほど頂点を動かしたいときは0.5を指定する、という具合になっています。
特に入力制限をしていませんので、0.0〜1.0以外の値を格納すると思わぬ方向へ頂点が移動してしまいますが、
重みを1.2に設定したい場合等を考慮し、特に入力制限をしていません。

試しにジョイント8番から影響を100%受けるとします。



OKボタンを押すと頂点に「影響を受けるジョイント」と「重み(影響度)」が設定されます。
この場合、重みを設定された頂点に対して、ジョイント番号8の動きが100%影響されます(ジョイントの動きについていくということです)

試しに動かしてみます。
オブジェクトを「点描画」にし、[ジョイント]→[FKでジョイントを回転]を選択します。
そしてジョイント7番をドラッグしてみます。



重みを設定した頂点が動きますね(ジョイント8番の先)
しかしここで1つ、以下のような疑問が浮かぶかもしれません。

「ジョイント8番から100%の影響度を受ける、と設定したのに、なぜジョイント7番を動かしても動くのか」

これは、ジョイントの親子関係によるものです。

例えば、あなたの指先を頂点と考えます。肘を動かさずに肩を回転させてみましょう。
当然ですが、指先の位置も一緒に動きますね。(離れていったら大変なことです)
さらに当然ですが、肘を動かしたときも指先の位置は動きます。

ここで「肩関節は肘関節の親、肘関節は指先の親」という見方をします。
つまり「親関節を回転させると、子となる関節の位置も動くのが自然」ということになります。
これがボーンの動きとなっています。(ジョイント7番を回転させればジョイント8番が動くということです)

そして親ジョイントが動き、その子ジョイントが動くなら、
子ジョイントから影響を受ける頂点も動かなければ、自然な動きとはならないですね。
ですので、ジョイント7番を動かせばジョイント8番の位置が変わるので、
ジョイント8番の移動の影響を100%影響を受ける頂点も動くということになります。

ジョイントの回転を元に戻すときは[ジョイント]→[すべてのジョイント回転を元に戻す]で戻します。

では次に、同じようにジョイント8番の周辺の頂点からジョイント7番の周辺にある頂点まで
先ほど設定した「ジョイント8番から100%影響を受ける」と設定してみます。



この黄色い円の中の頂点に対して「ジョイント8番から100%影響を受ける」と設定しました。
[ジョイント]→[FKでジョイントを回転]で、ジョイント8番をドラッグしてみます。



黄色い四角の中にある頂点が動いた頂点です。
ジョイント8に沿って動いていることがわかります。
ここで、オブジェクトの表示を「面描画」と元に戻してみましょう。



ジョイント7番の周りの頂点がジョイント8番に影響されすぎていて、
肘の曲がり方がキツイカーブになっています。



そこで、ピンク色のジョイントに対して、
「ジョイント8番から40%、ジョイント7番から60%の影響を受ける」と変更してみます。



このように1つの頂点に対して、2つのジョイントから影響を受けるように設定します。



結果は上図のように。
分かりづらいですが、ジョイント7番の影響が加わり、少しジョイント7番側に移動しました。

なお、ここで要注意事項があります。

【1つの頂点に設定する重みの合計は、必ず1.0としなければならない】

ということです。
つまり、

ジョイント1から受ける重み + ジョイント2から受ける重み + … + ジョイントNから受ける重み = 1.0

となるようにします。
ある頂点位置Pは、

P = Pのローカル座標 * ジョイント1の座標系に変換する行列 * ジョイント1から受ける重み
 + Pのローカル座標 * (ジョイント1の座標系に変換する行列 × ジョイント2の座標系に変換する行列) * ジョイント2から受ける重み
 …
 + Pのローカル座標 * (ジョイント1 × ジョイント2 × … ジョイントNに変換する行列) * ジョイントNから受ける重み

というように計算されます。(実際は平行移動も行われます)
各ジョイントからの移動を少しずつ加え、加算することで頂点位置が決まるような計算となります。

これに従い、ジョイント7番と8番の重みの合計が1.0となるように入力します。
合計が1.0以上/以下となっても[OK]を押せば登録されますが、頂点の位置が思わぬ位置に移ることがあります。
基本的に、1つの頂点に対して設定する重みの合計は1.0となるようにしてください

[面描画]にしてみます。
[ジョイント]→[FKでジョイントを回転]を選びます。
重み付けモードからジョイントを回転させるモードとなり、描画は面・線・点描画に戻ります。
面描画になっていない場合、[表示]→[オブジェクト表示切替]→[面描画]とします。



先ほどよりは綺麗に関節が変形されています。
頂点の数にもよりますが、綺麗に関節を曲げるには「どのジョイントから、どの程度の影響を受けるか」をうまく設定することです。
正解は無いので試行錯誤の繰り返しとなると思いますが、自分が納得のいく関節を描いてみてください。



○重み付けその2〜重み付けボックスで頂点に重みをつける〜

重み付けボックスを使うと、複数の頂点に対してまとめて重みをつけることができます。
頂点に対する処理なので、オブジェクトの表示を「点表示」にしておくと分かりやすいかもしれません。

[重み]→[頂点に重みをつける]→[重み付けボックス]→[重み付けボックスの配置]を選択し、
マウスで3D空間を左クリックするとクリックした位置を中心に重み付けボックスが作成されます。
位置を変えたい場合、他の場所をそのまま左クリックすればボックスの位置が動きます。



重み付けボックスは[重み]→[頂点に重みをつける]→[重み付けボックス]→[重み付けボックスの面の移動]で面の移動ができます。
重み付けボックスの各面をマウスでドラッグすると、重み付けボックスが伸縮します。
頂点をボックス内に入れて、頂点の重みの設定を複数の頂点にまとめて設定することができます。
重み付けボックス配置後、
[重み]→[頂点に重みをつける]→[重み付けボックス]→[重み付けボックス内の頂点に重みをつける]
のメニューを選択すると、複数の頂点に重みを設定できます。
既に重みが設定されている頂点に対しては、重みの設定が上書きされます。



重み付けボックス内の頂点に「ジョイント8番から1.0(100%)の影響を受ける」と設定します。
よければ[OK]を押します。



先ほど「ジョイント8番から40%、ジョイント7番から60%の影響を受ける」と指定した頂点を、
[重み]→[頂点に重みをつける]→[頂点選択で重み付け]で選択してみると、
重みの設定が上書きされていることが分かります。

重み付けボックスである程度の領域に対して重みをまとめて設定し、
細かい重みの設定は、頂点を1つずつ選択して設定していくのがオススメです。


重みをつけた後、右側のジョイント名をダブルクリックすると、
対応したジョイントと、そのジョイントから影響を受ける頂点の色が変わります。



あるジョイントがどの頂点まで影響を与えるのかを見たい時にはこれを使うと便利です。


また、頂点に重みをつけた後、[ジョイント]→[基準ジョイントの移動]で、
X/Y/Zの内、選択したメニューの方向に基準ジョイントを移動することができます。
基準ジョイントを移動させることによって、オブジェクト全体が移動します。



重みがついていない頂点でも基準ジョイントについていきます。




inserted by FC2 system