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

花火のようにパーティクルからパーティクルを連続して放射するには


https://www.youtube.com/watch?v=LbflsQ-G44s

今回はパーティクル機能を利用して、サンプルシーンの打ち上げ花火のようにパーティクルから次のパーティクルを連続して放射する設定について解説していきます。

では新規シーンから作っていきましょう。まずは打ち上げ花火の元となるパーティクルを作ります。ここでは簡単にRadial Emitterを追加し、上に向かってパーティクルが発射される設定を行います。

次に、この打ち上げたパーティクルが重力に従って落下し始めた時点で、その箇所から次のパーティクルを発射して花火が咲くようにしましょう。任意の場所からパーティクルを発射するには、ソースエミッターを使います。ソースエミッターでは、パーティクルの発生源となるソースメッシュが必要です。ですが今回の場合、最初に打ち上げたパーティクルが落下し始めた時点のパーティクルが発生源となりますので、通常のメッシュレイヤーをソースとする訳にはいきません。

こういった場合には、パーティクルが特定の条件に達した時点で消滅させ、新たなパーティクルを発生させるという方法を取ります。つまり今回の場合は、最初の打ち上げ用のパーティクルが落下し始めた時点を記憶するための静止状態のパーティクルを発生させ、その静止状態のパーティクルをソースとして花火のパーティクルを発生させるということになりますので、シーンの中には3つのParticle Simulationが必要となります。

まずは最初の打ち上げ用のパーティクルが落下し始めた時点、という状態を取得するため、パーティクルオペレータを追加します。このパーティクルオペレータではパーティクルの状態を取得することができ、さらにその状態に従ってパーティクルを消滅させることができます。ここでは落下しはじめるという状態を取得したいので、パーティクルの速度を取得しましょう。オペレータのノードを右クリックし、パーティクル特性の追加から、速度(ReadOnly)を追加します。落下し始めるということは、単純に考えてY軸方向の速度がマイナスになるということですので、それを判定するために、追加条件式AはBより小さいを追加し、Y軸に対する速度の値を値Aへと入力します。値Bはデフォルトで0に設定されていますので、このままの状態でY軸方向に対する速度が0よりも小さい、つまりマイナスであればパーティクルを消滅させるということで、結果をオペレータの消滅へと接続し、シミュレーションで確認してみましょう。

ここまでできたら、今度はこの消滅した時点で花火パーティクルの発生源となるパーティクルを発生させたいので、パーティクルを発生させるための機能であるコレクター/エミッターを追加します。このコレクターはパーティクルオペレータの情報をもとにパーティクルを発生させますので、まずはオペレータを接続します。

次にパーティクルを発生させるにしても、どの場所から発生させるのかという情報が必要になりますので、コレクターを右クリックし、パーティクル特性の追加位置を追加します。オペレータも同様に位置(ReadOnly)を追加し、これらを接続します。さらにどのタイミングでパーティクルを発生させるのかというのを指定する必要がありますので、条件式のノードの結果をコレクターのパーティクル放射へと接続します。

これでパーティクル発生のタイミングと位置を正しく指定することができましたが、これだけでは実際にはパーティクルは発生しません。パーティクルの発生をコントロールするためのパーティクルシミュレーションを追加します。追加パーティクルParticle Simulationを追加し、コレクターを追加したParticle Simulationのオペレータへと接続します。わかりやすいようにサイズを大きくして見てみると、最初に打ち上げたパーティクルが落下し始めて消滅する瞬間に次のパーティクルが発生したのがわかります。これが打ち上げ花火の発生源となるパーティクルです。

あとはこのPaticle Simulationをソースエミッターのエミッターソースとして接続するだけですが、花火の発生源となる静止状態のパーティクルは、消滅した瞬間だけ存在していれば良いので、プロパティから寿命で除去オプションをオンにし、最大寿命1に設定しておきます。あとはParticle Simulationをソースエミッターのソースとして接続し、シミュレーションで確認しましょう。パーティクルからパーティクルが連続して発生するようになりました。

このように、パーティクルを発生源としてさらに別のパーティクルを発生させる場合には、途中で発生源とするパーティクルの状態をオペレータで取得し、コレクターを使って発生源となるパーティクルを発生させ、さらにそれをソースとしてソースエミッターでパーティクルを発生させるという手順が必要になります。

2017年8月30日