🎉

【MotionBuilderチュートリアル】第9回~小物追加とセット、コンストレイントについて~

2022/12/01に公開

こんにちは、株式会社GUNCY'Sの岡崎です。
今回はキャラクターに小物を持たせる方法について説明をします。

ここでいう小物とは、キャラクターが手に持ってアクションができるオブジェクトの事を言います。たとえば、アイドルが持つマイクや、剣士が持つ剣などがこれにあたります。キャラクターに小物を持たせるには「コンストレイント」と呼ばれる機能を使用します。コンストレイントにはさまざまな種類がありますが、小物を持つときの動きは使用ケースが多く、特に分かりやすいと思います。

コンストレイントとは?

そもそもコンストレイントとは、オブジェクト同士に関係を持たせ動作を制御する機能です。
2つのオブジェクトA、Bがあるとします。オブジェクトAの位置や回転などの情報を用いてオブジェクトBを制御します。

たとえば、Aが移動するとBも移動する、Aが回転するとBも回転するといった処理になります。

細かい物理的な事は考えずに、キャラクターが棒を手に持った時、棒は手についてくるはずです。キャラクターの手と棒が関係を持ったといえますね。具体的にいうと、手の動きを元にして小道具も一緒に動く関係となっています。この場合、手を振ったり、ひねる動きは手(A)の位置と回転情報を元にして、棒(B)が動いています。これがコンストレイントを使用した物体の追従の仕組みです。

ここではAを参照元、Bを参照先と呼ぶこととします。
ここから、実際にコンストレイントを使用して、キャラクターに小物を持たせるための操作を実践します。

小物の追加手順

  1. ファイルの読み込み
    まずはファイルを読み込みます。
    画面左上のFileからOpen

    今回はプロットする前のファイルを使用します。前々回保存したファイルを使用します。

https://zenn.dev/guncys/articles/363883ae075b90
kaya001_retarget.fbx

ファイルが読み込めたことを確認します。

  1. 小物を追加

    ファイルを読み込めたら次は小物を用意します。

    今回は簡単な円柱を用意してキャラクターに持たせましょう。

    Nullを2つシーンに追加します。
    Asset Browser→Elements
    数値は移動値、回転値ともに”0”に設定

    Elements以下のPrimitivesからCylinderをシーンに追加

    親子づけ(Parent)します。

    この時、Cylinderは一番下の子オブジェクトになるようにしてください。

Tips : Parentの操作方法

MotionBuidlerにはオブジェクト同士の親子関係を操作する機能があります。さきほどの親子づけは以下のように操作します。

子のオブジェクトを選択し、《Alt + 左ドラッグ》で親にするオブジェクトへドロップ

メニューが出てくるのでParentを選択

画像のように線で繋がれます。

  1. 名前の変更
    名称がわかりにくいので、追加したNull達の名前を変えます。

スケマティックビューでNullにマウスカーソルを合わせ右クリックでメニューを出します。
renameを選択して名前を変更します。 Null→root Null 1→attach Cylinder→stick

このような親子関係を作ることで、attachにstickが追従するようになります。ここではattachの座標を動かすことで棒の位置を制御します。

stick(Cylinder)のスケールを以下のように入力し棒状に変形させます。
PropertiesのScalingに数字を入力すると思い通りの数値が打てます。

Tips:Propertiesについて

Propertiesタブには、選択しているオブジェクトやコンストレイントなどの情報が表示されます。また、それらの情報を操作することができます。選択するオブジェクトによって表示される項目は変わります。

小物を持たせる

次にシーンにコンストレイントを追加します

コンストレイントはAsset Browser内のTemplatesからConstraintsを選択したところにあります。

その中のParent/Childを使用します。
これをViewerにドラッグ&ドロップします。

すると、Navigatorに以下のように表示されます。

冒頭で、「コンストレイントとは、オブジェクト同士に関係を持たせ、動きに反映させる機能である」とお伝えしたと思います。そのオブジェクト同士の関係についてをここで設定することができます。これを設定することで、さきほど作成したstickがモデルの手に追従するようになります。

それではコンストレイントの設定をしていきましょう。

今回は右手に小物を持たせたいので、右手首のボーンを選択しましょう。
Kayaモデルなら”Bip001 R Hand”を選択します。

ボーンを選択した状態でViewerから《Alt+左ドラッグ》でConstraint SettingsのSource (Parent) 1にドロップします。

次に、棒を手に追従させるための設定をします。
作成した棒からattachノードを選択します。

また、さきほどと同じように《Alt+左ドラッグ》をして、Constrained object (Child)にドロップします。

ここで棒の位置を手に持った時の位置に合わせます。
Transport Controlsを操作して、手が見えやすいフレームを表示します。

今回使用しているデータには右手を振るモーションがあるので、右手をあげているフレームを表示します。

ここから右手に持たせるように棒の位置を合わせます。
この際に動かすのはattachノードです。stickを動かさないように注意しましょう。

Tips:基本操作について

オブジェクトの動かし方などの基本操作は第2回にて紹介していますので、詳しく知りたい場合はこちらをご覧ください。

https://zenn.dev/guncys/articles/a3f53202aab5ca

この状態からConstraint Settingsを操作します。
左端のSnapボタンを押します。

ボタンを押すとActiveにチェックが入る事を確認できます。

Activeにチェックが入ったら、このテイクを再生してみましょう。

棒が手に追従して動いている事がわかると思います。
このように、手の動きを追従させることで物を掴んだ時の固定感を出せます。

Tips:親子付け(Parent)とコンストレイントの違い

さきほどの親子付け(Parent)で棒を手首の子にする方法でも手への追従は実現可能でしょう。しかし、コンストレイントを使用する場合は親子関係を変える必要がありません。そのため、武器を腰に収めている時のように、参照元が複数ある場合に対しても柔軟に対応がしやすいです。

ここまでのひととおりの操作が小物を手に持たせるためのコンストレイントの使い方です。
ここまでの操作を”Kaya001_constraint.fbx”として保存しておきましょう。

使い方の操作としてはParent/Childコンストレイントを使用しましたが、その他にもさまざまな種類があります。ここからはその中から数種類紹介します。

コンストレイントの種類

小物を持たせる動作としてコンストレイントを紹介しましたが、コンストレイントにはさまざまな種類があります。ここではその中の数種類をご紹介します。

Position


オブジェクトの位置を参照するコンストレイントです。
このコンストレイントは参照元オブジェクトの移動量分だけ参照先オブジェクトを平行移動させます。(Snapボタンを押さずにActiveのチェックを入れた場合は実質同じ座標になります。)

参照するオブジェクトと影響を受けるオブジェクトを設定できます。
参照元と参照先はConstraint Settingsから設定できます。

  • Constrained Object:参照先オブジェクト
  • Source *:参照元オブジェクト

位置は追従しますが、それ以外の情報(回転など)は追従しません。

Rotation

回転座標を参照するコンストレイントです。
参照元の回転量に応じて参照先を回転させることができます。

回転は同期させられますが、位置は追従しません。

Parent/Child

今回の手に棒を持たせる際に使用したコンストレイントです。
これは位置と回転の情報を参照します。

回転時のRotationコンストレイントとの違いは、Rotationコンストレイントは参照先(Cube)が自身を中心に回転するのに対し、Parent\Childコンストレイントは参照元(null)を中心として回転する点にあります。
参照元を親、参照先を子として扱うように制御できるコンストレイントです。

Rigidbody

位置と回転の中間点を参照します。
これは基本的に参照元が1つの場合はPositionコンストレイントと動きは同じですが、2つ設定すると、2つの参照元と参照先で三角形を維持するように動きます。




Parent-Childと違う部分としてSetupタブがついており、ダンピング設定が可能です。

動画はRecovery damping timeの値を50に設定したものです。遅延が入って追従しています。

今回は小物を手に持たせる方法と、コンストレイントの使い方を解説しました。またコンストレイントには他にもさまざまな種類がありますが、考え方の元はオブジェクト間に関係を持たせるところにあります。他オブジェクトの情報を参照することで、指定したオブジェクトに影響を与えられる機能として覚えておくと扱いやすくなるかもしれません。

次回

次回からはモーションの仕上げとして、アニメーション編集の方法の解説に入ります。今回の記事ではコンストレイントを用いて手に棒を追従させましたが、手のひらにくっついているだけの状態です。この小物を持つ手を修正する方法もちゃんと解説していきますので、次回もよろしくお願いします!
https://zenn.dev/guncys/articles/c4875549ec567a

モーションキャプチャーでお悩みの方は

株式会社GUNCY’Sではモーションキャプチャーの総合支援サービス"Mocap SOS"を開始しました。
モーションキャプチャーについてのご相談はぜひ弊社へお問い合わせください。
https://guncys.com/news/news-1983/
メールでのお問い合わせ:mocap_contact*guncys.com
(※記号「*」を「@」に置き換えてください。)


免責事項

  • 当記事のコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性、最新性を保証するものではありません。
  • 理由の如何に関わらず、本記事に掲載されている情報の変更・削除、および本記事の更新の中断・中止によって生じるいかなる損害についても、当社は責任を負わないものとします。
  • リンク先へのアクセス、リンク先からのダウンロード、その他の方法を通じて取得したコンテンツは、自身の裁量とリスクをもって使用されるものとします。
  • 当記事から移動された先のサイトは、当社が管理、運営するものではございません。移動先サイトで提供される情報の真偽、サービス等につきましても責任を負いませんのでご了承ください。なお、予告なしに内容が変更または廃止される場合がございます。

Discussion