Doc:JA/2.6/Manual/Animation/Techs/Object/Constraint
コンストレイントを使ったアニメーション
コンストレイントはオブジェクトのプロパティ(位置、回転、拡大縮小)をコントロールする方法の一つで、それには単純な数値(“limit”コンストレイントなど)かターゲットと呼ばれるオブジェクト(“copy”コンストレイントなど)を用います。
コンストレイントは静止画の制作にも便利ですが、あきらかに、主な用途はアニメーションの制作です。コンストレイントのアニメーションには二つの側面があります。
- コンストレイントのターゲットを通じてオブジェクトのアニメーションを制御できる(間接的アニメーション)。
- コンストレイントの設定をアニメートできる。
コンストレイントによるアニメーションの制御
これはターゲットを用いるコンストレイントの場合です。ターゲットはコンストレイントのオーナーのプロパティをコントロールでき、したがってターゲットをアニメートすることは間接的にオーナーをアニメートすることになります。
コンストレイントによる間接的なアニメーションは非常にシンプルに行うこともできます。たとえばCopy Locationコンストレイントを使うと、オーナーオブジェクトは単純にターゲットの位置を(指定したオフセットをともなって)コピーします。しかし、たとえばActionコンストレイントのようなものを使えば、非常に複雑なふるまいをさせることもできます。Actionコンストレイントはアクションに対するアニメーションドライバの一種です。
またクラシックなChild Ofコンストレイントにも触れなくてはならないでしょう。これはオブジェクトの親子関係を生成します。この関係には暗黙のうちに間接的アニメーションが含まれます(親オブジェクトを移動すると子オブジェクトにも影響します)。しかし、Child Ofコンストレイントのもうひとつの重要な点は、ボーンとオブジェクトを親子にすることによって、アーマチュアを使ったアニメートができるということです。
シンプルなCopy Locationの例に戻りましょう。このコンストレイントは、二つの異なった振る舞いをします。
- Offsetボタンを無効(デフォルト)にしていると、オーナーの位置はターゲットによって「絶対的に」コントロールされます。つまり、ターゲット(および下層にあるコンストレイント)以外のどんなものもオーナーの位置に影響を与えることはできません。オブジェクトのアニメーションカーブであってもです。
- しかし、Offsetボタンを有効にすると、オーナーの位置は「相対的に」コントロールされます。つまりオーナーの位置は、ターゲットの位置を上乗せされる形で変更されます。そして、もともとの位置はたとえばLoc…カーブ(またはアクションやNLA)でコントロールできます。
例
Copy LocationコンストレイントとOffsetボタンを使ってみましょう。まず、オーナーのオブジェクト(moon
と呼びましょう)に(0.0, 0.0, 0.0)
を中心とした円を描かせるます(LocX/LocYのアニメーションカーブにパイドライバを使います。ドライバを参照)。そしてターゲット(earth
と呼びましょう)の位置をコピーするように設定し、Offsetボタンを有効にします。これで惑星の周りを回る衛星ができました。それから同じようにして、この惑星がさらに恒星オブジェクト(名前はsun
がいいでしょう)の周りを回るようにすることもできるし、その恒星が銀河を回るようにすることもできます。
これは上記(およびいくつかの他の)テクニックを用いて作った太陽系のアニメーションです。
だたしこの「太陽系」はリアリスティックではありません(縮尺も回転の方向も間違っています…)。
このアニメーションを作ったファイル:ManAnimationTechsUsingConstraintsExSolarSys.blendをダウンロードできます。
コンストレイントの影響をアニメートする
より「クラシック」に、アニメーションカーブを使ってコンストレイントのプロパティをアニメートすることもできます。
使えるのは二つのカーブだけです(グラフエディタを参照)。
- コンストレイントのInfluence(影響力)をアニメートできます。上の太陽系の場合、カメラがmoonとearthについていき、それから止まるようにしています。それにはOffsetを有効にした二つのCopy Locationコンストレイントを使い、Influenceをクロスフェードさせました。
- より間接的に、アーマチュアのボーンをターゲットとしたコンストレイントを使って、そのボーン上(rootとtipの間)のどの点を真のターゲットポイントとするかをアニメートすることができます(0.0はrootの位置、1.0はtipの位置です)。