MODO 機能紹介・チップスサイト このサイトでは、MODOの基本機能やチップスをご紹介していきます。

フォールオフの軌跡でアイテムを切り替えるには

https://www.youtube.com/watch?v=0_tlfgUdXF0

今回はフォールオフの軌跡でアイテムを切り替える方法について解説します。

フォールオフの動きに合わせてアイテムの動きやチャンネルの値を変動させる方法については、いろんな方法があり、その表現したいものやシーンの構成によって最適な方法は変わってきます。代表的な方法としてはフォールオフプローブがあり、それを使って面白い表現が可能ですが、今回はパーティクルを使う方法をご紹介していきます。フォールオフプローブについては日本語解説ビデオ「プローブフォールオフを用いたアニメーションのコントロール」をご覧ください。

このサンプルシーンには小さいピンのモデルが用意されており、これを細かく分割されている板ポリゴンの頂点へとリプリケータで配置しています。このピンを別のピンへと置き換えることで、サンプル動画のような表現を可能にします。正確には置き換えるというよりも、リプリケータのプロトタイプ(原型となるアイテム)に設定しているピンよりも、ほんの少しだけ大きなサイズのピンを、新たなリプリケータで配置するという形になります。この新たなリプリケータのポイントソースを、フォールオフとパーティクルで作成していきます。

ではまず、このポイントソースからパーティクルを放射してみます。シーン内にあるメッシュの頂点からパーティクルを放射するには、ソースエミッターを使います。ポイントソースを選択した状態で、パーティクルタブからソースエミッターを追加します。スケマティックビューに追加して確認してみると、Particle Simulationポイントソースが接続されているのがわかります。ではこのデフォルトの状態でシミュレーションを行い、パーティクルを発生させてみましょう。見やすいようにParticle Simulationのサイズを大きくしておきます。

そうするとパーティクルがあちこちに飛び回っているのが確認できます。今回設定したいパーティクルは、後からリプリケータのポイントソースとして使いたいので、動き回る必要はありません。このポイントソースの頂点すべてに対して、その場にとどまるパーティクルを発生させたいと思います。

ですのでソースエミッターを選択し、まず動きを封じるために初期速度速度の広がりの値を0にしておきます。さらにその場で一度ですべての頂点に対してパーティクルを発生させたいので、放射モードパルスにし、パルスオプションをオンにしておきます。さらにすべての頂点に対してパーティクルを発生させたいので、放射レートをこのポイントソースの頂点数と同じにする必要があります。ポイントソースを選択し、統計タブから頂点数を確認したら、同じ数を放射レートへと設定します。シミュレーションしてみると、ポイントソースの各頂点からパーティクルが生成されているのがわかります。

この状態だとパーティクルは静止状態にありますが、このパーティクルを真下の方向へと落下させましょう。ポイントソースの位置をY軸方向に少しだけ動かし、下方向へとパーティクルが動くようにフォースを設定します。Particle Simulationを選択したら、リニアフォースを追加します。デフォルトではリニアフォースは上向きになっているので、180度回転させて下向きになるよう変更します。この状態でシミュレーションを確認すると、パーティクルがまっすぐ落下するのがわかります。

ここでフォールオフによって、この落下の動きを特定のパーティクルのみに限定するようにします。リニアフォースを選択した状態で、Radial Falloffを追加します。この放射状のフォールオフの内部にある頂点に対して影響を及ぼすようにしたいので、フォールオフの大きさを調整し、アニメーションを設定します。通常、Radial Falloffの中はグラディエントに影響範囲の強さが設定されていますが、今回はこの球体の中に入っているのか入っていないのかをくっきりと切り替えたいので、ソリッドコアの値を100%にしておきます。ではシミュレーションして結果を確認してみます。するとラディアルフォールオフが通過した個所のパーティクルのみが落下するようになりました。

今度は落下したパーティクルが床に衝突し、衝突した時点で消滅するように設定してみます。まずは床となるメッシュを選択し、ダイナミクスタブからスタティックに設定します。次にParticle Simulationを選択したら、パーティクルタブからダイナミックコライダーを適用します。シミュレーションしてみると、落下したパーティクルが床と衝突し、跳ね返って真上に移動しているのがわかります。

これを跳ね返るのではなく、衝突した時点でパーティクルを消滅させたい場合には、パーティクルオペレータを使用します。Particle Simulationを選択したら、パーティクルオペレータを適用します。このパーティクルオペレータとは、パーティクルの各情報を取得したり、さらに入力してくる情報によってパーティクルの挙動を変更するものとなります。今回まず必要となる情報はパーティクルが衝突するタイミングです。このタイミングを取得するには、パーティクルオペレータを選択し、プロパティから特性の追加をクリックして、取得したい特性、今回の場合衝突イベント (R/O)を追加するか、オペレータノードを右クリックし、パーティクル特性の追加から衝突イベント (R/O)を追加します。この衝突イベント、つまり衝突のタイミングでパーティクルを消滅させたいので、衝突イベント消滅へと接続します。シミュレーションしてみると、パーティクルが落下して床とぶつかると消滅するようになったのが確認できます。

ここまでの流れでうまく動かないといった場合には、オペレータの順序が正しく設定されていない可能性があります。そういった場合には、Particle Simulationでオペレータを確認してみてください。このオペレーションは下から上へと向かって動作していきますので、まずソースエミッターでパーティクルを放射し、リニアフォースでパーティクルの動きを制御し、ダイナミックコライダーでダイナミクスの影響を受けた後に、オペレータでそれらの情報を取得するという流れになっているはずです。このオペレータの順序がくるっている場合などには、正しい情報が取得できませんので、うまくいかない場合にはこの個所を見直してみるようにしてください。

ではさらに、パーティクルが消滅すると同時に、床に衝突した時点で新たなパーティクルをその場に生成します。そうすると全体的に見れば、ラディアルフォールオフでパーティクルが消滅すると同時に、新たな別のパーティクルで埋まるようになります。この新たに生成するパーティクルをポイントソースとして、リプリケータを生成することになります。

追加 パーティクル Particle Simulationを追加します。わかりやすいように名称を、Particle Simulation Newとでもしておきます。このParticle Simulation Newで発生元となるパーティクルは、先ほど消滅したパーティクルとなりますので、その場合のエミッターはコレクター/エミッターとなります。このエミッターのオペレータに、先ほどのParticle Operatorを接続します。さらに衝突したタイミングでパーティクルを放射したいので、衝突イベント(R/O)パーティクル放射へと接続します。これでタイミングはOKですが、どの位置からパーティクルが発生するのかを指定する必要がありますので、Particle Operatorからはパーティクル特性の追加から追加した位置(R/O)の情報を、エミッター側で追加した位置へと接続します。Particle Simulation Newの色とサイズを変更したら、シミュレーションで確認してみましょう。

わかりやすいように、あらかじめポイントソースの位置を高めに設定していましたので、もっと床に近くなるように設定しなおしてみると、さらにパーティクルの切り替えがクリアになりました。これで新しいパーティクルシミュレーションをリプリケータのポイントソースとして使うことで、アイテムの切り替えが行えるようになります。

この方法の良いところは、ポイントソースにパーティクルを使用していることで、パーティクルの特性を使用できるところにあります。例えばパーティクルの場合、その寿命を設定することができますので、Particle Simulation Newの寿命で除去オプションをオンにし、最大寿命を60などに設定すると、2秒後にパーティクルは自動的に消滅するため、フォールオフが通り過ぎた後、一定の間隔を置いて元に戻るといったような表現が可能になります。

こういった属性を利用することで、通り過ぎた後にライトが消えるといったような表現も可能になりますので、人感センサーなどの表現も可能になってくるかと思います。

2024年7月17日