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

固定したフレーム毎にパーティクルを放射するには

http://www.youtube.com/watch?v=WY_Sg5LFj6I&hd=1

パーティクルをシミュレーションさせると、デフォルトでは絶えずパーティクルが放射されているような状態となりますが、今回はこのパーティクル放射のタイミングを固定したフレーム毎、例えば30フレーム毎にパーティクルを放射するといった表現を実現する方法をご紹介します。

サンプルとして、このシーンには半球を置いてあります。この半球の全体から30フレームごとにパーティクルが放射されるというシーンを作ってみましょう。

まず、この放射のタイミングをコントロールするためにはパルスというプロパティが必要になります。このパルスというプロパティが用意されているエミッターはソースエミッターとなりますので、シーンにソースエミッターを追加しておきます。ただし、ソースエミッターでは、半球の全体からパーティクルを放射することはできませんので、Surface Particle Generatorを使ってまずは半球状にポイントを配置します。

アイテムリストアイテム追加からParticlesPoints CloudsSurface Particle Generatorを追加します。ソースサーフェイスに半球のメッシュを指定し、半休全体にポイントが配置されるようにします。次にソースエミッターのソースへとSurface Particle Generatorを指定します。いったんこの状態でシミュレーションを実行してみると、半球状から常にパーティクルが放出されるようになっているのが確認できます。

では、ソースエミッターのプロパティである放射モードパルスへと変更しましょう。この放射モードパルスへと設定されたことにより、パルスで指定したタイミングでパーティクルが放射されるようになります。ここから、「30フレーム毎に放射する」つまり「0,30,60,…といった30で割った余りの数が0になるフレーム数の時に放射する」といった条件による場合分けが発生しますので、ここから先はスケマティックビューで設定していきます。

アイテムリストからParticle SimulationSource EmitterSurface Particle Simulationをスケマティックビューへとドラッグアンドドロップします。またアイテムリストからSource Emitterを選択し、チャンネルタブからパルスの項目を、Source Emitterノードへとドラッグします。これでSource Emitterノードのパルスがノードでコントロールできるようになりました。

さて「0,30,60,…といった30で割った余りの数が0になるフレーム数の時に」といった条件を満たすのに必要となるノードは何になるでしょうか?まず必要なのはフレーム数を把握するための時間のノードです。追加からチャンネルモディファイヤ時間カテゴリにある時間ノードを追加します。

次に30で割った余りの数が必要となりますので、余りの数を割り出してくれるノードが必要です。追加からチャンネルモディファイヤ演算カテゴリにある基本演算:剰余ノードを追加します。さらにもう一つ、余りの数が0と等しいかを判別するためのノードが必要ですので、追加からチャンネルモディファイヤ条件式カテゴリにある論理式:AはBと等しいノードを追加します。必要なノードはこれで全てです。

ではまず、フレーム数を30で割ってみましょう。時間ノードのフレーム剰余ノードの上側の入力である値Aへと接続します。剰余ノードは値A値Bで割った数の余りを出力しますので、ここでは値B30と入力し、さらにこの剰余ノードの出力論理式ノードの値Aへと接続します。論理式ノードはフレームを30で割った余りの数が入力されましたので、これが入力値B、今回はデフォルトのまま、値0と等しい場合にパーティクルが放出されるよう、論理式ノードの出力を、Source Emitterノードのパルスへと入力します。

ここまで接続できたら、実際にシミュレーションしてみましょう。今回はシミュレーションする際に時間の経過が必要となりますので、真ん中にあるシミュレーションボタンをクリックし、シーン時間と合わせながらシミュレーションさせてみます。

すると、30フレーム毎に半球状からパーティクルが放出されるのが確認されるようになりました。このようにパルスプロパティをうまく使うことで、必要なタイミングでパーティクルが放出できるようになります。

2013年12月24日