「パーティクル色の使い方」の応用で、パーティクルの速度でアイテムの色を変える方法について書いてみたいと思います。
modoのグラディエントレイヤーは様々な「入力パラメータ」を使用して色を設定することができます。「パーティクルエージ」「パーティクルID」「パーティクル速度」などパーティクル情報を使用して色を設定することができますが、使用可能なアイテムが「ブロブ」「スプライト」「ボリューム」に限定されています。
このためReplicatorを使用して複製したメッシュアイテムを、グラディエントの「パーティクル速度」を使用して色を変えることができません。
Replicatorを「パーティクル速度」に応じて色を変えたい場合は、Particle OperatorとShader Inputsを使用します。
■ サンプルファイル
スケマティックはこんな感じです。
Particle Operatorに「速度」と「色」の特性を追加し、「速度」を「色R」に接続します。
「速度」はXYZ軸に分かれてるため、速度XYZを加算してどの方向に飛んでも単一の速度になるようにします。このとき速度を絶対値に変換してから加算します。速度はマイナス値が入るようなのでそのまま加算しても意図した通りの結果にならないようです。
次にShader Inputsを追加し「パーティクル色 R」をGradientの「in Val」に接続します。こうすることで、Gradientの「入力パラメータ」に「パーティクル速度」を設定したことになります。後は通常通りGradientの色を設定すれば、パーティクル速度に応じてGradientの色が反映されます。
この方法を使えば速度以外のパーティクル特性を使用して色を設定することができるので、表現力が上がると思います。
標準機能として「パーティクル速度」に対応してるスプライトの画像と比較すると、同じように色が変化してるのを確認できます。
水しぶきの表現に使えそう。
同様の方法で「衝突カウント」を使用すると、コリジョンと衝突した場合に光るような表現もできます。
modoにパーティクルが搭載された初期の頃はGradientの「パーティクルエイジ」を使用してReplicatorに色を設定することが出来ませんでした。このため「パーティクルエイジ」を「パーティクルID」に接続するテクニックが紹介されてました。
この方法はスケマティックがシンプルでいいのですが、残念ながら速度を入力したときに意図した通りに動作しませんでした。速度が遅くなった場合に色がループしてしまいます。
■ サンプルファイル
パーティクルとReplicatorは併用することが多いと思います。今回紹介したようにShader Inputsを使えばReplicatorに色を設定することはできますが、グラディエントの「パーティクル速度」をそのまま使えた方が便利だと思うので、将来的に対応して欲しいですね。