thinkingParticles 2: 放物線とパーティクルグループの変更

パーティクルグループの準備

今回は二つのパーティクルグループを扱うので,最初にグループを二つ作成し,redとblueという名前にしておきます.それぞれのグループのカラーを赤と青に変えておきます.

パーティクルを斜め上に真っすぐ飛ばす

ダイナミックセットを作成して名前をGererateに変更します.中にGeneratorのBornノードとOperatorsのStandardからVelocityノードを作成します.Bornはデフォルトで原点からパーティクルを発生しますが,まだパーティクルはその場にとどまるだけなので,Velocityノードのパーティクルに接続します.Velocityは速さと向きを定義できます.Speedを100,Directionを0,1,1とするとちょうど斜め上にパーティクルが飛んでいきます.また,BornノードはパーティクルグループがAllになっているので,redに変更しておきます.赤いパーティクルが出てきますね.
20190128-1

重力をつくる

重力はMAXのフォースから重力を下向きに作成して,GravityとTPをスペースワープでバインドを行います.重力の強度は適当に設定します.
新規ダイナミックセットを作成して名前をForceにして,中にAllグループと,StdForceノードを作成し,Particleポートを繋ぎます.StdForceはスペースワープにバインドしたのでDeactive ListにGravityが追加されているはずです.これをActiveにすれば重力がAllグループ,つまりすべてのパーティクルに作用します.
redグループのパーティクルが放物線を描いて落ちていく.
20190128-2

パーティクルグループを変える

今回はパーティクルグループをredグループからblurグループへ途中で変えてみます.新規ダイナミックセットを作成して名前をChange_groupに変更します.
この中にredグループ,Groupノード,PatricleAgeノードを作成しておきます.O redからO GroupへParticleを接続します.O GroupのGroupをblueに変更します.
さらにParticleAgeのParticleポートへO redを接続し,OutポートからO GroupのONポートへ接続します.この時,PatricleAgeのパラメータはRelativeにしてTime1を50,Time2を100としておきます.Relativeはスカラー値なので50にした場合,パーティクル寿命のちょうど中間地点でTrueが出力されるので,そこでblueグループのパーティクルに変更されます.Absoluteだと時間のようです.
パーティクルが途中でredからblueに変わりました.
20190128-3

風を追加してTurbulenceを入れる

重力と同じ手順でフォースの風を追加,バインド,Activateします.Turbulenceの数値を少しあげて乱流をつくりました.他,重力やBornのパーティクル数も変えてみます.
20190128-4

red,blueグループのシェイプも作ってみる

StdShapeは前回使ったので,今回は実際のジオメトリをパーティクルとして飛ばしてみます.シーンの中にキューブと球体を作っておきます.
新規ダイナミックセットを作成し,名前をShapeにします.中にred,blueのグループノードを作ります.さらにOperatorsカテゴリからShape→GeomInstanceノードを二つ作成して,それぞれのグループのParticleポートを接続しておきます.GeomInstanceのパラメータにPick Objectを使ってシーン内のキューブと球体を各GeomInstanceノードに設定しておけば,redはキューブ,blueは球体といった具体でシェイプを定義できます.途中でグループが変わるとメッシュも入れ替わります.
20190128-5

thinkingParticles 1: パーティクルの出し方

3ds MAX用プラグインのthinkingParticlesの学習記録を残しておこうかと思います.

thinkingParticlesとは

thinkingParticles(以下TPとする)は3ds MAX用のパーティクルプラグインです.パーティクルは粒子のことですが,3DCGでいうパーティクルは意味合いがかなり広くなり,粒子を出すだけでなく,多数のオブジェクトを効率よく動かす方法として用いられます.
TPはその中でもプロシージャラルワークフローにより,パーティクルの動きを制御することができます.
また,プロシージャラルにより多くの動作を自動化させることも可能です.例えば他のオブジェクトにトリガーを仕込み,オンになるとパーティクルが発生する,またそのパーティクルがさらに他のオブジェクトのトリガーとなる,などということも可能です.自動化されることにより,アニメーションの修正の効率もよくなるというわけです.
というようなプラグインですが,簡単に使えるような代物でもなく,かなり勉強が必要だなと思います.私も全くの初心者でこれからしっかり勉強していこうかと思ったわけですが,備忘録として記録をのこしておこうかと思います.
MAX,TPに関しては全くの初心者なのでいろいろ間違いを書いてしまうと思いますが,この点はご勘弁ください.
ちなみにこの記事ではパーティクルを出すだけで終わってますが,TPは映像で広く使われていまして,極めていけばこんなものまで出来てしまうという代物ですね.シン・ゴジラのビル破壊にも使われているのは有名な話かと.


TPオブジェクトを作成する

最初にTP用インターフェイスを使うためにThinkingオブジェクトを作成します.これはParticles SystemのThinkingから作成します.シーンにTPオブジェクトを作成し,選択したら修正パネルからThinkingのプロパティか,Shift+Alt+Pでインターフェイスを開きます.
20190127-1 20190127-2
TPのインターフェイスを開く.このインターフェイスでパーティクルを作ったりアニメーションを作っていくことになります.
20190127-3

TPはグループとダイナミックセットを組みあわせて使う

またパーティクルは出ません.
TPはパーティクルグループとそのアニメーションを作るダイナミックセットを作成してくことになります.
パーティクルグループはデフォルトでAllがあり,これはすべてのパーティクルグループとなります.TPはグループから別のグループにアニメーションを変化させながらヒストリを作成していくようなイメージでしょうか.複数のグループは親子関係にすることができます.
パーティクルグループに新規グループを作成し,Particleと名前をつけておきます.パーティクルグループは分かりやすいようにカラーも変えておいた方が良いですね.ダイナミックセットも新規に作成し,Generateと名前をつけます.
GenerateにPosition Bornを作成してアニメーションを再生すれば,原点からパーティクルが出現します.TPの位置ではないんですね.Position BornのGroupがAllになっていたら,Allグループのパーティクルとなり,GroupをParticleグループに変更すれば,そのパーティクルはParticleグループのものとなります.カラーを変えておけばビューポートの色も変わりますね.
20190127-4

StdShapeノードを使ってみる

パーティクルは出ましたが,まだレンダリングしても何も出ません.この時点ではパーティクルのシェイプを定義していないためです.
シンプルなキューブにしてみましょう.新規ダイナミックセットを作成してShapeという名前にして,中にStdShapeノードを作成します.ここでGroupノードからParticleグループノードを作成し,パーティクルをStdShapeノードのパーティクルに渡します.StdShapeパラメータのシェイプタイプをCubeに変更すればParticleグループからキューブが出てきます.
20190127-5

フォースを使って動きをつける

風や重力などはMAXのフォースを使うことができます.風を使いたい場合は,先に風オブジェクトを作成して,さらに風とTPオブジェクトをスペースワープにバインドをしておきます.
TPインターフェイスを開き,またダイナミックセットを作成し名前をForceとします.ダイナミックセットは一つの中で作っても良いのですが,役割ごとに分けておくのが良いみたいです.複雑になってきた時に管理しやすいのだと思います.
Forceの中にDinamicsからStdForceノードを作成し,こちらも同じようにParticleグループノードを作成し接続します.しかしまだ風は動作しません.
StdForceノードを選択すると,先にスペースワープにバインドをしたのでDeactie ListにWindがリストされていますね.Windを選択してActivateすると風が機能します.
20190127-6