Blenderには多くの3DCG制作ソフトウェアのようにコンストレイント機能が備わっています。
コンストレイント機能を使用するとオブジェクトをアニメーションする際に手間を省いたり、ダイナミックな動きを付けることができます。
この記事ではコンストレイント機能の使い方を紹介していきます。
コンストレイントとは
コンストレイントは英語で「constraints」と書きますが、その意味は制約や、制限を意味します。
Blenderにおけるコンストレイントも同じように、アニメーションのモーションに対して制約を付けるための機能です。
コンストレイントのコンセプト自体は、Blender独自の機能ではなく、ほとんど全ての3DCGソフトが同じような機能を備えています。
モーションへの制約をつけるという機能上、この機能を使用するのは主にアニメーションとなります。
アニメーションとして使用しない場合においても、オブジェクトの位置関係に一定の制約を付けたい場合にも役立てることができます。
応用として、この機能はキャラクターモデルの関節などの動きを制限するのにも使用されており、ヒューマノイドモデルなどの作成に欠かせない機能の一つでもあります。
コンストレイントを利用することで、以下のようなシーンを制作することができます。
こちらの制作手順は記事の後半で説明しています。
コンストレイントの考え方
オブジェクトの関係
Blenderにおいて、多くのコンストレイントは他のオブジェクトとの関連が設定されます。
「ターゲット(Target)」を設定すると、そのターゲットから見てコンストレイントを持つオブジェクトにどのような制約が設定されるかを設定します。
この記事では、これらを「コンストレイントが設定されたオブジェクト」または「コンストレイント側」、「ターゲットが設定されたオブジェクト」または「ターゲット側」と呼びます。
制約はコンストレイントが設定されたオブジェクトと、ターゲットが設定されたオブジェクトに相互的に作用しますが、コンストレイント側に影響がある形でターゲット側のオブジェクトが動かされた場合、コンストレイント側は制約に沿ってそのオブジェクトを移動させますが、コンストレイント側は可能な限り初期位置に復帰しようと振る舞います。
反対に、コンストレイント側に対して動きを付けた場合、オブジェクトは設定されたコンストレインを超過する動きは許可されません。
例えば、「床(Floor)」コンストレイントの場合、ターゲットとなる床を動かすとエレベーターのようにコンストレイント側は上に上がっていきますが、床を下げるとコンストレイント側は下がっていきつつ初期位置以下には下がらない、という挙動になります。
コンストレイント側をターゲットに向けて下げると、ターゲット側にあたり、それ以上は制約がついているので移動できない、という動きになります。
床(Floor)コンストレイントに関しては次項の「コンストレイントの種類」を参照してください。
コンストレイントの基点
コンストレイントはオブジェクトの原点をもとに決定されます。
よって、必要に応じて原点を変更して、どの部分を基点とするかを設定します。
例えばエレベーターのモーションを作りたい場合、人型モデルの足元に基点を設定する、という具合です。
原点の設定については以下の記事も参考にしてください。
コンストレイントの種類によっては「頂点グループ(Vertex Group)」を指定することも可能です。
これは、どのグループを判定として使うかを指定することができます。
エレベーターを作りたい場合、エレベーターの足場をこれで指定する、という使い方になります。
頂点グループはターゲット側にしか指定できない点は注意してください。
コンストレイントの種類
Blenderには多くのコンストレイントを備えており、多岐に渡って使用することができます。
フロア(Floor)
このコンストレイントを使用すると、ターゲットオブジェクトを床と見立てます。
このようにターゲットとなる床が動くとオブジェクトがそれに押されて動きます。
オブジェクトをターゲットに向けて動かすと、オブジェクトはターゲットに衝突し、それ以上は動かせなくなります。
パスに追従(Follow Path)
「パスに追従(Follow Path)」はターゲットとして指定したパスに追従するコンストレイントです。
このコンストレイントを使用する際はターゲット及びオプションを指定した上で、「パスアニメーション(Animate Path)」を押すことでアニメーションが設定されます。
制限(Limit)系
制限をするためのコンストレイントです。
「距離制限(Limit Distance」、「位置制限(Limit Location)」、「回転制限(Limit Rotation)、「拡縮制限(Limit Scale)」、そして名称は違いますが、「体積維持(Maintain Volume)」も制限のコンストレイントです。
このうち距離制限(Limit Distance)のみターゲットを指定します。
距離制限は他のオブジェクトとの距離を維持するための制限です。
指定した距離以内に近づかないようにする挙動となります。
位置、回転、拡縮にはX、Y、Zのそれぞれの軸に対し、最小値、最大値を設定することができるようになっています。
オブジェクトは指定した間の動きのみが許され、逸脱することができなくなります。
コピー(Copy)系
コピー(Copy)のコンストレイントはオブジェクトの状態を他のオブジェクトにコピーする働きを持ちます。
「位置コピー(Copy Location)」、「回転コピー(Copy Rotation)」、「拡縮コピー(Copy Scale)」、そして「トランスフォームコピー(Copy Transform)」があります。
最後のトランスフォームコピー(Copy Transoform)」は位置、回転、拡縮全てが転送されます。
これらを使用すると、ターゲット側の状態がコンストレイント側にコピーされます。
例えば、回転コピーを指定した場合、ターゲット側のオブジェクトを回転するとコンストレイント側にその回転が反映されます。
位置、回転、拡縮では有効とすると軸を指定でき、位置と回転ではさらにその動きを軸ごとに反転することができます。
パス移動制限(Clamp To)
「パス移動制限(Clamp To)」はオブジェクトをパスに沿ったものに制限するためのコンストレイントです。
上記のパスに追従(Follow Path)に似ていますが、こちらはアニメーションを意識したものではなく、あくまでもオブジェクトの動きをパスに沿ったものに制約するものです。
これを設定するとオブジェクトを動かそうとするとパスに沿ったものに固定されます。
減衰トラック(Damped Track)、軸固定トラック(Locked Track)、ストレッチ(Stretch To)
「減衰トラック(Damped Track)」は最小の回転でコンストレイントが設定されたオブジェクトを、ターゲットが指定されたオブジェクトに向ける挙動となります。
どの軸を向けるかも指定することができます。
「軸固定トラック(Locked Track)」は上記の減衰トラックとは似ていますが、単一の軸のみに影響を与えることができます。
「ストレッチ(Stretch To)」はオブジェクトを引き延ばす挙動を付けるコンストレイントです。
尚、もう一つ「トラック(Track To)」というのもありますが、こちらはねじれる傾向がある旧式のトラック方式となります。
シュリンクラップ(Shrinkwrap)
「シュリンクラップ(Shrinkwrap)」はオブジェクトの表面に動きを制限するためのコンストレイントです。
その他のコンストレイント
その他のコンストレイントにより、親子関係を設定したり、キャラクターモデルを設定する際のIKやアーマチュアを設定したりするようなものや、映像と3Dモデルをトラッキングするモーショントラッキングに関わるものとなります。
これらに関しては特別なケースに使用するもので本記事では割愛しますが、特殊なコンストレイントも設定することができるようになっています。
コンストレイント設定の流れ
コンストレイントの設定は全ての種類のコンストレイントで共通しています。
- オブジェクトを選択します。
- コンストレイントのタブから「オブジェクトコンストレイントを追加(Add Object Constraints)」を選び、使用したいコンストレイントを選びます。
- ターゲット(Target)などのオプションを指定する。
コンストレイントは複数設定することも可能です。
この場合、上から順番にコンストレイントが適応されていきます。
順番を間違えると思った通りの挙動にならない可能性があるので気を付けてください。
影響(Influence)オプション
「影響(Influence)」オプションはそれぞれのコンストレイントがどの程度の影響をオブジェクトに対して与えるかを指定することができます。
これを利用するとコンストレイントからの影響を弱めることができます。
例えば、これを回転コピー(Copy Rotation)のコンストレイントに対し影響(Influence)を0.2を指定すると、一回転させてもターゲット側は1/5しか回転しないようになります。
空間
コンストレイントによっては空間の種類を指定することができます。
選べるのは「グローバル空間(Global Space)」、「カスタム空間(Custom Space)」、そして「ローカル空間(Local Space)」になります。
空間というのは座標系をどこに置いているかの指定です。
何も変更していない場合はグローバル空間(Global Space)が指定されますが、これをオブジェクトそのもののみが影響する座標系、つまりローカル空間(Local Space)を指定したい場合があります。
この設定ではどの変化を参考にするかを選ぶことができます。
座標系の設定は専用のメニューから実行することができます。
これは、例えばあるオブジェクトをワールド空間の視点から見て回転させたくないものの、オブジェクトとしては回転させたい、というような場合に使用します。
コンストレイントを使ってみる
さて、コンストレイントを使って作品を作ってみましょう。
今回作ってみるのは次のようなホログラム的な作品です。
よくSF映画などで作戦会議をしている時に出てくるような感じのホログラムです。
この作品において使用するのは三種類のコンストレイントです。
- パスに追従(Follow Path)
- 床(Floor)
- 減衰トラック(Damped Track)
台座に関してはシリンダーから作成したものです。
こちらは飾りですので、試しに作ってみる場合においては単純なものでも構いません。
まとめると、作っているパーツは以下の通りになります。
- 台座
- グリッド(地面を示すものが一つ、飛翔体の最大高度を示すものが一つ……後者は上記の例で上下しているグリッドです。)
- 飛翔体(3機のグループ)
- 飛翔体(1機、上記とはパスが別)
- レーザービーム(後述)
グリッドの作成
グリッドに関しては平面に以下のようなモディファイアを使用して作成したものですが、こちらも表現上のものなので、自由なものを使用することができます。
これを地面として台座に近いものを一つ、そのすぐ上にもう一つ設置してください。
飛翔体を作りコンストレイントで動きを付ける
飛翔体は立方体より作成したシンプルなものです。
次に、飛行経路を作ります。
「パス(Path)」は「追加(Add)」、「カーブ(Curve)」メニューの中から選択することができます。
パスは編集モードに入ると、線分を動かすことにより曲線を編集することができます。
曲線を伸ばしたい場合は[E]キーを使用して押し出します。
このパスにオブジェクトを割り当ててみましょう。
飛翔体をクリックしオブジェクトコンストレイントを追加(Add Object Constraint)→パスに追従(Follow Path)のコンストレイントを追加します。
ターゲット(Target)として先ほど作成したパスを選択します。
そして、パスアニメーション(Animate Path)ボタンを押してください。
次に作成した飛翔体モデルの位置は恐らく空中に浮いているような形になっているので、これを(0,0,0)にします。
この変更を行う狙いは、これが設定されていない場合、この位置がコンストレイントの基点からの差分になるからです。
反対に、例えば、2m浮かせたい場合はZに2mを設定するとコンストラインとの基点から2m浮かんだ状態になります。
(0,0,0)に設定した場合、以下のようになります。
この状態では上記のように方向が間違えているかもしれません。
これを正しく設定するのには「カーブに従う(Follow Curve)」を有効にして「前方の軸(Forward Axis)」を設定して正しいものを選んでみてください。
オブジェクトを複製すると同じコンストレイントがついたものを作成することができます。
例えば[Shift]+[D]で複製移動させると、次のようなフォーメーションを持つ連隊を簡単に作ることができます。
ここで、[Space]を押すとアニメーションの再生が始まり、チェックできます。
[Esc]で停止します。
アニメーションのスピードが速すぎたり遅すぎたりする場合は、パスを選択し、フレームの値を変更します。
このフレーム数は「パス全体を100フレームかけて進める」という意味になりますので、これを50にすると二倍の速さになります。
サンプルの例ではもう一つ飛翔体を設置して、別のパスに割り当ててみましたが自由に配置してみてください。
グリッドの高さを一番高い飛翔体の高さにしてみる
グリッドを飛翔体の高さに合わせて連動させるようにしてみましょう。
上のグリッドを一番高い位置にいる飛翔体の高さに合わせてみます。
これを行うのには床(Floor)コンストレイントをグリッドに対して設定します。
コンストレイントが二種類設定されていますが、これは飛翔体が二つのグループに分かれているので、その二つを設定する形です。
ターゲットして別のそれぞれ別のオブジェクトが設定されているのが分かります。
縦方向の動きを制御したいので、「最小/最大(Min/Max)」として、Z軸が設定されています。
こちらも設定後[Space]を押し、アニメーションを見ることができます。
レーザー光線の設定
次に索敵のレーザー光線のようなガイドビームを追加してみたいと思います。
こちらは細くした円柱を引き延ばしたものを使用しました。
これに減衰トラック(Damped Track)を追加してみます。
飛翔体オブジェクトをターゲットとして設定します。
この時、次のように間違った方向に向いてしまっているかもしれません。
これが発生した場合は「トラック軸(Track Axis)」を変更してみてください。
するとビームが追尾するようになります。
こちらも[Shift]+[D]で複製を作り移動させることで、複数のビームが追跡するような挙動にすることができます。
STYLYで使用してみる
できたものをSTYLYで使用するにあたり、いくつかの準備が必要です。
Unityを使用するので、STYLYのプラグインを導入したUnityをご用意ください。
FBXでエキスポート
作品をエキスポートするにあたって、アニメーションを含んだ状態で出力する必要があります。
これを行う時に「アニメーションをベイク(Bake Animation)」が有効な状態で、「NLA ストリップ(NLA Strips)」と「全アクション(All Actions)」が無効になっていることを確認してください。
これをUnityに取り込み、取り込んだプレハブの中にアニメーションが含まれています。
このアニメーションを選び、[Ctrl]+[D]を押し複製し、複製されたアニメーションを選択してください。
次に、サイドバーのメニューボタン(縦に三つの点がついているボタン)を押し、出てくるメニューから「Debug」を選びます。
そして、「Legacy」の項目にチェックを付けます。
そして、メニューボタンから「Normal」に戻ってください。
すると以下のような項目があるので、「Wrap Mode」を「Loop」にします。
これを行わないとアニメーションはループせず、一回再生されると止まってしまいます(もちろん作品によってそれが適切な挙動であればそれでも問題ありません)。
次にプレハブをシーンに設置した上で、プレハブに「Animation」コンポーネントを追加し、「Animation」項目に先ほどのアニメーションを追加してください。
このオブジェクトをプレハブ化し、アップロードすることでSTYLYの中でもオブジェクトが再生されます。
サンプルとして出力したものには発光オブジェクトなどのマテリアル設定などを行い、さらにポストプロセスも加えSF感を増強しています。
補足:アニメーションの中身
UnityやSTYLYではコンストレイントの内容を解析し、アニメーションを再生しているわけではなく、Blenderはアニメーションを全オブジェクトのアニメーションがベイクされた状態で出力します。
これは例えば、Unity内で飛翔体の位置を変更したりしても、他のオブジェクトは連動しないことを意味します。
これを変更するのにはBlender側で調整し、再度エキスポートする必要があります。
STYLYにアップロードする方法
3DモデルをSTYLYにアップロードしてみましょう。
アカウント作成方法
STYLYにアップロードする方法
UnityからSTYLYにアップロードする方法
STYLYに関する質問、バグ報告、改善してほしい要望はSTYLY FORUMまで
https://jp.forum.styly.cc/support/discussions
このようにコンストレイントを使用することによりオブジェクトの数が増えた場合においてもあらかじめ設定した動きを組み込めるようになります。
この方法を使用すると、さらに多彩なアート作品などが制作できるので、いろいろなタイプのコンストレイントを組み合わせ、面白い動きを追求してみてください。