カーブのひねりとパスアニメーションを同期させるには
https://www.youtube.com/watch?v=qHDPwS6CTPw
プロシージャルモデリングにおいてカーブに沿った形状に対してひねりを加える方法を解説しましたが、今回はさらにカーブに沿ってアイテムを動かすパスアニメーションとひねりとを同期させる方法について解説します。カーブに沿った形状に対してひねりを加える方法につきましては、ビデオ「ひねりが加えられたリボンを作るには」をご覧ください。
サンプルとして、ジェットコースターのようにカーブに対してひねりを加えて作成したメッシュが用意されています。このジェットコースターの上をプリセットにあるチキンが走るようなシーンを作ってみます。チキンを読み込んだら、Shitキーを押しながらカーブのメッシュを複数選択し、セットアップタブ > モディファイヤのパスコンストレイントを適用します。
パスコンストレイントのパスパーセンテージの値を0フレームで0%、120フレームで100%に設定すると、120フレームでカーブの始点から終点までを移動するパスアニメーションを作成することができます。ただよく見てみると、カーブの形状にはひねりを加えていますので、パスアニメーション上の傾き加減が、形状のひねり具合と合わなくなっています。パスアニメーションで回転を加えるにはロールの値を設定すればよいのですが、今回は方向コンストレイントを使って、これらの値をリンクさせてみます。
まずはメッシュの形状に対して、上側に一本のカーブを作成します。このカーブに対して、ロケータを追加し、パスコンストレイントを設定します。ロケータの名称はUpとしておきましょう。ここでこの新たに追加したロケータUpに対しても、チキンと同じアニメーションを設定します。同じアニメーションを設定したいので、スケマティックでノードを接続しましょう。チキンおよびロケータのパスコンストレイントからパスパーセンテージの値をノードに追加します。
しかしパスコンストレイントにおけるパーセントの値は、入力は受け付けるものの、出力をすることができません。このためチキンのパーセントの値を、ロケータのパーセントの値へと直接接続することはできません。このため、パーセントの値をコントロールするためのユーザーチャンネルを一つ作成し、それで2つのパーセントの値をコントロールするようにします。
チキンを選択し、ユーザーチャンネル > ユーザーチャンネル追加からPath_Percentという名称でパーセンテージタイプのチャンネルを一つ作成します。チキンのパスパーセンテージのラベル上で右クリックしコピーしたら、作成したユーザーチャンネルに貼り付けます。これでデータがコピーされました。新たに作成したユーザーチャンネルをスケマティックへと追加し、2つのパーセントへと接続します。
チキンは必ずこのUpの方を向いていれば良いので、方向コンストレイントを適用します。しかしチキンを選択し、Upアイテムを複数選択して方向コンストレイントを適用しようとしても、適用することができません。これは既にチキンの回転はパスアニメーションによってコントロールされているからです。このため、チキンのワールド回転をパスコンストレイントからのリンクを除去します。再度、チキンとUpを選択し方向コンストレイントを適用すると、今度は問題なく適用できるようになりました。
しかしアニメーションを確認してみると、チキンがぐるぐると回転したり、正しい方向を向かなくなってしまっています。これはどちらの方向を向くべきなのかを指示するための上方ベクトル(アップベクター)が適用されていないためです。チキンの正しい向きというのは、進行方向を向かせれば良いので、チキンと同じパスアニメーションを行いながら、ほんの少し前を進行するアイテムがあれば良いことになります。
ではこの上方ベクトルのために、ロケータを一つ作成します。名称はForwardにしておきましょう。Forwardとカーブを選択し、パスコンストレイントを適用したら、先程と同様、ユーザーチャンネルPath_Percentをパスコンストレイントのパーセントへと接続します。ただしこの状態だと、チキンとForwardが全く同じ場所にいますので、ほんの少し前を向かせるため、時間を早めます。接続ラインを右クリックし、チャンネルモディファイヤを追加 > 時間 > Time Offset:Floatノードを追加します。これはチャンネルの時間を操作するためのノードです。入力のタイムに3などの値を設定し、確認してみると、チキンの進行方向前方にForwardロケータが進むようになります。
あとは、Forwardを選択した状態で、チキンの方向コンストレイントタブから上方ベクトルの適用ボタンをクリックします。これでチキンが正しい方向を向きつつ、捻りの形状と回転を合わせることができるようになります。
もしチキンの位置と、方向コンストレイント用のForwardロケータの位置とが微妙に合わないと感じるようであれば、Time Warpノードを使って、時間の調整を行うと良いでしょう。