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

パーティクルによる衝突でメッシュの表面に凹凸をつけるには


https://www.youtube.com/watch?v=UBRkNbHRuGU

今回はパーティクルがメッシュと衝突することで、メッシュの表面に凹凸をつける方法をご紹介します。このビデオはpixelfondueのサイトで公開されているビデオをもとに作成されています。

サンプルではパーティクルが平面のモデルと衝突すると、衝突した箇所に対して凹みが表現されています。これをバージョン14.0で追加されたウェイトを追加するメッシュオペレーションを利用して再現してみます。

まずは新規シーンから平面のメッシュを作成します。メッシュに対して、凹みの表現を行いますので、あらかじめセグメントは細かく切っておきましょう。Shift+Dで再分割を繰り返したら、マテリアルを作成します。

このメッシュの表面に凹凸をつけるには、テクスチャリプリケータの機能を使いますので、テクスチャリプリケータの動作について確認しておきましょう。テクスチャリプリケータの機能とは、テクスチャをパーティクルの位置に従って、配置してくれる機能です。例えば、この平面のマテリアルに対し、レイヤー追加処理カテゴリからConstantというテクスチャを追加してみます。これは色を付けるためだけのテクスチャですが、テクスチャロケータのタブを見てみると、パーティクルソースというプロパティが用意されています。ここで指定するパーティクルの位置に、このテクスチャを配置するということになります。テクスチャレイヤータブののプロパティに適当な色を設定したら、頂点モードへと切り替え、この平面の頂点をいくつか選択し、空のメッシュレイヤーへとコピーします。この頂点をコピーしたレイヤーを、パーティクルソースとして指定してみましょう。メッシュレイヤーの名前はParticleへと変更し、Constantパーティクルソースとして指定してみます。プレビューウィンドウで確認してみましょう。

そうすると、パーティクルつまりコピーした頂点の位置に、Constantテクスチャで指定した色が表示されているのがわかります。パーティクルソースでパーティクルを指定すると、様々なプロパティが利用できるようになりますので、それらで配置するテクスチャの具合を調整します。これがテクスチャリプリケータの機能となりますが、この機能を利用して、メッシュオペレーションでウェイトを設定します。

ではいったんConstantテクスチャを削除しましょう。まずは平面のメッシュレイヤーを選択し、メッシュオペレーションタブから、Set Weightを追加します。適切なマップの名称を設定し、作成されたマップを確認します。デフォルトの状態では、100%が全体に対して適用されますので、これを先ほど頂点をコピーして作成したParticleレイヤーで指定する箇所のみに、ウェイトを設定するようにしてみます。Set Weightを展開し、Tool Pipe > (ToolPipeを追加)から新規フォールオフTexture Falloffを追加します。さらに追加したTexture Falloffを展開し、テクスチャロケータ(テクスチャロケータを追加)から新規処理Constantを追加します。今回、このConstantテクスチャではウェイトの値をコントロールしますので、Constantを0%に設定しておきます。ここで先ほどのようにパーティクルソースを指定するわけですが、今回はスケマティックで指定してみましょう。スケマティックビューを表示し、Planeを追加します。そこからSet Weightノード、Texture Falloff、Constant、Constant (Texture)という接続されているノードを表示させてみると、Constant (Texture)ノードにはパーティクルソースが用意されているのがわかりますので、ここにParticleメッシュレイヤーを追加して接続させてみます。そうすると、先ほどと同じような感じで今度は色ではなく、ウェイトが設定されたのがわかります。このウェイトの設定を逆転させたい場合、つまりパーティクルの部分がウェイトが100%に指定したい場合には、Texture Falloffノードを選択し、プロパティからイージンググラディエントの値を0~100ではなく、100~0へと設定します。そうすることで、パーティクルの箇所に対してウェイトが設定される状態となります。やはりここでもパーティクルのサイズやフォールオフのバイアス、増幅値などによって、ウェイトのかかり具合を調整することができます。

ここまでは頂点をもとにしたパーティクル、点群で説明を加えてきましたが、実際に放射するパーティクルを発生させてみましょう。頂点をコピーして作成したParticleレイヤーは削除し、新たにパーティクルを追加します。アイテム追加パーティクルから放射状にパーティクルを発生させるRadial Emitterを追加します。サイズを調整し、平面より上のほうへと配置しなおしたら、Particle Simulation重力使用をオンにし、加速度を-4ぐらいにしてシミュレーションさせてみます。

ではこのパーティクルを、Constantのテクスチャリプリケータパーティクルソースとして指定してみます。Particle Simulationをスケマティックビューへと追加し、Constant (Texture)ノードのパーティクルソースへと接続したら、シミュレーションをキャッシュし、再生してみます。タイムラインをスクラブしてみると、パーティクルが平面と重なり合う瞬間、ウェイトが設定されているのがわかります。

これでもよいのですが、このパーティクルが平面と接したときに、通り抜けることなく、平面上にとどまるように設定してみましょう。まず平面上にとどまるわけですから、平面はスタティックタイプのダイナミクスオブジェクトへと設定する必要があります。平面を選択したら、セットアップのパレットからダイナミクスタブへと移りスタティックを適用します。次にParticle Simulationを選択したら、パーティクルのタブからダイナミックコライダーを適用します。再度、シミュレーションをキャッシュし確認してみると、パーティクルが平面と衝突し、そこからウェイトが広がっていく様子が確認できます。

ではこの設定したウェイトを使って、表面に凹凸をつけてみます。平面のメッシュを選択したら、さらにオペレータ追加デフォームPushを追加します。これだけだと、Pushの距離を指定しても、平面全体が動くようになってしまい、凹凸を作ることはできません。凹凸は、パーティクルと衝突することで生成されるウェイトマップでコントロールしたいので、Pushを展開し、ToolPipe (ToolPipeを追加)から新規フォールオフWeight Map Falloffを追加し、作成したおいたウェイトマップを指定します。そうすると、平面がパーティクルと衝突した衝撃で、表面に凸凹ができるような表現が可能になります。

2020年5月1日