TP&FumeImageBasedColorSmokeR&D v001 from Kei Yoneoka on Vimeo.
久々のブログ更新です。今回はTPとFume3.xの機能を組み合わせてエミッターの発生源のテクスチャーの色を基に煙の色をつける方法を解説してみたいと思います。内容的には中級ぐらいのものだと思います。
現実世界の煙は場合によっては単色ではない場合が結構あるのでそういう場合は発生源のコンディションに応じて煙にも色のバリエーションが着くべきだと思います。それがよりリアルな結果を生むことが多いです。
そもそもテクスチャを張ったオブジェクトから色付きの煙を出すのは非常に簡単です。でもこれだとプロシージャルなセッティングができないので効率的なエフェクトの仕組みを作るのには向いていません。TPだとそこら辺は問題なく出来るのでやはりTPをエフェクトのワークフローに組み込むことはかなり大きなアドバンテージがあるというわけです。今回はテクスチャを張った板ポリからパーティクルを発生させそこからSmokeをシミュレーションするというシンプルなシーンの設定にしています。

ざっくりと流れを説明すると、まず
1、FumeSim用パーティクルに対して、エミットされた場所のテクスチャのカラー値をData Channelに保存する。
2、FumeのParticle sorceのcolorにTPのカラーデータを設定する。
これだけです。
では1の段階から詳しく解説して行きましょう。TPのノードは以下のようになっています。パッと見非常にシンプルです。

まずはParticle Source用のグループであるPrtグループを作成します。作成したグループを選択するとUIの右端にData Channelの欄があるのが分かります。ここからFumeに渡すColor値のデータを持ったData Channelを作る準備をするわけです。
プルダウンメニューの中にFloat,Integer,Point3,,,と色々ありますが、今回はColorを選択しREM.の横の空欄にわかり易い名前をつけてあげます。今回はcolで。諸々設定が出来たらADDをクリックすることでData channelが生成されます。デフォルトで最初のData ChannelはCH0と最初に表記されています。このData Channelの中に後ほどパーティクルのカラー情報をインプットしてあげます。
Nodeヘルパーで地面の板ポリをピックしてSurfacePosのNodeに繋げます。そこから得た板ポリ上のポジションをPositionノードを使って発生したパーティクルに与えてあげます。発生したパーティクルの位置がテクスチャのどの位置に当たるのかは板ぽりのUV座標を参照しなければいけないのですが、TexMapColorヘルパーを使って処理します。SurfacePosヘルパーからUVWとPositionをそれぞれ該当のインプットに繋いであげます。マップスロットに板ポリに貼ってあるテクスチャを登録します。PreviewOnにチェックを入れるとどのテクスチャを使っているのかプレビューができます。
その後ColorアウトプットをStdShapeノードのVertexColorとDataChannelノードのColorに繋いであげます。前述のイメージの中で間にColorヘルパーをかましてますがこれは機能してないので無視して構いません。
さてここでDataChannelノードが出てきましたが、現在の設定では0のスロットを使うということになっています。これは「PositionBornで発生したPrtグループのパーティクルに対してTexMapColorで得たColor値をCH0のDataChannelつまりcolと名付けたチャンネルに保存します。」という意味だと考えてください。こうすることでPrtグループのパーティクルにテクスチャのカラーを保存することが出来ました。
StdShape周りの解説は後述するので先にFumeのセッティングに行きたいと思います。
まずはParticle Sourceの設定です。使用するTPをピックアップしたらColorに行きカラーバーの横にあるデフォルトでPA(Particle Ageの略)と書かれているボタンを右クリックします。するとカラーを決定するための色々なアトリビュートの選択肢が現れます。ここではTP Color Dataを選択します。選択したらボタンの行事がTCに変わります。その後そのボタンをクリックするとどのカラーチャンネルを使うか設定する項目が出てきます。ここではTPで設定したcolのData Channelを使いたいのでcolと表記します。これでParticle Sourceの設定が完了しました。

次はSmokeのカラーの設定ですRendカテゴリーからSmokeへ行きColor SourceをデフォルトのGradientからGridに変更します。

次にSimカテゴリー内でのセッティングです。Colorにチェックを入れてColorもシミュレーションするように設定します。その後Master Effectorの横の四角を右クリックしてEnableにして使用可能にし、そこをクリックしてTPのカラーのチャンネル名のcolを表記します。これで全て完了です。

後はFumeのシミュレーションをかければ板ポリのテクスチャの色に応じてSmokeに色が着いているはずです。
一段も二段も上の表現力を得るためにも是非このテクニックやコンセプトをマスターするのをお勧めします。
(StdShape周りの解説は忙しいのでまた後ほどー。)