カーブに沿って凹みが出現するアニメーションを設定するには
https://www.youtube.com/watch?v=8owQ-o7NNko
今回はカーブに沿ってメッシュが変形して動き、さらに凹みのアニメーションを表現する方法をご紹介します。
このサンプルシーンではカーブに沿って列車のようなメッシュが動き、さらに地面となるメッシュは列車に削られるようにくぼみが作られていくアニメーションが設定されています。まずは列車をカーブに沿って動かすアニメーションを作ってみましょう。カーブに沿ってメッシュが変形するということを表現するには、スプラインデフォーマを使用します。ではいちから作っていきましょう。
まずは地面を表すメッシュを作ります。こちらはプロシージャルモデリングでメッシュを作ります。そのほうが後から何度でもトライアンドエラーが効くためです。メッシュオペレーションのタブからオペレータ追加 > プリミティブ > Cubeで板ポリゴンを作成し、セグメントも切っておきます。さらにオペレータ追加 > ポリゴン > Set Polygon Typeを追加し、ポリゴンタイプをサブディビジョンに設定しておきましょう。
もう一つ、新規メッシュレイヤーを作成したら、こちらにはカーブを作って入れておきます。
では次に列車のアニメーションです。この列車の場合、X軸に対して5メートルの大きさで作ってありますので、セットアップパレット> デフォーマタブ > スプラインデフォーマを適用し、数を10、長さを5mに設定します。そうすると、この列車に沿って制御ポイントとなるロケータが追加されたのが確認できます。スプラインエフェクタのタブからターゲットカーブ、つまりこの列車を添わせたいパスのメッシュを設定します。プルダウンから先程作ったカーブのメッシュレイヤーを指定します。そうすると、レッシュのメッシュがカーブ全体に渡って沿うようになりました。列車のサイズを調整するには、プロパティから伸縮の値を調整します。さらに、パス上を移動させるには、スライドの値に対してアニメーションを設定します。0フレームではスライドを0m、さらに120フレームでカーブ終端に来るように値を調整します。これでメッシュがパスに沿って動いていくというアニメーションを設定することができました。このアニメーションの設定方法は、例えば蛇だったりジェットコースターだったり、といったパスに沿ってメッシュが変形しながら動くといったアニメーション設定に使うことができます。
今度は、この動きと合わせるように、地面に凹みを作るようにします。プロシージャルモデリングでこういったメッシュの膨らみや凹みを作りたいときには、トランスフォームデフォーマとフォールオフを組み合わせるのが定石です。地面のメッシュを選択したら、メッシュオペレーションのオペレータ追加 > Deformers > エフェクタ > Transform Effectorを追加します。このTransform EffectorをコントロールするためのコントローラであるTransform Effectorというロケータが自動的にシーンに追加されますので、移動ツールを起動し、Y軸方向に移動させてみます。そうすると、地面のメッシュ全体が移動するようになります。現在、移動範囲を指定していないため、メッシュ全体が動いている状態です。これをカーブがある箇所だけが移動する、つまり凹むようにするため、バージョン13.2で実装されたCurve Falloffを設定します。
トランスフォームを展開し、フォールオフ > (フォールオフを追加)からCurve Falloffを追加します。Curve Falloffを追加したら、カーブ > (カーブを追加)をクリックし、カーブのメッシュレイヤーを指定します。プロパティのグラディエントを調整していくと、カーブに沿って凹みを作ることができるようになります。凹みが粗いようであれば、Cubeのセグメント数を調整するようにしてください。
今度はこの凹みを列車の移動に合わせて、凹みもつけられるようにします。この凹みがアニメーションするためには、カーブ自身が伸びていくようなアニメーションを付ける必要があります。ただし、今あるカーブのメッシュレイヤーに対して伸縮用のアニメーションを付けてしまうと、列車が沿って移動するアニメーションがおかしくなってしまいます。この列車の移動アニメーションはカーブの完全な形に対してパラメータを設定しているため、カーブの形状自体が変化してしまうと、望む結果になりません。
このため今あるカーブのメッシュレイヤーを元に、凹みを作るアニメーション用として伸縮を行うカーブというのを別で用意します。新たにメッシュレイヤーを一つ作成し、オペレータ追加 > 編集 > Merge Meshesを追加し、ソース > (ソースを追加)からカーブメッシュレイヤーを指定します。これにより、元のカーブメッシュに手を加えることなく、その形状のデータを元に新たなカーブを作ることができます。
ではこの読み込んだカーブに対して伸縮のアニメーションを作ります。この伸縮アニメーションについての設定方法についてはビデオ「カーブに沿ったオペレーションのアニメーション方法」で詳しく解説していますので、このビデオでは簡単に説明していきます。カーブを伸縮するための手順としては、まずカーブを多くのポイント数を持つカーブへと構築し直し、そのポイントを削除している状態から復元することで、完全な形状となるようにし、カーブが伸びているような表現を可能にします。
ではまずはカーブを再構築するために、カーブ > Curve Rebuildを追加し、ポイント数を100に設定しておきます。次に編集 > Deleteを追加します。Deleteを展開し、Selection > (Selectionを追加)からSelect By Indexを追加します。スケマティックビューへとSelect By Indexを追加したら、この整数範囲を指定するためのモディファイヤを追加 > 整数範囲 > Int Range Clampを追加します。Int Range Clampの整数範囲を0-100に設定したら、出力をSelect By Indexへと接続します。Int Range Clampの最小値を操作すると、削除するポイントが移動するため、カーブが伸びているような表現が可能になります。この最小値の値を変更するアニメーションを作りたいのですが、整数値のアニメーションの場合、その間の値を補間してくれなくなるため、いったんユーザーチャンネルで浮動小数点数のチャンネルをかませることにします。新たなユーザーチャンネルを追加し、先程と同じアニメーションを設定したら、最小値へと追加します。こうすることでカーブの伸縮アニメーションが完成です。
ただしこの時点では、トランスフォームの凹みに対して設定されているCurve Falloffで使用しているのはオリジナルのカーブメッシュレイヤーですので、このアニメーションしているカーブレイヤーへと置き換えます。これで凹みが移動するアニメーションが完成です。
最後に、この凹みをつける際、平面のメッシュはセグメントを細かく切っていないと、ディテールが荒れてしまいます。ただし最初からセグメントを細かく切っていると、ジオメトリの数がかなり多くなってしまいますので、これもカーブに沿ってメッシュの再分割が行われるようにしてみましょう。
地面のメッシュのCubeのパラメータでセグメントを少し小さめの値に設定しておきます。では再分割のオペレーションを追加します。トランスフォームを掛ける前に、オペレータ追加 > ポリゴン > Subdivideを追加します。そのままの状態だと地面全体が再分割されますので、Selection > (Selectionを追加)でSelect By Falloffを追加します。さらにこのフォールオフで、現在設定しているCurve Falloffを指定します。しきい値を調整していくと、カーブで彫り込まれる場所だけに再分割が行われるのが確認できます。こうすることで、全体のポリゴン数は抑えつつ、ディテールを増やしたい箇所だけを再分割していくことができるようになります。
このように、カーブフォールオフを使うことで、カーブアニメーションに合わせてメッシュの変形や再分割のアニメーションまでも表現することが可能になります。