Simulation

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 の単純な使い方について書いてみましたが、「特性」通しを組み合わせるだけでも面白い表現を作り出せると思います。速度でサイズを変化させたり、速度で色を変えたり、組み合わせや制御の自由度が高いくて凄いです。
スケマティックは面倒という人向けにエクスプレッションで制御するノードもあるので、色々試してみると面白いと思います。

Tips

modoのパーティクルを平面的に移動する方法

放射したパーティクルを平面的に移動する方法について書いてみます。
modoのエミッターはXYZの3軸方向にパーティクルを放射します。これはこれで便利なのですが、平面的にパーティクルを放射したい場合があります。

スケマティックの処理はこんな感じです。

Surface Emitter の設定は「初期速度」「速度の広がり」が 0 で、発生した位置から移動しないような設定です。わかりやすいように「放射レート」にキーを設定して、1フレーム目だけパーティクルを放射するように設定しました。

2D的にパーティクルを移動する処理は Particle Operator を使用します。Particle Operator には特性の「ID」「角速度」「前の位置」「位置」「回転」を追加します。2D的なパーティクル放射に必要なのは「ID」「角速度」のみです。「前の位置」「位置」「回転」は Replicator で複製したアイテムを進行方向に向けるために使用しています。

2D的なパーティクル放射の制御は、「ID」と 360を乗算した値を「Sine」「Cosine」ノードに入力し、その出力値を「角速度」にリンクします。「ID」はパーティクルのIDのことで、パーティクルを個別に制御する場合に使用するための特性です。パーティクルは通常0~1.0の範囲でランダムなID値が割り当てられているので、360と乗算してランダムな方向を設定しています。
※画像には使ってない「Tangent」ノードが含まれていますが、「Tangent」ノードを使うと3軸方向に移動することができます。

Replicator を進行方向に回転する処理は、「前の位置」「位置」を Matrix Construct ノードを使用してベクトルチャンネルを位置のマトリクスに変換します。次ぎに Matrix Construct の出力を Direction Constraint の「起点」と「終点」にリンクし、Direction Constraint の「回転出力」をParticle Operator の「回転」にリンクします。これでパーティクルの移動方向に合わせて Replicator が回転します。「前の位置」を使用している関係で、0フレーム目では Replicator の回転が計算されません。

パーティクルIDと乗算する値を変えると、パーティクルの移動方向を変えることができます。

Tips

modoのパーティクルで破壊表現

パーティクルとテクスチャリプリケータでアイテムを破壊するような表現について書いてみます。
大まかな設定は前回の「パーティクルで波紋を表現 」と同じですが、パーティクル位置からパーティクルを2種類発生させています。1つはテクスチャリプリケータ用、もう一つは破片用のパーティクルです。

 

パーティクルの設定は以下の通りです。Particle Simulation_1 はパーティクル発射用で、Particle Simulation_2 と Particle Simulation_3 はコリジョンと衝突したときにパーティクルを発生させる用のシミュレーションです。Particle Simulation_4 は破片用のシミュレーションです。

スケマティックは前回とほぼ同じですが、破片用のシミュレーション部分が長くなっています。
Particle Simulation_2 はテクスチャリプリケータ用のシミュレーションで、コリジョンが当たった位置に発生しとどまります。Particle Simulation_3 は破片用のシミュレーションで、「寿命で除去」をONにして1フレームで消えるように設定しています。このパーティクルを元に Source Emitter を使用して破片がはじけるシミュレーションを設定しています。
Particle Simulation_4 は Particle Operator を使用して破片が回転するように設定しています。回転は「寿命」を「角速度」にリンクすることで設定します。「寿命」に200掛けてるのは回転数を調節するためです。

破片はボックスを「シャッター & グルー」で生成したアイテムを使用しています。「シャッター & グルー」を使うと破片ごとに別アイテムになるので、「センターをバウンディングボックスへ」を実行してメッシュの中心にセンターを移動します。
アイテムはグループタブでグループ化します。このグループをリプリケータの「原型アイテム」に設定すると、グループ内のアイテムがランダムで使用されるようになります。リプリケータで複数のアイテムを複製するときに便利な機能です。

 

レンダリングの設定はディスプレースメント用の画像をテクスチャリプリケータとして使用しています。ディスプレースメント用の画像は「シャッター & グルー」で粉砕したメッシュを適当にバラバラにしてから「形状をブラシへ」機能で作ってみました。ディスプレースメントは凸ではなく、凹にしたいので「上限値」を-100%に設定しました。

ディスプレースメントはデフォルト設定だと荒くレンダリングされるので、Render 設定のマイクロディスプレースメントで「ディスプレースメント評価」を0.2Pixelに変えています。

いくつか似た感じの記事を書いてみましたが、パーティクルとテクスチャリプリケータという同じ機能の組み合わせでも色々なエフェクトや表現が作れるんじゃないかと思います。単純な機能だけど発想しだいで無限の可能性感があって面白いですね。

次回以降も引き続きパーティクル制御について書きながら、徐々にボリュームを使った爆発表現なんかにシフトしていこうかと思います。

Tips

modoのパーティクルで波紋を表現

パーティクルとテクスチャリプリケータで水面に広がる波紋の表現について書いてみます。
結論から言うとテクスチャリプリケータはパーティクルごとランダムに消えるような表現ができませんでした。

大まかな設定は前回の「パーティクルでアイテムに穴を開ける」と同じですが、パーティクル位置から発生させたパーティクルをParticle Operatorで制御してます。

パーティクルの設定は以下の通りです。Particle Simulation_1 は発射用で、Particle Simulation_2はコリジョンと衝突したときにパーティクルを発生させる用のシミュレーションです。

スケマティックも前回とほぼ同じです。 Particle Operator の「寿命」を自身の「サイズ」にリンクすることで、パーティクルが発生してから徐々にサイズが大きくなるように設定しています。イーズイン、イーズアウトをより詳細に制御したい場合はチャンネルリレーションシップを使うと便利です。

スケマティックでは「寿命」を「ディゾルブ」にリンクしていますが、テクスチャリプリケータは「ディゾルブ」に対応していないため透明にならないようです。(リプリケータ、ボリューム、ブロブにはディゾルブが正しく反映されます)

波紋が消えるシーケンスデータを設定すれば寿命に合わせてアニメーションするんじゃないかと思って試したましたが、レイヤーの不透明度と同様に同じフレームで全てのパーティクルが消えてしまいました。もし渇するとリプリケータで波紋のメッシュを発生させて、シェーダーノードを使ってメッシュとのレイ判定をバンプに設定すればうまく行くかも知れません。

波紋のテクスチャは Gradient Fill レイヤーを使用しました。Gradient Fill は放射状のグラデーションを手軽に作れるので便利です。レイヤーエフェクトは「バンプ」に設定して、テクスチャリプリケータに Particle Simulation_2 を設定することでパーティクルの位置に波紋を発生させています。
上記の通り波紋が個々に消えるタイミングは上手く制御できなかったので、単純にレイヤーの「不透明度」に100から0に変化するキーを設定しました。


 

今回はSFっぽいエフェクトにも使えるように、パーティクルが衝突したタイミングで波紋を発生させたかったかったのですが、残念ながらテクスチャリプリケータでは表現できないようでした。単純に雨の波紋を作りたい場合は「Rainレイヤー」を使用すると簡単かもしれません。

次回も引き続きパーティクル制御で、オブジェクトが砕けるような表現について書いてみたいと思います。

Tips

modoのパーティクルでアイテムに穴を開ける

パーティクルとテクスチャリプリケータでアイテムに穴を開ける表現について書いてみます。
大まかな設定は前回の「パーティクルでアイテムを濡らす」と同じですが、今回はパーティクルがコリジョンと衝突したら消滅して、新たにパーティクルを発生するように設定しています。

パーティクルの設定は以下の通りです。Particle Simulation_1 は発射用で、Particle Simulation_2はコリジョンと衝突したときにパーティクルを発生させる用のシミュレーションです。

スケマティックも前回とほぼ同じです。 Particle Operator の「衝突イベント」を自身の「消滅」にリンクすることで、コリジョンに衝突したタイミングでパーティクルを消滅させている点が違います。

レンダリングの設定は Constant レイヤーのレイヤーエフェクトを「ディゾルブ」に設定し、テクスチャリプリケータにParticle Simulation_2 を設定してアイテムに穴が開いたように見せています。単純ですね。

 

パーティクルがアイテムと衝突するだけなら「パーティクルで文字を書く」と同じで、新たにパーティクルを発生させなくてもいいんじゃないか?と思うかもしれません。

最初はそう設定していたのですが、テクスチャリプリケータの「ランダムサイズ」「ランダム回転」を使用すると、アニメーションレンダリング時に、一部のパーティクルでフレームによってパーティクルのサイズや回転が変わってしまうという問題が発生しました。原因は謎ですがコリジョンの影響でフリップしているように見えたので、新しくパーティクルを発生させることで問題を回避出来ました。

 

他にも穴を開けるような表現をする場合は、リプリケータとレンダーブーリアンを使うこともできます。下の画像では色を設定していますが、マテリアルの設定でディゾルブを100に設定すると透明にくり抜くことができます。
レンダーブーリアンはメッシュの形状を使用して複雑なくり抜きができますが、メッシュが重なっている箇所で望ましくないレンダリング結果になることがあります。欲しい表現に適した方法を選択するといいと思います。

 

次回も引き続きパーティクル制御で、雨の波紋のような表現について書いてみたいと思います。

Tips

modoのパーティクルでアイテムを濡らす

今回もパーティクルとテクスチャリプリケータでアイテムを濡らすような表現について書いてみます。
大まかな設定は前回の「パーティクルで文字を書く」と同じですが、今回はパーティクルがコリジョンと衝突したら、パーティクルを発生するように設定しています。

 

パーティクルの設定は以下の通りです。Particle Simulation_1 は流れ落ちるパーティクル用で、Particle Simulation_2はコリジョンと衝突したときにパーティクルを発生させる用のシミュレーションです。

modoではパーティクルから別のパーティクルを発生させたい場合は、Particle Simulationノードを複数作成します。Particle Simulation 間の連携は Collector / Emitter ノードを使用します。Particle Operator はリンクされた Particle Simulation のパーティクルを制御するためのノードです。

このスケマティックでは Particle Simulation_1 に Particle Operator をリンクし、「特長の追加」から「衝突イベント」と「位置」を追加しています。
「衝突イベント」はコリジョンと衝突した場合に、衝突したことを出力するチャンネルです。これを Collector / Emitter の「パーティクル放射」にリンクすることで、コリジョンに衝突したタイミングでパーティクルを発生させています。
「位置」はそのままパーティクルの位置です。 Collector / Emitter にも「位置」を追加してリンクすることで、 Particle Simulation_1 の個々のパーティクルの位置からパーティクルが発生するようになります。Particle Operator と Collector / Emitter の ◇ をリンクするのを忘れがちなので要注意です。

パーティクルの速度や重量のによりますが、パーティクルが線のように発生しない場合は Particle Simulation_1 の ステップ数を 8 など大きな値を設定すると「衝突イベント」の回数が多くなり、線のようにパーティクルを発生させることができます。

レンダリングは前回同様に Constant レイヤーをテクスチャリプリケータで設定しています。濡れたマテリアルを作成して「レイヤーマスク」、あと「バンプ」を追加してます。

次回も引き続きパーティクルとテクスチャリプリケータで、オブジェクトに穴を開ける表現について書いてみたいと思います。

Tips

modoのパーティクルで文字を書く

パーティクルとテクスチャリプリケータ機能で文字を書くような表現について書いてみます。パーティクルとコリジョンの設定方法がわからない場合は、modo Japan Groupのチュートリアルがお勧めです。

パーティクルの制御は見たままで単純です。エミッターを文字の形になるように一筆書きでアニメーションしています。文字間は「放射レート」にキーを設定してパーティクルが出ないように設定しています。
エミッターの設定は放射タイプを「均一」に変更して、一定間隔でパーティクルが発射されるようにしています。さらに「速度継承」をOFFにして、エミッターの移動がパーティクルに影響をあたえないように設定しています。

 

コリジョンの設定も単純で「跳ね返り」「マージン」「パーティクル衝突粘性」を 0 にします。これで平面にあたったパーティクルがその場で停止します。

 

文字部分のレンダリングはテクスチャリプリケータ機能を使用します。単色の線を表現する場合は Constant レイヤーを使うのが手軽です。Constant レイヤーは単色塗りつぶし専用のレイヤーです。ブレンドモードで画像の色味を少し変えたい場合なんかにも便利に使えます。

 

テクスチャリプリケータの機能が把握出来れば、作り方は簡単に想像できたんじゃないでしょうか。次回はもう少し手間の掛かったパーティクル制御でアイテムが濡れる表現について書いてみます。

 

参考

Tips

modoのパーティクルの基礎

パーティクルの基礎で、パーティクルで発生しやすい問題の対処方法について書いてみたいと思います。

パーティクルが震える

パーティクルが平面とコリジョン判定するようなシーンで発生しやすいのが、パーティクルが静止せずプルプル動き続ける現象です。

これはコリジョンアイテムのダイナミクス設定「パーティクル衝突粘性」のデフォルト値の 50 mm 原因です。「パーティクル衝突粘性」を 0 または 100 mm など大きな値にすることで解決することができます。


「パーティクル衝突粘性」はパーティクルがコリジョンアイテムの表面をどの程度の距離くっつくかという設定です。水がアイテム表面をつたうような表現のときに使用できます。

パーティクルが停止するかしないか微妙なときに、「パーティクル衝突粘性」の値が影響して震える現象が発生するような気がします。

 

パーティクルがコリジョンを突きぬける

パーティクルの速度が速い場合に、コリジョンを突きぬけてしまうことがあります。これは Particle Simulation の「ステップ」の値を大きくすることで解決することができます。
「ステップ」は「シミュレーションを演算」した場合のみ確認できます。シミュレーションの再生ボタンによるプレビューは「ステップ」1 固定なので注意が必要です。

 

パーティクルの軌道がカクつく

パーティクルエミッターの移動速度が速い場合に、パーティクルの軌道がカクカクしてしまうことがあります。これも Particle Simulation の「ステップ」の値を大きくすることで解決することができます。

modoに限らずCGのシミュレーションはデフォルトで1フレーム単位で計算するソフトが多いです。パーティクルの速度やエミッターの移動が速い場合は、1フレーム間隔だと計算精度が足りなくなりコリジョン抜けやカクつきが発生します。そんなときのために1フレーム間隔より細かく計算するための設定が「ステップ」です。計算量は指数関数的に増えますが、正確な計算結果を得ることができます。

modoではパーティクルとメッシュのコリジョンを設定するために「ダイナミックコライダー」を適用すると solver アイテムが追加されます。 solver アイテムにも「演算精度」という「ステップ」と同じような設定がありますが、「演算精度」を上げてもパーティクルの突きぬけには変化がないようです。リジッドボディーやソフトボディーと連携する場合には「演算精度」が影響してくるのかも知れません。

Tips

TurbulenceFDのキャッシュをVDBに変換する方法

LightWaveやCinema4D用のフルードダイナミクスプラグイン TurbulenceFD のキャッシュファイルをVDBに変換する方法について書いてみます。

今まで気がつかなかったのですがTurbulenceFD v1.0 Build 1422(2017-03-23)からbcf2vdbコマンドラインユーティリティが追加されました。bcf2vdbはTurbulenceFDのキャッシュファイル.bcfを.vdbに変換するツールです。このツールはプラグインの圧縮ファイルに含まれているので最新版をダウンロードしてみてください。

変換方法
  1. コマンド プロンプトを起動します。
  2. コマンド プロンプトウィンドウに bcf2vdb.exe をドラッグアンドドロップします。
    ドラッグアンドドロップすると、コマンドプロンプトにbcf2vdb.exe へのパスが表示されます。
  3. スペース キーを押します。
  4. キャッシュファイル.bcfを保存しているフォルダをドラッグアンドドロップして、エンターキーを押します。.bcfと同じフォルダに.vdbファイルが生成されます。

このツールはファイルの保存先やファイル名のパターン、レンダリングする必要がないチャネルを選択することができるようです。

このツールを使うとLightWaveやCinema 4Dで計算したシミュレーション結果を他のソフトで使用することができるようになります。これは便利ですね!

 

参考

https://forum.jawset.com/viewtopic.php?p=6278#p6278

Tips

modoのテクスチャリプリケータ

modoにはアイテムをメッシュの頂点に複製する「リプリケータ」という機能がありますが、テクスチャ版の「テクスチャリプリケータ」という機能が便利なので紹介したいと思います。

テクスチャリプリケータ はアイテムの頂点にテクスチャを配置することで、模様を作ったりテクスチャのタイリングを目立たなくしたりに使える機能です。

画像だけでなくプロシージャルテクスチャにも使用する事ができます。ノイズテクスチャを使用すると下の画像のようになります。

Surface Generatorと併用することで、アイテムのメッシュに依存することなくランダムにテクスチャを散布することができます。
modoはプロシージャルテクスチャ機能が豊富なので、ゲーム向けにテクスチャをベイクして活用したいときなんかにも便利に使えると思います。

Gradient レイヤーにはテクスチャリプリケータに関連する設定があります。入力パラメータを「テクスチャパーティクルID」に設定するとランダムな色を設定することができます。

入力パラメータを「ロケータまでの距離」に設定すると、放射状のグラデーションにすることができます。

 

テクスチャリプリケータの面白いのが「パーティクルソース」にParticle Simulationを指定できて、パーティクル特性を利用できることす。例えばパーティクルが「サイズ」が徐々に大きくなるように設定すると、テクスチャリプリケータに反映されます。
下の画像はシェーダーツリーでレイヤーエフェクトを「ディフューズ色」と「バンプ」に設定したものです。

スケマティックも貼っておきます。Particle Operator に「寿命」と「サイズ」を追加して、「寿命」チャンネルを「サイズ」にリンクします。これで個々のパーティクルが発生してから徐々に大きくなるように設定しています。

 

あまり語られることはありませんが、modoのパーティクルはモデリング、レンダリングに次いで強力な機能だと思います。パーティクル機能とテクスチャリプリケータを併用することで、水の波紋、オブジェクトが濡れる表現、文字を書く、など他のソフトでは専用プラグインが必要そうな表現を標準機能だけで作ることができます。

次回はパーティクルとテクスチャリプリケータ使ったエフェクト的な表現について書いてみたいと思います。

Tips

modoでアイテムのスナップ移動

Channel RelationShipで紹介したグリッドにスナップしたように移動する方法で思い出しましたが、演算の「切り上げ」「切り下げ」ノードを使って正数を出力しても同じ表現ができるので、その方法について書いてみます。

「切り上げ」「切り下げ」そのままだと、スナップする間隔が指定できません。
任意の大きさでスナップする計算方法は以下の通りです。

  1. 「位置」÷「スナップする間隔」の値を「切り上げ」ます。これで何マス移動したかを求めます。
  2. 「切り上げ」の出力値を「スナップ間隔」でかけてやります。これでアイテムの位置を求めます。
  3. グループロケータの「SnapSize」と「XYZ」はユーザーチャンネルです。
    「SnapSize」は浮動小数点数タイプのチャンネルで、スナップする間隔を入力します。例えば 1 を入力すると 1m 間隔でスナップします。

ロケータの位置をアセンブリを経由してトーラスの位置に出力すると、トーラスがスナップしながら移動するようなアニメーションになります。

このスナップ計算は以前ゲーム作ろうと思ってマップチップ移動調べたときに、チュートリアル見て覚えました。こういう計算は自分では全く思いつかないので、ゲーム系の解説しているサイトはすごくためになります。

modoのパーティクルはアイテムと同様にモディファイヤで制御することができます。パーティクルに今回作ったスナップ アセンブリを使用すると、パーティクルの位置をスナップさせることができます。

スケマティックはこんな感じです。

トーラスからSurface Emitterを使用して、寿命が1フレームのパーティクルを発生します。
Particle Operatorを使用してパーティクルの「位置」を、Collector / Emitterを使用して別のParticle Simulationに継承します。このときスナップアセンブリを使用して、パーティクルの位置が一定間隔にスナップする設定しました。
右下のParticle Operatorは「寿命」と「サイズ」をChannel RelationShipを使用して、発生後30フレーム経過したら小さくなって消えるようしています。

パーティクルのスナップの処理はレゴ風エフェクトに使えないか試したのですが、パーティクルの発生数が多いと同じ座標に複数のパーティクルを重なった状態になって使えませんでした。パーティクル制御の参考になるかと思ったので失敗例として公開しておきます。

アイテムとパーティクルの両方で同じアセンブリが使えるのは、機能ごとに似たような別の仕組みを覚え直す必要がなくてとても便利ですね。

CG News

VECmap tools リリース

ベクターマップを使用してパーティクルを制御するためのツールセットのようです。楽しそう!
価格は25.00€
http://hocuspocus-studio.fr/tools/product/vecmap-tools/

特徴 
  • メッシュペイント
  • ブラシサイズの変更:CTRL + SHIFTキー
  • ブラシ不透明度
  • ブラシのブラー変更
  • ブラシストロークの方向にベクトルペイント
  • 引き込み/拒絶 オプション
  • 元に戻す、やり直し、リセットオプション
  • 削除ブラシ:ALTキー
  • 直線ブラシ:SHIFTキー
  • マップサイズ変更
  • 保存/ロード マップ

Pflow モード

  • ベクトルマップを読み込むための2つの新しいデータプリセット
  • ベクトルマップから速度を設定
  • サーフェース スティック
  • マップ上のパーティクルの速度を変更します。
  • ベクトルからの回転

UVモード

  • ベクトルマップに沿ったUVの変形をシミュレートする新しいモディファイヤ、またはメッシュ変形をシミュレート

これはスクリプトモディファイヤでうまく動作しますが、ハイメッシュには注意が必要です。シミュレーションには時間がかかります。ハイメッシュにベクトル線を表示しようとすると、3dsmaxが遅くなることがあります(低解像度メッシュにマップをペイントし、シミュレートするために解像度を上げてください)

Vrayファーモード

  • Fur Initial directionとBend Directionを駆動するためにマップペイント
Tips

modoのスケルトンをダイナミクスで動かす方法

スケルトンによる変形と物理演算を併用する方法について書いてみます。
結論から言うとそれっぽく動くけど、スケルトンのフリップを回避できませんでした。用途によっては使えるかもしれないので問題点を含め手順を書いておきます。

今回試した方法はソフトボディ計算したメッシュに、スケルトンを「ポリゴンの位置」「ポリゴンの法線」コンストレイントする方法です。

作成手順です。

  1. スケルトン、バインド済みのメッシュ、ソフトボディ計算用のメッシュを準備します。
    ソフトボディはあらかじめ「シミュレーションを演算」でキャッシュを作成しています。
  2. セットアップモードをONにして、スケルトン、メッシュの順に選択して「ポリゴンの位置」コンストレイントを適用します。このとき補正オプションはONです。
  3. 同じ要領で「ポリゴンの法線」コンストレイントを適用します。
    「ポリゴンの位置」コンストレイントは位置をポリゴンにくっつけてくれますが、スケルトンに回転の情報は伝わりません。「ポリゴンの法線」コンストレイントを使用することで位置と回転をスケルトンに与えています。
  4. セットアップモードをOFFにしてアニメーションを再生すると、スケルトンによってバインドしたメッシュが変形します。
    ここでスケルトンは動くのにバインドしたメッシュが変形しない場合は、シーンを「保存」した後に「ファイル / 復帰 」を使用してシーンをリロードすると正しく動くようになります。おそらくダイナミクスのキャッシュとデフォーマの評価順に問題があって、シーンロード時にだけ正しく動作してる気がします。

一見それっぽく動いてる用に見えますが、よく見るとスケルトンがフリップしてるのがわかります。ソフトボディの計算でポリゴンがゆがんでるのが原因だと思いますが、ソフトボディでポリゴンを安定させるのは大変な気がします。

ポリゴンにスケルトンをコンストレイントする方法はスカートのように厚みのないメッシュに向いてると思います。厚みのあるモデルはチェーンの作り方のように、パスコンストレイントしたカーブに「ダイナミックカーブ」を使用すると、メッシュの「半径グラディエント」を衝突判定に使用することができるので便利かも知れません。

 

スケルトンとダイナミクスの問題点

modoのダイナミクスはメッシュかカーブがないと衝突判定の範囲を制御できません。スケルトンに「アクティブリジッドボディ」を適用して「衝突実行」をONにすると物理計算はできますが、コリジョンサイズが 1m 固定になってしまいます。
どこかでコリジョンサイズを変更できれば、ピンやスプリングコンストレイントを使ってスケルトンを物理計算できるようになる気がします。下の画像はシーン全体を1mのコリジョンにあわせたものです。

スケルトンを使うとアニメーションをベイクできるので、他のソフトにモーションを出力できるというメリットがあります。modo内で完結するならラップデフォーマのケージメッシュにソフトボディを適用する方法が手軽かもしれません。

CG News

MOOTZOID プラグインがフリー化

Softimage用のプラグインメーカーとして有名だった MOOTZ OID が、プラグインを全てフリー公開してサポートを終了したようです。emReader、emPolygonizer5はmodo用のプラグインもあります。
http://www.mootzoid.com/plugin

ダウンロードしたファイルは、フォルダごと以下のディレクトリにコピーすると使えるようになります。

  • C:\Users\(ユーザー名)\AppData\Roaming\Luxology\Kits
emPolygonizer5

emPolygonizerは「メッシャー」プラグインです。Realflow で計算されたパーティクルをメッシュ化するために使用します。最近ではOpenVDBにメッシュ化する機能がありますが、emPolygonizerは色々設定があるので細かな調整ができるかもしれません。

 

emReader

emReaderはキャッシュされたジオメトリシーケンスを読み込むプラグインです。
メッシュ入りの Realflow フォーマットやobjシーケンスをロードすることができます。modo標準の Realflow Particle ノードではメッシュに対応していないので、Realflowユーザーには朗報かもしれません。といっても最近はAlembicが使えるのかな。