Warning: Use of undefined constant ace - assumed 'ace' (this will throw an Error in a future version of PHP) in /home/luxology/www/web_new/tipsblog/wp-content/plugins/advanced-category-excluder/advanced-category-excluder.php on line 310

Warning: Use of undefined constant ace - assumed 'ace' (this will throw an Error in a future version of PHP) in /home/luxology/www/web_new/tipsblog/wp-content/plugins/advanced-category-excluder/advanced-category-excluder.php on line 310
コンストレイントを使ったパーティクルの吸着方法 — MODO 機能紹介・チップスサイト



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

コンストレイントを使ったパーティクルの吸着方法

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

MODO 901で搭載されたパーティクルコンストレイントの機能を使用すると、パーティクルがメッシュの表面へと吸着するような表現が可能になります。

パーティクルコンストレイントの基本的な機能については「特定のパーティクルの動きにアイテムを合わせるには」をご覧ください。

まずは吸着先となるモデルの表面に、そのジオメトリの表面の位置を取得できるよう、Surface Particle Generatorでパーティクルをちりばめます。さらに、吸着する元となるパーティクルをラディアルエミッターで用意しておきます。これからラディアルエミッターで放射されたパーティクルが、ジオメトリの表面に散りばめられたSurface Particle Generatorへと吸着するようにします。

まず必要となるのがパーティクルのコンストレイントです。追加チャンネルモディファイヤコンストレイントParticle Constraint:Positionを追加します。コンストレイントさせるパーティクルはSurface Particle Generatorですので、そちらを接続しておきます。

次にラディアルエミッターから放射するパーティクルが、Surface Particle Generatorへと吸着、つまりコンストレイントすることになりますので、ラディアルエミッターのパーティクルのID情報が必要となります。パーティクルの様々な情報を取得するためには、パーティクルオペレータを追加します。追加したオペレータに特性としてID(Read Only)を追加し、追加したID(Read Only)をパーティクルコンストレイントのパーティクルIDへと接続します。

さらに、ラディアルエミッターのパーティクルが移動するためには元の位置情報が必要となりますので、特性として位置 (Read Only)を追加します。パーティクルが吸着する先となる位置も必要となりますので、こちらはパーティクルコンストレイントの出力情報を使用します。ただし、この出力情報は行列で出てくるため、行列からベクトルへと変換するために、チャンネルモディファイヤ行列Matrix Vectorを追加し、行列ベクトル化のプロパティで移動にしておきます。

パーティクルが移動するためには、その速度が必要となりますので、これをベクトルの減算で求めるようにします。チャンネルモディファイヤベクトルVector Maths:減算ノードを追加し、Matrix Vectorノードでベクトル化したパーティクルコンストレイントの位置情報から、ラディアルエミッターのパーティクルの位置情報を減算します。これが速度となりますので、パーティクルオペレータの特性から速度を追加し、減算結果を速度へと接続します。

シミュレーションしてみると、パーティクルが吸着するようになりました。この吸着する速度を変えたい場合には、減算結果に対してスケールをかければよいので、追加チャンネルモディファイヤベクトルVector:Multiply By Scalarノードを追加し、減算結果をベクトルへ、出力を速度へと接続しなおし、量の値を調整してみてください。

2015年9月10日