modoのパーティクルとボリューム機能を使用して爆発を作る方法について書いてみます。
パーティクルもボリュームも特に難しいことはしていないのですが、複合的な要素で成り立っているので解説するのが少し大変です。爆発を作るにあたって気をつけた点を中心に書いてみたいと思うので、細かな所はサンプルファイルを見てください。
■ サンプルファイル
シミュレーションを実行するとパーティクルを確認できるようになります。
爆発を考える
爆発を作るにあたり爆発を構成する要素を考えます。今回の爆発では「衝撃波」「火花」「爆発の中心」「爆発から飛び出す煙」の4種類の要素にしました。爆発で破片を飛ばしたり、爆発で建物が崩れるような場合はもっと要素が増えると思います。
要素別にレンダリングしてみたので、要素ごとに解説してみます。
衝撃波
爆発の衝撃波が伝わり、土煙が発生するイメージです。地面に沿ってパーティクルを飛ばすために、円柱から Surface Emitter を使用してパーティクルを放射しています。レンダリングはスプライトを使用しています。
火花
爆発で四方に飛散する火花のイメージです。Radial Emitter で放射状にパーティクルを放射しています。レンダリングはスプライトを使用しています。
爆発の中心
物が燃えてもっとも煙を出す、爆発の中心になる要素です。球体なんかのアイテムの頂点を使用して手付けでアニメーションさせてもいいのですが、今回は面倒くさかったのでRadial Emitter を使いました。
Particle Simulation の「重力」を正数にして、時間経過とともに空にのぼるように設定しています。
爆発の中心になるパーティクルは「ドラッグ」を設定して、パーティクルが飛びすぎないようにブレーキをかけています。
レンダリングはボリュームとスプライトを使用しています。煙の中心にシャドーをOFFにしたライトを配置しています。modoのボリュームはGIのように周辺を照らすことができないので、ライトを配置して地面やボリュームを照らしました。
本当は地面をもっと広くライトで照らしたかったのですが、ボリュームは「ライトリンク」が機能するのですが、スプライトは「ライトリンク」の設定を無視するため、しかたなくライト1個の設定にしています。ライトマテリアルの「ライトディフューズ量」を使用することでポリゴンだけ明るさを強くしました。
また、modoはフィジカルベースのライトなので、ライトの影響範囲を距離で指定してボリュームをライティングできないのも地味に困りました。フィジカルベースのレンダラーはライトの明るさによって影響範囲が自動的に切り替わります。リアルな物を作る場合にはいいのですが、エフェクト的な表現の場合は、昔ながらの距離指定の影響範囲が恋しくなります。今回はファイルを公開する関係で1シーンで完結させてますが、別ライティングのシーンを複数作成して合成した方がいいと思います。
ボリュームの色は、グラディエントの「ボリューメトリックルミナンス色」「ボリューメトリックルミナンス量」で設定します。「入力パラメータ」は「ロケータまでの距離」を使用して、爆発の中心が燃えてるような感じに設定しています。
個別にレンダリングして気づいたけど、もう少しモコモコしたテクスチャ設定すればよかったかな。煙の内側方向にパーティクルをスピンさせればフルードっぽい感じにできたかも。
爆発から飛び出す煙
爆発から飛び出す煙です。煙は Randomize IDノードを使用して一本ごとにランダムさを設定しています。
レンダリングはボリュームとスプライトを使用しています。ボリュームは厚みのある煙の表現に使い、スプライトは煙が時間経過とともに拡散して薄くなっていく表現に使用しています。
ボリュームの動きと徐々に消える部分は「テクスチャエフェクト」の「拡張&ディゾルブ」を使用しています。「拡張&ディゾルブ」だけだと煙の動きがゆっくりすぎるので、Multi-Fractal のテクスチャロケーターを適当にアニメーションさせることで動きをつけてます。「密度」にキーを設定して煙の厚さを変化させて薄くなるようにしてます。
スプライト用のパーティクルは拡散して薄くなる感じを出すため、ボリュームのパーティクルよりも少し移動用が多くなるようにしています。「エフェクト速度」もボリュームとスプライトで差をつけて、スプライトの方が少し長めに表示されるようにしています。
スプライトは「サイズグラディエント」を設定して、時間経過とともに大きくなるように設定しています。最初のはボリュームよりも小さく、時間経過とともにボリュームよりも大きくなるようにしています。
ボリュームの色は、グラディエントの「ボリューメトリックルミナンス色」「ボリューメトリックルミナンス量」で設定します。「入力パラメータ」は「パーティクルエイジ」を使用して、パーティクルが放射された最初の数フレームだけ燃えているような感じになるよう設定しています。
パーティクルのスケマティックはこんな感じです。ノードの数は多いですが、特に難しいことはしてないと思います。
「爆発から飛び出す煙」のパーティクル Particle Simulation_4 は Particle Operator を使用して等間隔にパーティクルを発生させています。これは煙の線が途中で切れたように見えるのを避けるためです。Source Emitter を使用するとランダムにパーティクルが放射されるので、パーティクルに隙間ができてしまいます。逆にスプライトは Source Emitter を使用することでランダムに煙が拡散する感じを出すのに利用しています。
パーティクルには Turbulence Force を設定して風に流される感じを出しました。激しく動かしたいときはTurbulence Force を移動すると面白い感じになります。
完成
After Effectsでレンズフレアや画面ブレを追加して完成です。今回はゲームのエフェクト的に、爆発が発生して消えるまで作りました。映像用途では爆発してから消えるまでを映すことは少ないので、消えかける部分の調整が「拡張&ディゾルブ」まかせでリニアな感じが出てしまいいまひとつでした。完全に消えるところまで作る場合は、各パラメータに手動でキーを設定した方がいい感じになりそうです。
補足ですが、ボリュームとスプライトを同時にレンダリングすると、後半のスプライトとボリュームが重なる部分でチラツキが発生してるのに気がつきました。チラツキが気になったので上の画像は別でスプライトとスプライトのマスクをレンダリングして合成しています。
スプライトのマスクを作成するためにVolumetric Opacity Outputをマテリアルグループに追加してレンダリングしようとしましたが、Volumetric Opacity Outputはマテリアルグループに対応していないため使えませんでした。最終的にボリュームを黒色、スプライトを白色に設定し直してマスクにしました。下はちらついてる画像です。
modoのパーティクルとボリューム機能、なかなか強力で表現力あると思いませんか!?レンダリングに時間かかりますが、魅力的なエフェクトが作れると思います。