Simulation

Tips

modoでタイムラプス表現

modoの「自然科学ベースの日光」「自然科学ベースの太陽」、いわゆるフィジカルスカイとフィジカルサンの時間をアニメーションさせて、タイムラプスっぽい表現の作り方について書いてみたいと思います。

 

時間経過のアニメーション

modoでは日の出から日の入りまでのアニメーションが簡単に作れます。空のような環境は、シェーダーツリーのEnvironment Material で環境タイプを「自然科学ベースの日光」を設定します。

ライトの設定の「自然科学ベースの太陽」をONにして、「時」チャンネルを設定すると時間に応じた照射をシミュレーションすることができます。このシーンでは 04:30~20:00 までアニメーションを設定しました。

 

雲のアニメーション

雲の表現にはボリュームを使用しています。Multi-Fractalレイヤーを追加して、レイヤーエフェクトを「ボリューメトリック密度」に設定します。雲の動きはMulti-Fractalのテクスチャロケータの位置をアニメーションさせています。ボリュームの位置は動かしていません。

雲の量を朝夕と日中で変化させるために「上部クリップ」にキーを設定しました。

ボリュームの形状は「立方体」、「半径」を300mに設定して、トランスフォームのスケール Yを10%にして平面的なボリュームにしています。位置は見た目で適当に配置してます。

ボリュームのシェーディングは時間に応じて「密度」「スキャッタリング」「アンビエント」「アンビエント色」をアニメーションしています。

「密度」は朝夕の時間が 10、日中は 7 に設定して雲の厚みを変化させています。同様に「スキャッタリング」も朝夕は 10%、日中は 200% に設定して雲を白くしています。

「アンビエント」「アンビエント色」はボリュームの色に、空の色を反映するために使用しています。modoのボリュームはGIが使用できないので、ボリュームをそのまま使用すると空から浮いて見えます。
「自然科学ベースの日光」で空のアニメーションを設定したら、「アンビエント色」に5~10フレーム間隔でキーを設定して、空の色をスポイトします。
「アンビエント」は朝夕 0 、日中は 1 に設定して「アンビエント色」の影響の強さを設定しています。

 

300mのように大きなサイズのボリュームを使用する場合は「サンプリングレート」の値に注意する必要があります。ボリュームの「半径」を大きくすると、テクスチャのバンディングのような縞模様が目立つようになります。下の画像は半径100mで サンプリングレート 1 の場合の画像です。

サンプリングレート 0.5 に下げると模様が目立たなくなります。ただしレンダリング時間も長くなるので、あまり小さな値は使用しない方がいいです。

 

草のアニメーション

草のアニメーションはダイナミックカーブとファーマテリアルを使用しています。

地面のモデルからヘアーツールの「ガイドを生成」を使用して、「セグメント数」3のガイドを作成します。

作成したガイドに「ダイナミックカーブ生成」でダイナミクスを適用して、「ジョイント角度制限」に小さな値を設定して動き過ぎないようにします。

草を動かすためにTurbulence Forceを追加してランダムにガイドが揺れるように設定します。

 

Fur Material を追加して、ガイドを「方向」に設定するとガイドに合わせてファーが動くようになります。ガイドは「シェイプ」「方向+長さ」「範囲」に設定してもアニメーションします。
本当は「シェイプ」を使用したかったのですが、GLではファーがアニメーションするのにレンダリングでは動かなかったり他のパラメータの影響があるようで、いまいちイメージ通りに動かなかったです。

 

草の質感

草の質感はこんな感じです。

 

Variation Textureでファー一本一本に色のランダムさを加えます。ファーが単色だと人工的に見えるので、ファーやヘアーを使用する場合はVariation Textureを使用すると自然に見えるようになります。

 

Gradient の入力パラメータを「ファーパラメトリック長」にして、草の根元から先端にかけて「サブサーフェース量」が変化するように設定しています。同様に「サブサーフェース色」も設定します。
サブサーフェースを使用することで、逆光のとき葉先の黄色が強くでるように設定してます。

 

チキンのアニメーション

チキンが組み上がるアニメーションは、プロシージャルモデリング機能を使用しています。

骨組みアニメーションのスケマティックです。

「Merge Meshes」したチキンのモデルを「Push」でマイナス方向に縮めます。「Edges to Curves」のカーブモードを「エッジ毎」にして、メッシュの形状のポリラインを生成します。「Delete_1」で全てのポリゴンを削除してポリラインだけにします。「Delete_2」ではリニアフォールオフを使用してポリラインを削除するアニメーションを設定しています。
最後にアイテムのカーブタブで「カーブのレンダリング」をONにすると、ポリラインをレンダリングすることができます。

 

チキンの面アニメーションのスケマティックです。

「Merge Meshes」したチキンのポリゴンを「Delete」で削除しています。ランダムに削除するためにSelectionに「Select Random」というアセンブリを使用します。Percentage Selected チャンネルにキーを設定すると、ランダムにポリゴンを削除するアニメーションを作ることができます。

 

カメラの位置やフレームごとに明るさにもランダムな変化をつけるか迷いましたが、とりあえず単純なタイムラプス表現でした。

 

Edges to Curvesを使うと、骨組みっぽくモデルを手軽に作ることができるので便利ですね。こういった時間経過のアニメーションは、ゲームエンジンの方が天候を変化させたり色々できて便利な気がしますが、レンダリング時間を気にしなければmodoでも手軽に作れます。

ファーでチラツキの少ないレンダリング設定についても書きたかったのですが、テキスト量が多くなりそうだったので記事を分けて書いてみたいと思います。

Tips

modoでパーティクルの位置をブレンドする方法

modoでパーティクルの位置をブレンドする方法について書いてみます。
901で追加された Particle Constraint と Matrix Blend ノードを使用すると、アイテムの形状にパーティクルが集まるような表現を手軽に作ることができます。

 

単純なパーティクル位置のブレンドの画像です。

Particle Operator に「ID」「位置」を追加。IDを Particle Constraint の Particle ID にリンクします。これでパーティクルのIDが近いもの通しをコンストレイントしたことになります。

Particle Constraint の「出力」を Matrix Blend ノードでブレンドします。 Matrix Blend はその名の通り入力されたマトリクスをブレンドするノードです。「ブレンド」が0%だと「マトリクスA」、100%だと「マトリクスB」のマトリクスを出力します。50%だとマトリクスABの中間地点を出力します。ブレンド チャンネルにキーを設定することで、パーティクルの位置をアニメーションしてます。
Matrix Blend はいろんなリグに使える便利なノードだと思います。

Matrix Blend の「マトリクス出力」を Matrix Vector でXYZの移動に分解して、Particle Operator の「位置」にリンクします。これでパーティクルの位置をブレンドすることができます。画像ではMatrix Blendを2個つかって3アイテムの頂点位置とブレンドしてますが、最初はMatrix Blendを1個で2アイテムから試すとわかりやすいと思います。

 

パーティクル位置のブレンドはポリゴンだけでなく、別のパーティクルシミュレーションとブレンドすることもできます。

スケマティックでParticle Simulation_2にCSV Point Cash ノード使用してますが、なくても大丈夫です。

 

単純なブレンドだと機械的に補完され過ぎて感じるかも知れません。このチュートリアルのように、ベクトル減算と Vector:Multiply By Scalar ノードでパーティクルの速度を変化させるとリニアなブレンド感が緩和されると思います。

Randomize ID は速度にランダムさを設定してます。

 

パーティクル位置をブレンドすると、ロゴに集まるパーティクルなんかを作ることができます。

パーティクルの波うつ軌道は Curve Force です。GLの画像で青色のパーティクルが変な動きしてるのは、 CSV Point Cache のオフセットを使ってタイミング調節してるためです。CSV Point Cache のオフセットにキーを設定するとステップ補間になってしまうので、演算ノードをリンクして、演算ノードのチャンネルにキーを設定してます。

ここで問題になったのが、12.1でCSV Point Cache を Particle Constraint にリンクしてシミュレーション実行するとmodoがフリーズします。いちどParticle Simulationを繋いで計算した直後に、CSV Point Cache を繋いでシミュレーション実行するとフリーズせずに動作するというハックに気がついたので何とかなりました。

何となく Particle Constraint はバグってる気がします。シミュレーションを繰り返すと計算速度が徐々に遅くなるような気がするのと、パーティクル数が少なくてもシミュレーションに時間がかかりすぎる印象があります。

Particle Constraint と同じようなことは、 Matrix Compose と ジオメトリ コンストレイントノードを使って再現することもできます。こちらのノード処理の方が Particle Constraint より速く動作するのでお勧めです ( CSV Point Cache とブレンドしたい場合は Particle Constraint を使う必要がある気がします)

 

参考

emFlock2 みたいなの簡単に作れるようにならないかなー。
http://www.mootzoid.com/plugin/emflock2#lightbox[demoAssets]/0/

Tips

modoとAEでアニメ風爆発の作り方

modoとAfter Effectsを使ってアニメ風の爆発の作り方について書いてみます。特に新しい内容ではありませんが、だれかの参考になれば嬉しいです。

最近のアニメでは3DCGが使われることが当たり前になってます。爆発のようなエフェクトも作画ではなく、CGが使用されてるのを多く見かけるようになっています。
CGで爆発を作る場合は大きく分けて2つの方法があります。1つめは球体にトゥーンシェーダを設定して、球体をアニメーションする方法です。2つめはFumeFXのようなフルードダイナミクスや、ボリュームレンダリングを使用する方法です。

今回はmodoのパーティクルとボリュームを使用して爆発の素材を作って、After Effectsでセルっぽい質感にしてみます。

 

ボリュームのレンダリング

modoでボリュームをレンダリングします。色はAfter Effectsで設定するので、無彩色のままレンダリングします。パーティクルやボリュームの設定を解説するのは大変なので、詳細はサンプルファイルをみてください。

■ サンプルファイル

以前の爆発と同じく、今回もゲームっぽく爆発して消えるまでのアニメーションにしてみました。

ボリュームの質感は、爆発の中心を明るくするためにグラディエントレイヤーを「ボリューメトリックルミナンス量」で重ねています。グラディエントの「入力パラメータ」は以下の通りです。

 

デフォルト

わかりやすいように「ボリューメトリックルミナンス量」を使用していない状態の画像です。Multi-Fractal で煙っぽいでこぼこを設定しています。

 

テクスチャ値

入力パラメータに「テクスチャ値」を設定した画像です。Multi-Fractal レイヤーでへこんでいる部分を明るくすることで、煙の中心が高温になってる感じをだすために使ってます。

 

ロケータまでの距離(オブジェクト空間)

入力パラメータに「ロケータまでの距離(オブジェクト空間)」を設定した画像です。個々のパーティクルからの距離でボリュームを明るくしています。「 ロケータまでの距離(オブジェクト空間)」を使う場合は、ボリュームの「自動テクスチャオフセット」や「テクスチャエフェクト」をONにしていると影響を受けてしまうので、使う場合はOFFにする必要があります。

 

ロケータまでの距離

入力パラメータに「ロケータまでの距離」を設定した画像です。爆発の中心からの距離でボリュームを明るくしています。パーティクルを発射直後のボリュームを明るくするために使ってます。

 

最終レンダリング

全てのレイヤーを適用した画像です。

 

After Effects で色付け

modoで無彩色でレンダリングしたボリュームにAEで色をつけます。エフェクトは下の画像の通りです。

トーンカーブでボリュームのコントラストを調節してから、CelMXのGradientMapで爆発の色を設定しています。AE標準のコロラマ エフェクトでも同じことができます。最後にチョークでボリュームの輪郭をシャープにしています。
CelMXはCelFX同様にアニメ撮影処理向けのエフェクト集ですが、MXには3DCGでも便利なエフェクトが入っているので使ってます。

 

このままだと煙がパッキリし過ぎてるので影をぼかします。

レイヤーを複製して、煙の影をBlurCelを追加してぼかします。レイヤーの不透明度を65%くらいにして重ねます。ぼかし方は色々あるので、好きな方法を使うといいと思います。

 

最後に調整レイヤー追加してGlowを適用します。このGlowはお気に入りなので多用しちゃう。

 

作った爆発を Trapcode Particular で適当に発生させるとこんな感じになります。追加で火花や破片、画面ブレをつければ、もっと派手でそれっぽい感じになるんじゃないかと思います。

アニメ撮影に関するメイキングはあまり見かけることがありませんが、最終的なアニメのルックを決める重要なポジションのように感じます。フルCGや実写もそうですがコンポジットって重要ですね。

 

参考

「宇宙戦艦ヤマト 2202 愛の戦士たち」

爆発をLightWaveのハイパーボクセルで作ってるようです。modoでも参考になると思います。
http://www.dstorm.co.jp/dsproducts/lw3d/interview/profile19.html

「劇場版 ソードアート・オンライン –オーディナル・スケール–」

作画の煙の撮影処理前と後の画像が見ることができます。撮影処理で作画の煙のボリューム感がでてます。TurbulenceFDはセルっぽく加工せずに、ボリュームのシェーディングそのまま使ってるようです。こういう合成方法もいいですよね。
https://www.maxonjapan.jp/archives/work/sword_art_online_os

『Fate/kaleid liner プリズマ☆イリヤ』シリーズが実践する、新世代のアニメ撮影ワークフロー

アニメ撮影に関する貴重な記事です。今ではキャラの目や髪にグラデがかかってる作品はあたりまえですね。
https://cgworld.jp/feature/201512-prisma-illya-cgw208t2.html

ufotableのvimeoアカウント

アニメ撮影でとても見応えのある画面をつくるアニメスタジオさん。いくつかメイキング映像が公開されています。
https://vimeo.com/ufotable

CG News

Stardust新バージョン

After Effects用のモジュラー3Dパーティクルシステムプラグイン、Stardustの次のバージョンが発表されました。物理演算が搭載になるようです。
https://www.superluminal.tv/category/blog

After Effectsのモジュラー3DパーティクルシステムであるStardustの次のバージョンを発表することに興奮しています。
すばらしい新しいツールセット物理シミュレーションを紹介します。パーティクルとモデルは衝突したり、力の影響を受けながら互いにやりとりしたりすることができ、アニメーションを簡単に作成できます。

新しいバージョンは来週に利用可能になる予定です。

 

主な新機能
  • 物理パーティクル:パーティクルと3Dモデルを衝突させ、相互作用させる。
  • Live Update : Auto Cacheをオンにすると、現在の物理シミュレーション状態が表示されます。
  • ノードワークフロー : 物理シミュレーションワークフローはAfter Effectsに完全に統合されているため、シミュレーション要素を既存のコンポジションレイヤーやライトにリンクすることができ、アニメーションを調整しながら実際の結果をコンポジションで直接見ることができます。

Tips

modoのパーティクルの質量

パーティクルの質量について書いてみます。
パーティクルは点の情報で実体がありませんが、Particle Operator を使用して「質量」を設定すると、パーティクルがメッシュをはじくようになります。

画像はパーティクルとメッシュが衝突するように、あらかじめ設定したシーンを使用しています。Particle Operator の特性は、チャンネルに直接値を入力してもシミュレーションに反映されません。そこでユーザーチャンネルを作成して、その値を「質量」チャンネルにリンクしています。

下の画像はmodoのサンプルモデルを「シャッター & グルー」で粉砕したものです。

モデルは「複合リジッドボディ」を適用し、スリープのウェイクオンを「衝突フォース」に変更、「ウェイクオン値」を1に設定してパーティクルが当たったらリジッドボディが動き出すように設定しています。

ちなみに「ウェイクオン値」が0だと、連鎖的にリジッドボディ全体が動き出します。

 

Dynamic Replicator を使えば同じようなことができますが、パーティクルに質量設定した方がシミュレーションの計算量が少ないと思います。
modoのダイナミクス機能はオープンソースライブラリの Bullet Physics を使用していますが、リジッドボディとパーティクルが相互に影響し合うようなシミュレーションができるのが面白いですね。

 

参考

 

CG News

Storm // Granular Solver

スタンドアロンのシミュレーションツール。Alembic / PRT / BINファイルがエクスポートが可能な粒状ソルバーです。砂からゼリーにシミュレート可能なようです。価格は$ 279。
modoの標準パーティクルは特殊効果的な表現が弱いので、スタンドアロンはいいかもしれません。
https://effectivetds.com/resources/fx-tools/storm/

Tips

modoで物理演算後にロゴが現れる

物理演算後にロゴが現れるような表現について書いてみます。

 

作り方は簡単で、物理計算後にUVを作成するだけです。

  1. 物理計算を設定したシーンを用意します。
  2. アニメーションが終了する決めのフレームでオブジェクトを選択して、UVマップを作成します。
  3. UVを展開します。UVツールの「ビューから投影」をアクティブにして、カメラビューをクリックします。
  4. テクスチャレイヤーでUVマップを設定します。
  5. UVビューを使用して、ロゴの大きさを調整します。

かなり単純ですね。物理演算の設定を変えるとオブジェクトの位置が変わってしまうので、プロシージャルモデリングの Create UV Map ノードを使ってみるのもいいかもしれません。
ロゴは少し崩れた方がいいかなと思って最後少しずれるタイミングにしてみましたが、レンダリングしたらピッタリ決まる感じの方がよかったかも。

物理演算関連の設定も書いておきます。

物理演算は「複合リジッドボディ」を使用しています。アイテムの形状は 球、カプセル、トーラスの3種類。中央の大きな球体は「キネマティックリジッドボディ」を設定しています。

Vortex Force の「強さ」に0~200~0%でキーを設定して、ぐるぐる回るようにしています。
Radial Force の「強さ」は Vortex Force とクロスフェードするように 0~200%でキーを設定して、球体に小さいアイテムが集まるようにしています。リレーションシップを使ってRadial Force の「強さ」が200%のとき、solver の「重力 Y」を 0 になるようにしています。
これだけだとアイテムが動き回るので「複合リジッドボディ」の「粘性」と「リニア減衰」にキーを設定して、アイテムの動きを遅くします。

 

「シャッター & グルー」を使って粉々になった破片でロゴができるとか、フォースかえたり色々面白い映像を作ることもできるんじゃないかと思います。

Tips

modoでバラバラに散らす表現

modoのソフトボディを使用して、オブジェクトをバラバラに散らす方法について書いてみたいと思います。

作り方は簡単です。オブジェクトをShatterで分割して、フォースで散らすだけです。徐々に動き出すところはフォースのフォールオフを使用します。

  1. ティーポットを作成。
  2. 「シャッター & グルー」を実行する。このとき「法線マップを生成」をONにする。
  3. 不要な Constraint Modifier を削除。
  4. 「シャッター & グルー」が作成したグループロケータをダブルクリックして子のアイテムを全選択し、「メッシュの統合」を実行して1アイテムにする。
  5. リストタブで shatterInterior マテリアルを選択して Delete する。
  6. ティーポットに「ソフトボディ」を適用して、「ローカル密度」を 0.05 に設定します。
  7. solver の「重力 Y」を 0 に設定します。
  8. Turbulence Force を作成して「強さ」を 0.2%、トランスフォームのスケールを 40% に設定します。つぎにTurbulence Force の移動にキーを設定して、適当に移動しつづけるように設定します。
  9. Wind Force を作成して「強さ」を 0.5% に設定して、45°回転します。
  10. Turbulence Force と Wind Force に Linear Falloff を追加します。
  11. Linear Falloff の「長さ」を適当に設定して、移動するアニメーションを設定します。シミュレーションを実行すると、フォールオフの範囲に入ったメッシュがフォースを受けて飛び散ります。

上の画面キャプチャでは忘れてましたが、ソフトボディを適用するメッシュは4角形以上のポリゴンを選択して「三角分割」か「四角形」にしたほうがよいです。多角形のポリゴンをソフトボディ計算するとエラーが発生して、頂点が極端に飛び出したりします。

あと上の画像はサブディビ切り忘れて隙間できてた。ソフトボディはメッシュが細かければ細かいほど布っぽい動きになるのですが、細かくするとトライアンドエラーに時間がかかるのが悩み所です。

 

modoのサンプルモデルを使うとこんな感じになります。

分割したメッシュだけだと少し寂しいので、メッシュが動き出すタイミングでパーティクルを発生させています。パーティクルの発生位置はFXアイテムに Gradient を追加して制御します。入力パラメータを「ロケータまでのY軸距離」、レイヤーエフェクトを「パーティクル密度」に設定しています。
パーティクルは RelationShip を使って回転と、小さくなって消えるようにスケールをアニメーションしています。

 

ベベルを使って面を切り離すと、昔のCGっぽくポリゴン単位でバラバラにすることも出来ます。切り離しただけだとスムージングがかからないので、Merge Meshes と Vertex Merge を使うとスムージングを掛けた感じにできます。ちょっと重くなりますけど。

 

モーショングラフィック作品でよく見かけるような表現がmodoでも手軽にできたりします。Constraint Modifierが同一メッシュ内のソフトボディで使用できるようになれば布が裂ける感じがだせそうなので、もっと進化して欲しいですね。

Tips

modoで紙吹雪を作る方法

modoのソフトボディを使用した紙吹雪の作り方について書いてみます。
紙吹雪や花びらが降る表現はよく見かけます。作り方としてよくあるのは板ポリに回転するアニメーションを設定して、その板ポリをパーティクルに割り当てる方法です。modoでもパーティクルとリプリケータを使えば同じことができますし、After EffectsのParticularが使われてるのもよく見かけます。

パーティクルを使用した方法は手軽ですが、ソフトボディを使用すると落下方向とポリゴンの面の傾きで動きに変化がでて、パーティクルにはないリアルな動きを表現できます。

紙吹雪のモデリング

板ポリをランダムに配置するだけです。方法はいろいろあると思いますが、modo 12で改良されてたジッターツールのリジッドモードが便利なので使ってみました。

  1. 平面ポリゴンを作成します。
  2. 平面分割(Shift+D)を4回実行。
  3. ポリゴンを選択して、ベベルを「グループ化」OFFで実行。面ごとにベベルします。
  4. 選択中のポリゴンを非表示(H)。
  5. ベベルで生成されたポリゴンを削除。
  6. ポリゴンを表示(U)。
  7. 移動ツール(W)をアクティブにして、ポリゴンを複製(Ctrl+Shift+ドラッグ)。
  8. ジッターツールの「リジッド回転」「リジッド移動」をそれぞれ実行してポリゴンをバラバラに配置します。

花びらや葉っぱのようにテクスチャを使う場合は、平面を配列ルールで複製した方がUVを維持できていいと思います。

 

ソフトボディの設定

紙吹雪のソフトボディはローカル密度を0.005と小さな値を設定して、紙のような軽さが出るように設定してます。「リニア減衰」に大きな値を設定しているのはゆっくり落ちるようにするためです。このあたりの設定はシーンの大きさやフォースの設定なんかで適当に設定してます。

  1. 平面ポリゴンを作成します(地面用)。
  2. 平面ポリゴンに「スタティックリジッドボディ」を適用。
  3. 紙吹雪用のメッシュに「ソフトボディ」を適用。
  4. ダイナミクスのプロパティで「密度」を0.005、「リニア減衰」を10%に設定します。
  5. Turbulence Force を追加し「強さ」を0.03%に設定します。トランスフォームの「スケール」を40%に設定し、位置にキーを追加してテクスチャロケータが移動し続けるように設定します。
  6. Vortex Force を追加し「強さ」を0.01%に設定します。このあたりのフォースの設定は好みにいじった方がいいと思います。
  7. Turbulence Force と Vortex Force にLinear Falloffを追加し、「長さ」を2mに設定します。
  8. シミュレーションを実行すると紙吹雪っぽい動きになると思います。平面に落ちたときプルプル動くのは止められなかった。

これだけでも簡単に紙吹雪っぽい動きになりましたが、パーティクルを使用したときとあまり変わらない感じがするかもしれません。そこでLiftのパラメータを設定します。Lift は空気抵抗で紙が上昇するような動きが加わって、ヒラヒラ舞う感じになります。
このパラメータはチャンネルビューポートにのみ表示されるパラメータです。余談ですがダイナミクス系のパラメータの頭に付く re は Recoil の略称かな?

 

Lift

Liftの値を変えて変化を見てみました。フォースはなしで重力のみの設定です。「密度」「リニア減衰」の値によっても動きが変わるので、ザックリとした参考だと思ってください。

Lift 0

 

Lift 0.01

 

Lift 0.1

 

Lift 1.0

 

最終的に「reLift」を 1 にして、Liftの効果が出やすくするために「リニア減衰」をデフォルトの4%に変更しました。

 

紙の裏側は、折り紙のように白色になるように設定してます。

質感は Variation Texture と Gradientを使用しています。Variation Texture の変化ソースを「メッシュパート」にすると、連続ポリゴン単位で色を変えることができます。ポリゴン背面の色はグラディエントの入力パラメータを「背面」に設定し、ブレンドモードを「スクリーン」にして白くなるようにしています。


ソフトボディでもパーティクルと同じくらい簡単に紙吹雪が作れるんじゃないかと思います。

ちなみにソフトボディを使用する場合は、solverの「シーンスケール」の値は変えない方がよいです。仕様なのかどうかわかりませんが「圧力」が反応しなくなったり、パラメータの動きが変になるような気がします。実物のサイズでソフトボディが上手く動作しないときは、シーン全体を大きくしてから計算する上手くいくかも知れません。

 

ソフトボディを使用した紙吹雪の表現は、LightWaveのプラグインMotionDesignerが別売だったときのチュートリアルに書かれてました。今でもドキュメントに載ってたりするのかな?

CG News

MODO用パーティクルオペレータアセンブリ「グリッド キット」

グリッド状にパーティクルを移動させるアセンブリが発売されたようです。価格は€8。https://gumroad.com/l/TheGrid

恐らくmodo標準機能で構築されたアセンブリだと思います。X-Particlesのデモ見て作ってみようとしてたので頑張れば作れると思いますが、買った方が手軽かも知れません。

 

概要

グリッドキットは、modoパーティクルを使用してグリッド/迷路のような構造を作成するためのツールであり、パーティクルの動きから作成されたカーブで簡単に作業できます。「どうやって作るのか」を考え技術的に闘うよりも、創造する時間を費やして楽しく過ごすことができます。
 

 

 


 

 

 

Tips

modoのパーティクル速度を使用して回転する方法

パーティクルの速度に応じて回転する方法について書いてみます。パーティクルオペレータの使い方の応用的な内容で、「速度」に応じて回転する風車のような表現ができるようになります。

Vortex Force を使用した単純な構成の画像です。移動速度に応じて回転数が上がります。
スケマティックはこんな感じ。

パーティクルオペレーターに「速度」と「回転」を追加します。「速度」を「回転」にリンクしたいところですが、「速度」と「回転」はチャンネルタイプが異なるので、Matrix From Euler を使用して「速度」をマトリクスチャンネルにしてから「回転」にリンクします。「速度」そのままだと回転の値が小さいので乗算ノードで30倍にします。

 

Wind ForceにLinear Falloffを設定して回転を制御してみた。

速度をそのまま回転に使用しているので、フォールオフの影響範囲に入った円柱の角度がジャンプしてしまいました。こういう使い方の場合は他の特性と組み合わせた方がいいかもしれません。

Wind Forceでは「強さ」を 1 、「速度」を 20 にしてパーティクルが移動しないように設定しています。Linear Falloffの影響範囲にあるぉパーティクルに速度が追加されることで回転させています。

サーフェースエミッターは1フレームで欲しいだけのパーティクルを発生できないので「放射レート」にキーを設定して、必要なパーティクル数になったら「放射レート」を0にしています。また「初期速度」「速度の広がり」を0にしてパーティクルが移動しないように設定しています。

 

矢印をパーティクルの進行方向を向け、速度に応じてスピンするような回転を設定してみた。

進行方向に回転する処理は、パーティクルオペレータの「前の位置」「位置」を Matrix Construct ノードを使用してベクトルチャンネルを位置のマトリクスに変換します。次ぎに Matrix Construct の出力を Direction Constraint の「起点」と「終点」にリンクします。これで「回転出力」を「回転」にリンクすればパーティクルの進行方向に合わせて Replicator が回転するのですが、今回は「速度」を回転に加えたいので、Direction Constraint の「回転出力」をMatrix To Euler の「ワールド回転」にリンクします。

パーティクルオペレータの「速度」を乗算ノードで適当に50倍にして、 Matrix To Euler の値と加算した値を Matrix From Euler でマトリクスに変換。Matrix From Euler の「ワールド回転」をパーティクルオペレータの「回転」にリンクすれば完成です。今回はZ軸方向に回転したかったので速度Zしか使用していませんが、XYZの3軸で好きに回転できると思います。

 

紙吹雪や花びらを回転する場合でも速度を使用すると移動量に合わせた回転になるので、「寿命」を使って回転するより少しリアルな感じが出せるようになる気がします。

Tips

modoで爆発表現

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のパーティクルとボリューム機能、なかなか強力で表現力あると思いませんか!?レンダリングに時間かかりますが、魅力的なエフェクトが作れると思います。

CG News

Stardust 1.1.4 for After Effects

After Effects用のモジュラーパーティクルプラグイン Stardust がアップデートされたようです。
https://www.superluminal.tv/category/blog 

3Dモデルが他のモデルにシャドーを落とせるようになりました。3Dモデルの追加レンダリングモード。環境照明はシーンのライトとシャドウの影響を受けます。

新機能:

  • 3Dレンダーエンジン、シャドー、追加の3Dモデル、環境シェーディング、その他
  • 3Dモデルでの作業を簡素化し、3Dモデルをコンポジッションに数秒で追加できます。
  • ワークフローの改善、複数のビデオソース、新しいグラフモード
  • パス上のパーティクルコントロールが強化
  • モデルへの3Dシャドー
  • 追加の透明マテリアル
  • 新しいグラフモード
  • ソースノードの新しい「レイヤーセット」を使用して、複数のソースビデオでビデオウォールを簡単作成
  • 環境シャドー – ライトがイメージベースの照明環境に影響
  • プリセットは環境やモーションブラーなどのレンダー設定を保存して読み込むことができます。
  • モデルワークフローを単純化、モデルノードを追加して単一インスタンスを追加するだけです。
  • モデルのアニメーションを簡略化し、ワンクリックでモデルを作成して3Dヌルにします。
  • モーションノード – 方向を指定するオプションを追加しました。
  • プリセット – タグとレンダー設定を保存します。
  • その他のバグ修正

Tips

modoのパーティクルオペレータ

modoの Particle Operator の基本的な使い方について書いてみます。
はじめてmodoのパーティクルを使ったとき、使い方がわからず他のソフトで簡単に設定できた表現ができないことにストレスを感じたのを思い出しました。今回はパーティクルでよく使う表現を組む方法をまとめてみました。

 

Particle Operator とは?

Particle Operator はパーティクルが持つ「特性」を制御するためのノードです。使用頻度の高いものだとパーティクルが発生してから徐々にアイテムを大きくしたり、回転したり、透明にしたりと、パーティクルでよく見るような制御ができます。
他の3Dソフトではエミッターにパーティクル制御の設定がまとまってたりしますが、modoはノードベースのパーティクルシステムなので制御用のノードが色々わかれています。

Particle Operator は様々な「特性」を追加することができます。特性は Replicator 、Blob、Volume 、Sprite、グラディエントなどの機能で使用することができます。特性が使用できるかは Replicator など受け取る側によって決まります。

 

デフォルト

Particle Operator を使用せず、単純にパーティクルを放射するとこんな感じになります。変化がわかりやすいように Replicator でティーポットを複製しています。

 

サイズ

パーティクルが発生してから、徐々にサイズを大きくする方法です。

単純な設定方法は Particle Operator の「寿命」を「サイズ」にリンクするだけです。「寿命」はパーティクルが発生してから値をカウントアップするチャンネルなので、徐々にサイズが大きくなります。

 

チャンネル リレーションシップを使うと、グラフを使用してサイズを制御することができて便利です。

 

 回転

パーティクルが発生してから、回転し続ける(スピンさせる)方法です。

単純な設定方法は Particle Operator で「寿命」を「回転」にリンクすればいいのですが、「回転」はチャンネルタイプ行列なので、そのままリンクすることができません。そこで Matrix From Euler ノードを使ってベクトルチャンネルを行列チャンネルに変換します。
「寿命」をそのまま Matrix From Euler にリンクすると、回転の値として小さすぎるので、適当に 360 という値を乗算しています。

 

ランダムに回転を変える方法です。

ランダムさを設定するのに Randomiz ID ノードを使用します。パーティクルを個別に制御する場合は Particle Operator の「ID」を使用し、追加した 「ID」を Randomiz ID にリンクします。
Randomiz ID はパーティクルの「最小値」「最大値」で値の出力範囲を設定できるのが便利です。

 

位置

パーティクルが発生してから、振幅し続ける方法です。


Channel Waveform ノードを使用してサイン波をパーティクルの「位置 X」にリンクします。

 

ディゾルブ

パーティクルが発生してから、徐々に消す方法です。ディゾルブはビューポートで確認できないので、レンダリングする必要があります。

単純な設定方法は Particle Operator で「寿命」を「ディゾルブ」にリンクするだけです。

 

ランダムな速度で消す方法です。 Randomiz ID を使用してパーティクルにランダムさを設定しています。

 

modoのパーティクルは少し難しい感じがしますが、かなり細かな表現ができます。今回は Particle Operator の単純な使い方について書いてみましたが、「特性」通しを組み合わせるだけでも面白い表現を作り出せると思います。速度で回転やサイズ、色を変化させたり、組み合わせや制御の自由度が高いくて凄いです。
スケマティックは面倒という人向けにエクスプレッションで制御するノードもあるので、色々試してみると面白いと思います。

補足ですがパーティクルオペレータのチャンネルに値を設定したい場合、パーティクルオペレータのチャンネルに直接値を入力しても無視されるので注意が必要です。ユーザーチャンネルなど他のチャンネルを経由して値を設定する必要がります。