スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[3ds max PFlow] Data OperatorでSpawnしてFumeFXのSourceにする

引き続きData Operatorです。

前回の記事でSpeedからParticle Scaleを調整しましたが、これをFumeFXでそのまま利用することはできませんでした。 お恥ずかしい・・・。以前仕事でダメだったことがあるような気はしていたのですがすっかり忘れてしまったので、またあれこれ試してみましたが以下の状況でダメでした。
  1.PFlow-ABurnオペレータからParticle SourceでFumeFXのエミッターにしたものの、Scaleの値は無視されたので活かせず。
  2.MesherでPFlowパーティクルをメッシュに変換し、Object Sourceでエミッターにしたものの以下の画像ようにスケール0の部分からも煙が。
20140809_01_mistake.jpg

TPがあれば何か方法があるんでしょうか・・・? 分かりません。
とりあえず、前回の手法はここで諦めて、SpawnされたパーティクルをSourceにする方法を試しました。
結果は以下の動画のようになりました。

PFlowの中身は以下のように変わりました。

  1. Position Objectでキャラの表面にパーティクルを配置します。ここは前回記事と同じです。Lock On Emitter, Animated Shape, Subframe Samplingのチェックを入れました。
  2. Data Operatorでは、しきい値以上のスピードが出ているパーティクルから、新たにパーティクルを発生させるようにしています。
  3. Data Testでは、Spawnしたパーティクルのみを判定して、それを別のEventに送っています。(ここでは分けていますが、2のData Operatorの内容をData Testにまとめてしまうこともできます)
  4. Event 002に送られたパーティクルは、Spawn時のSpeedで飛び散ってしまうのでDragで減速するようにしました。
  5. パーティクルの寿命を設定しました。パーティクルが存在し続けるとFumeFXで煙が出続けてしまうので適当なところで消えるようにしました。
  6. このEvent上のパーティクルだけをFumeFXのSourceとして使いたいので、PFlow-ABurnオペレータを置きます。このオペレータを置くと、FumeFXのParticle Sourceから特定のEventのパーティクルだけをSourceにすることができます。

    20140809_02_PFlow.jpg

次にData Operatorの内容を見ていきます。(前回の記事と重複するところもあります)

  1. まずは、Speedの値が小さくて、数値をビューポートに表示したときに見にくかったので、1つ目のFunctionで10倍にしました。(ここは無くてもOK)
  2. Speedのしきい値を1.3にして、Conditionで1.3以上のパーティクルはtrueを返すようにしました。Spawnするパーティクルの判定に使います。
  3. Output Newを1つ作っておきます。Is Spawnという名前にしていますが、これをカスタムチャンネルとして利用します。 (マニュアルのAmount Changeのページに載っていた手法を応用しています)
  4. Amount ChangeのタイプをSpawnにし、Integer As Additiveにします。Conditionが下三角形に接続させていますが、これはフィルターと言います。接続された条件に合う時だけSpawnが行われるようになります。
  5. Scalarが値1で接続されていますが、これでSpawnされたときに条件にあったパーティクルから1つだけパーティクルを発生せます。
  6. Amount ChangeのIs Current Spawnにチェックを入れ、ここに先に作っておいたIs Spawnというカスタムチャンネルを割り当てます。こうすることで、Spawnで発生したパーティクルには、Is SpawnというチャンネルにTrueが付与されます。

20140809_03_DataOperator.jpg

Data Operatorでは、実行順序、優先順序というものがあります。Outputするデータについて出力順を設定することなのですが、Data Operatorを理解する上でとても重要な仕組みです。画像の例では、Is Spawnの実行順を1に、Spawn Additiveの実行順を2にしています。Is SpawnをSpawn Additiveで利用しているので、このような順序にしています。Data Operatorでは先にOutputしたデータを、そのまま続けて再利用するということが頻繁に起こりますが、実行・優先順序がきちんとしていないと正しいデータを受け取れません。

と、ここまで説明しておいてなんですが、上の画像の例では実行順が逆でも問題は生じませんでした。Is Spawnで入力データがないので、順序が逆でも値が更新されなかったためと思われます。

続いて、Data Testです。
Output TestサブオペレータではTrueかFalseの値を入力し、Trueの場合は別のEventに送られます。パーティクルには先ほどIs Spawnというカスタムチャンネルが付与されています。SpawnされたパーティクルはTrueになっているので、Event 002に送られます。それ以外はfalse(扱い?)になるので、元のEventに留まります。
20140809_04_DataTest.jpg

Event 002に送られたパーティクルは、減速しつつ8Fで消えるように設定され、FumeFXのParticle Sourceとして利用しています。動画では、赤いパーティクルがPosition Objectで配置されたパーティクル、Ticks表示されている水色のパーティクルがSpawnされたパーティクルです。

以上です。

スポンサーサイト

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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。