[3ds max PFlow] Data Operatorでオブジェクトの色をパーティクルに焼き付ける
今回もData Operatorです。
オブジェクトの色を拾って、パーティクルに色を付ける方法をご紹介します。
Data Operatorではオペレータが用意されているので割りと簡単にできるようになっていました。
例としてPlaneを配置し、そこにパーティクルを敷き詰めておきます。 パーティクルを並べるところの解説は今回ありません。
Planeには、素材辞典の画像を貼り付けました。ここから色を拾おうと思います。 色が分かりやすいかと思いまして。
結果からお見せしますが、パーティクルに色を焼き付けるとこのようになります。この方法を簡単にですが、解説したいと思います。
まず、Data OperatorとMaterial Staticをイベントに追加します。 Data Operator 001はパーティクルを並べるためのものです。ここではData Operator 002を追加しました。
(後でも構わないですが)今回は先にパーティクルにアサインするマテリアルを準備します。標準マテリアルを作成して、Diffuse ColorにVertex Colorマップをアサインしています。3ds maxでパーティクルに色を渡してレンダリングするには、Vertex Colorとして色を出力して、それをマップとして貼り付けるという手順が必要になります。
Material Static上で作成したマテリアルを選択します。 これでパーティクルをレンダリングしたときに、Vertex Colorが参照されます。
- Select Objectサブオペレータで、参照するオブジェクトを選択します。
このサブオペレータで参照するオブジェクトを指定します。詳しくはちょっと分からなかったのですが、ここからオブジェクト名とインデックスが出力されます。Select Objectは、複数のオブジェクトを選択することもできるので、インデックス付きなようです。 - Closet Point By Surfaceで各パーティクルに最も近いサーフェイスの位置が出力されます。
Geometoryサブオペレータは、様々な種類の値を出力できる便利なオペレータです。ここでは、Object PropertyでCloset Point By Surfaceを選択します。各パーティクルに最も近いサーフェイス上のポイント(位置)が出力されます。サーフェイス上のの位置はオブジェクトのローカル座標のようです。ただし、出力される値のデータタイプはPairという種類なので、ローカル座標以外のパラメータと一緒に出力されています。 - サーフェイス上の色が出力されます。
ここもGeometoryサブオペレータです。Object PropertyをPoint Colorにします。Point Colorでは、データタイプとしてオレンジ色のObjectとピンク色のPairの入力を求められます。それぞれ入力されると、サーフェイス上の色が出力されます。 - パーティクルが作成されたときにのみ評価されるようタイミングを指定します。
Output Standard(Vertex Color)の右上の下三角マークは、フィルター入力と言います。サブオペレータが評価されるとき、条件をつけるために使われます。例えば、パーティクルIDの何番から何番だけに適用する、などのような使い方です。ここでは、パーティクルが発生したとき(イベントが動き始めたとき?)にだけ評価されるように、フィルターに接続しています。Input Standardサブオペレータで、New In Eventを選択してください。
ここでのポイントとしては、パーティクル発生時に限定しているので、以降アニメーションして、パーティクルと参照しているオブジェクトの位置関係が変わっても、Vertex Colorは変わりません。逆に言えば、この接続を外してしまえば、位置関係が変われば色も変わる、というように設定することもできます。 (詳細な検証はしていないのですが) - 取得したPoint Colorを各パーティクルのVertex Colorとして出力します。
各パーティクルにVertex Colorを割り当てます。
そして、設定が済んでしまえば、パーティクルの数や配置を変更しても次のように反映されます。
以上です。