篠島です。
オブジェクトの何かのプロパティを0-1 (0%から100%)の範囲に収めることは重要です。例えばスプラインの長さを0から1で表す。オブジェクトの高さやパーティクルの寿命を0-1で表す。0-1の範囲にあるものはRampによって自分で値を調整できるので便利です。
Fit Range VOPで無理やり0-1の範囲にすることもできますが、ここではスマートに計算して0-1範囲に収めます。
ここでは3つの例を扱いたいと思います。
- スプラインの長さ
- オブジェクトのY座標
- パーティクルの寿命
Hipファイルは以下にUpしました。初心者の方はぜひファイルを見ながら下の説明を読んでください。
0-1.zip
下のようなスプラインがあるとします。
スプラインの場合はポイントの番号を元に0から1の間のアトリビュートを作ります。計算式は以下のとおりです。ポイント番号は0から始まるので、全部のポイントの数から1を引いています。
VOPネットワークを組むと下のようになります。ptnumが現在処理しているポイント番号、numptが全ポイントの数です。IntをIntで割っても答えはIntになります。なのでInteger to Float VOPによって int を float に変換してからDivide VOPによって割り算しています。
Bind VOPによってアトリビュートを出力しています。ここではデバッグ用にratioというアトリビュートを作っています。Geometry Spreadsheetで確認すると、確かに値が0から1になっているのがわかります。
Divide VOPの結果が0から1なので、これをRamp VOPにつなげてRamp TypeをSpline Ramp (float)に変えてカーブにって自由に値を変更できるようにします。そしてその結果をBind VOPによりwidthアトリビュートとして出力します。
もうひとつRamp VOPを作り、今回は色を自由に調整できるようにしています。そしてそれを色情報 Cd に出力します。
実際にレンダリングしてみると下のようになります。実はwidthアトリビュートはMantraでレンダリングする際にラインの太さ情報として自動的に読み込まれて、スプラインに厚みを付けてくれるのです。なのでRamp VOPでカーブを調整することで好きなようにスプラインを加工することが出来ます! もちろん設定した色情報 Cd も自動的にMantraに読み込まらてきちんと色を表示してくれます。
次にオブジェクトの場合を考えてみます。下のようなでこぼこしたオブジェクトがあり、Yの値を元に0-1の値に収めます。この場合はバウンディングボックスを使えば簡単に0から1までの値を得ることが出来ます。
VOPネットワークは下のようになります。Relative to Bounding Box VOPを使い、ポイントの位置 P を繋いでやると、その位置がバウンディングボックスのどこらへんに位置しているのかが0-1の値で出力されます。X、Y、Zの3つの値がまとめて出力されてる(Vector) なので、Vector to Float VOPによってY座標の値だけを取り出します。今回もまたBind VOPによってデバッグ用にratioYアトリビュートとして出力しています。
0-1の範囲の値ができたら後はスプラインの時と同じようにRamp VOPによって色など好きなアトリビュートを調整できます。
次はパーティクルのケースを考えてみます。
パーティクルにはAgeとLifeアトリビュートがあります。Ageとは生まれてからどのくらいの時間がたったか。Lifeはパーティクルの寿命で、パーティクルがLifeの時間分経過したらパーティクルは消滅します。
なのでパーティクルがどれだけ生きたかを0-1で表す式はAge / Life となります。VOPネットワークを組むと下のようになります。Divide VOPでAgeをLifeで割った後、同じくデバッグ用にBind VOPでratioアトリビュートを出力しています。そして同様にRamp VOPで色をパーティクルの年齢によって変えています。さらにComplement VOPにより0-1の値を反転し、1-0に変えています。要は生まれたばかりのパーティクルの値は1、パーティクルが消滅するときは0という事です。これをBind VOPでpscaleアトリビュートとして出力します。
パーティクルにSphereをCopy SOPでコピーします。その際にUse Template Point AttributesをONにすると、pscaleアトリビュートを使ってSphereのスケールを調整してくれます。
コピーした結果が下のようになります。パーティクルが生まれた直後はスケールが大きく、色は緑。そして年を取るにつれてパーティクルが小さくなり、色が赤くなります。