FC2ブログ

[3ds max PFlow] Data Operatorで特定のパーティクルを削除する

PFlowのData Operatorの勉強中です。
今回は、特定のパーティクルを削除してみたいと思います。


花びらが舞うようなシーンを作っていたとします。

20140724_01_rendered_petal.jpg

あるフレームでパーティクルがキャラの顔に重なって邪魔になることがよくあります。
例えば、丸で囲んだところのように。

20140724_02_target_particle.jpg

こうしたときにData Operatorでこのパーティクルだけを削除することができます。
まずData OperatorをEventに追加します。

20140724_03_add_dataoperator.jpg

あくまでも一例ですが、Data Operator上で以下のようにサブオペレータを接続してみました。
パーティクルのIDを指定して、Amount Changeで削除するというような流れになっています。

20140724_04_dataoperator.jpg

  1. パーティクルのIDを出力します。
    Input Standardサブオペレータで出力する内容をID:Birth Indexにします。これでパーティクル毎にIDがIntegerで出力されます。
  2. IDをオフセットするために1を出力します。
    ID番号について、Pflow上ではIDが1から始まるのですが、Data Operator上では0から始まります。1つずれてしまっているので、1を足してオフセットします。数字を合わせた方がIDを指定しやすいのでこのようにしています。ScalarサブオペレータでOutputTypeをIntegerにし、valueを1にします。
  3. IDをオフセットします。
    Functionサブオペレータで入力を2つともIntegerにします。FunctionをAddition X+Yにします。PFlowのIDに合うように、Birth Indexに1を足すことでオフセットします。
  4. PFlowのIDを指定します。
    消したいパーティクルのIDをここで指定します。IDの確認方法は後述します。ScalarサブオペレータでOutputTypeをIntegerにしています。valueにIDを入力します。
  5. パーティクルIDと指定したID番号を比較します。
    IDを比較して一致していれば、trueが出力されるようにしています。一致していないときは、falseが出力されます。ConditionサブオペレータのInputTypeをIntegerにします。入力が一致しているかどうか判定するときは、Output True If Input ValueをIs Equal To Value Aにします。
  6. Trueが入力されたときに、パーティクルを削除します。
    Amount ChangeサブオペレータでTypeをDeleteにします。IDが一致しているときはtrueが入力されますので、ラジオボタンはTrue To Deleteを選択してください。これでIDが一致したパーティクルは削除されます。

パーティクルIDを確認する方法ですが、DisplayオペレータでShow Particle IDsにチェックを入れてください。

20140724_05_particleIDs.jpg

今回の例では273番が邪魔なようでした。

20140724_06_checkID.jpg

そして、そのIDをData Operatorで入力すると削除されます。

20140724_07_deleted.jpg

以上です。

Data Operatorについては、Zで行こう!さんやmemlogさんを参考にさせていただいています。いつもありがとうございます。
日本語の情報がほとんどないのが辛いところですね。そのため、ハードルが高いといいますか。

関連記事
スポンサーサイト



テーマ: 3DCG - ジャンル: コンピュータ

Comment

Post comment

Secret