こんにちは!
CGアニメーターのヤヨイです!
本記事では、「コンストレイント」についてご紹介します。
- コンストレイントの基本的な使い方
- 実践的な使い方の手順
アニメーション作業で物を持たせたり、武器の持ち替えなどを行う際には欠かせない機能です。
初心者の方にもわかりやすく解説しますので、ぜひマスターしていきましょう!
コンストレイントの使い方
基本の使い方
アニメーターがよく使う ペアレントコンストレイント、ポイントコンストレイント、オリエントコンストレイントの使い方を解説します。
ペアレントコンストレイント
親のコントローラーを選択して、次に子のオブジェクトを選択します。
メニューセットを「Animation」に切り替え、「Constrain」の中の「parent constraint」のオプションボックスを押します。各設定を行い最後にAddもしくはApplyボタンを押します


- ①Maintain offset
-
子のオブジェクトの位置を保持するかしないかのオプションです。
チェックを入れた場合は子のオブジェクトの位置のままコンストレイント、チェックを入れない場合は子のオブジェクトは親の位置に移動しコンストレイントされます。
- ②Decompose near object
-
回転の計算処理を「ターゲット側」でするか「コンストレイントされる側」でするかの設定です。複雑な回転オフセットがある場合に計算結果が変わることがあります。
基本はデフォルトのチェックなしで大丈夫です。
- ③Animation Layer
-
コンストレイントをアニメーションレイヤーに追加するときに使います。
基本はデフォルトの「None」で大丈夫です。
- ④Set layer to override
-
コンストレイントをレイヤーに追加する場合、アニメーションレイヤーのモードをoverrideで追加する項目です。
- ⑤Constraint axes
-
コンストレイントする軸を設定する項目です。
基本はAllのままで大丈夫ですがTranslateやRotate、個々の軸にしたい場合はそれぞれにチェックを入れてコンストレイントします。
- ⑥Weight
-
コンストレイントの影響度を設定する項目です。
デフォルトの1.0000のままで大丈夫です。
親のコントローラーを動かしたときに子のオブジェクトが付いてきたら成功です。
ポイントコンストレイント
親のコントローラーを選択して、次に子のオブジェクトを選択します。
メニューセットを「Animation」に切り替え、「Constrain」の中の「parent constraint」のオプションボックスを押します。各設定を行い最後にAddもしくはApplyボタンを押します


- ①Maintain offset
-
子のオブジェクトの位置を保持するかしないかのオプションです。
チェックを入れた場合は子のオブジェクトの位置のままコンストレイント、チェックを入れない場合は子のオブジェクトは親の位置に移動しコンストレイントされます。
- ②offset
-
Maintain offsetにチェックを入れていないときに入力できます。
それぞれX軸、Y軸、Z軸の順で入力欄が並んでいます。
数値を入れてコンストレイントすると親のオブジェクトの位置から入力した数値の位置でコンストレイントされます。基本はデフォルトのままで大丈夫です。
- ③Animation Layer
-
コンストレイントをアニメーションレイヤーに追加するときに使います。
基本はデフォルトの「None」で大丈夫です。
- ④Set layer to override
-
コンストレイントをレイヤーに追加する場合、アニメーションレイヤーのモードをoverrideで追加する項目です
- ⑤Constraint axes
-
コンストレイントする軸を設定する項目です。
基本はAllのままで大丈夫ですが、個々の軸にしたい場合はそれぞれにチェックを入れてコンストレイントします。
- Weight
-
コンストレイントの影響度を設定する項目です。
デフォルトの1.0000のままで大丈夫です。
親のコントローラーを動かしたときに子のオブジェクトが付いてきたら成功です。
オリエントコンストレイント
親のコントローラーを選択して、次に子のオブジェクトを選択します。
メニューセットを「Animation」に切り替え、「Constrain」の中の「parent constraint」のオプションボックスを押します。各設定を行い最後にAddもしくはApplyボタンを押します


- ①Maintain offset
-
子のオブジェクトの位置を保持するかしないかのオプションです。
チェックを入れた場合は子のオブジェクトの回転情報のままコンストレイント、チェックを入れない場合は子のオブジェクトは親の回転の情報でコンストレイントされます。
- ②offset
-
Maintain offsetにチェックを入れていないときに入力できます。
それぞれX軸、Y軸、Z軸の順で入力欄が並んでいます。
数値を入れてコンストレイントすると親のオブジェクトの回転情報から入力した数値の回転情報でコンストレイントされます。基本はデフォルトのままで大丈夫です。
- ③Animation Layer
-
コンストレイントをアニメーションレイヤーに追加するときに使います。
基本はデフォルトの「None」で大丈夫です。
- ④Set layer to override
-
コンストレイントをレイヤーに追加する場合、アニメーションレイヤーのモードをoverrideで追加する項目です
- ⑤Constraint axes
-
コンストレイントする軸を設定する項目です。
基本はAllのままで大丈夫ですが、個々の軸にしたい場合はそれぞれにチェックを入れてコンストレイントします。
- ⑥Weight
-
コンストレイントの影響度を設定する項目です。
デフォルトの1.0000のままで大丈夫です。
親のコントローラーのRotateを動かしたときに子のオブジェクトが回転したら成功です。
途中で物を離したい場合
コンストレイントをした子のオブジェクトにキーを入れるとアトリビュート欄にBlend Parentという値が作られます。

このBlend Parentの数値を0→1に変更すると追従。
逆に1→0に切り替えることで子のオブジェクトは付いてこなく元の位置にいます
ペアレントコンストレイントのときはアトリビュートの名前がBlend Parent、ポイント・オリエントの時は
それぞれBlend Point,Blend Orientになります。
コンストレイントの切り替え
動画のように子のオブジェクトにキーを打って1FでBlend Parentの数値を1→0にすると子のオブジェクトが離れてBlend Parentの数値を0→1にすると子のコントローラーが付いてくるようになります。
Blend Parentの数値は必ず1Fで切り替えるようにします。そうすることでグラフエディター上でアニメーションの管理がしやすくなります。
動画だと二回目のコンストレイントでBlend Parentの数値を0→1にしたときに子のオブジェクトが急に動いていますね。
この原因は最初にコンストレイントを設定した時点での位置から子のオブジェクトがずれているからです。そのため、子のオブジェクトは最初にコンストレイントを設定した位置に戻ろうとし、急に位置がジャンプしたようなアニメーションになってしまうのです。
コンストレイントをするときは位置をしっかり決めてから実行するようにするとスムーズに切り替えることができます。
複数のコンストレイントをスムーズに切り替える方法
キャラクターが右手から左手へ物を持ち替える時など、一つのオブジェクト(子)に対して二つ以上の親(コントローラー)でコンストレイントをかけることがあります。
しかし、何も設定せずにただコンストレイントをかけただけだと、以下のような不思議な現象が起きてしまいます。
このように、二つの親の中間地点にオブジェクトがフワフワと浮いてしまったり、意図しない動きをしてしまいます。これは、両方の親の影響を同時に「50%ずつ」受けてしまっているからです。
回避方法は簡単で「どちらかの親の影響力を100%(もう片方は0%)にする」
これだけです!
それでは、具体的な設定方法を見ていきましょう。
手順
子のオブジェクトのコンストレイントノードに「~W0,~W1」というアトリビュートがあります。
上から順にコンストレイントをした順番で表示されています。

このアトリビュートを選択してタイムスライダーを切り替えたいところの位置まで持っていき、
右クリック→Key Selectedで両方にキーを入れます。
最初に持ったノードの数値を1にして、二つ目に持ったノードの数値を0にします。
次に1F進み、二つ目に持ったノードの数値を1にして最初に持ったノードの数値を0にします。
動画にするとこんな感じです。
コンストレイント後に子のオブジェクトを動かしたい場合
コンストレイントをかけた後に子のオブジェクトを動かして位置を微調整したいときがあると思います。
しかし、コンストレイントを設定した子のオブジェクトを微調整のために動かそうとしても、コンストレイントが強制的に元の設定位置に戻してしまうため、意図した位置に固定できません
この問題を解決し、コンストレイントを維持したまま微調整を行うためには、ロケーター(Locator)を使用して回避します。方法は以下の手順です。
手順 1 ロケーターを二つ作って階層化する
メニューの「Create」を選択し、「Locator」を押します。

このロケーターを二つ作り、ドラッグで階層化します。それぞれ名前をParent,Childにします。
手順 2 ロケーター(Parent)をコンストレイント
親のコントローラーを選択→Parentのロケーターを選択し、ParentConstraintのオプションのMaintain offsetのチェックを外して実行します。
実行するとParentのロケーターは親のコントローラーの位置に移動します。
手順 3 ロケーター(Child)に子のコントローラーをコンストレイント
子のオブジェクトを選択→Childのロケーターを選択し、ParentConstraintのオプションのMaintain offsetのチェックを外して実行します。
Childのロケーターは子のオブジェクトの位置に移動しました。
Childのロケーターのコンストレイントノードを削除し、今度はChildのロケーターを選択→子のオブジェクトを選択します。
ParentConstraintのオプションのMaintain offsetのチェックを入れたまま実行します。
アニメーションを再生しても、子のオブジェクトがコンストレイントで強制的に最初の位置に戻されなければ、成功です。
両手持ちさせたい場合
両手で武器や物を持ちたいときがあると思います。
しかし、複数のコンストレイントを行うと意図しない動きになることを「複数のコンストレイントをスムーズに切り替える方法」でご紹介しました。
この問題を解決し、ロケーターを使って両手持ちさせる方法を解説します。
手順 1:ロケーターを二つ作成してグループ化する
ロケーターを二つ作成して、名前をL_hand,R_handにします。
二つのロケーターを選択してCtrl + Gでgroup化します。groupの名前はObjectにします。
手順 2:子のオブジェクトとグループをコンストレイント
子のオブジェクトを選択→group(Object)を選択し,ParentConstraintのオプションのMaintain offsetのチェックを外して実行します。
group(Object)は子のオブジェクトに移動して追従するようになります。
手順 3:ロケーターをそれぞれのコントローラーにコンストレイント
group(Object)内にあるロケーターをそれぞれの手のコントローラーの位置に持っていきます。
ロケーターを選択→子のコントローラーを選択し、ParentConstraintのオプションのMaintain offsetのチェックをつけたまま実行します。
オブジェクトを動かし、両手が付いてきたら成功です。
おまけ
上記の手順を行うとオブジェクトを動かしたときに両手が付いてくる仕組みを作りました。
アニメーションによっては右手もしくは左手を動かしたときにオブジェクトと手が付いてくるようにしたいときがあると思います。
この場合はgroupのコンストレイント先を右手もしくは左手のどちらかにコンストレイントを行えば仕組みを作ることができます
実際に作ってみました!
こちらの動画では左手を動かしたときにオブジェクトと右手が付いてくるようになっています。
まとめ
今回はアニメーション制作に欠かせない「コンストレイント」について解説しました。
最初は設定項目が多くて戸惑うかもしれませんが、一度覚えてしまえばアニメーションの表現幅が一気に広がります!
今後は、今回学んだコンストレイントを使用したアニメーションの制作記事も書いていきます
焦らず少しずつ、使い方の感覚を掴んでおいてください!
最後まで読んでいただきありがとうございました。

