執筆者:森田
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きなお寿司は鉄火巻き。
TECH BLOG
こんにちは。モノリスソフト テクニカルアーティストの森田です。今回は、前回のものをもう少し実用性のある形に改造していこうと思います。
サンプルファイル(monolithtech_monolithtech_scatter_2.zip 38.6 KB)はこちらです。
前回はジオメトリ全体に散布する形を取ったため、範囲を指定したい場合、メッシュの形を事前にコントロールしないといけませんでした。
今回はこれを自由な形に範囲指定をできるようにします。
ここでは、あるオブジェクトをマスク扱いにして、その内側だけに散布する仕組みを作ります。
【図1】のようにノードを構成します。赤い部分が今回追加したノードです。
それぞれの設定は【図2】【図3】【図4】の通りです。
結果は【図5】の通りです。
これにより、Scatterに渡されるジオメトリはsphereの範囲内のものとなり、その範囲しか散布されなくなります。
これで、マスクオブジェクトを自由に変更することで好きな範囲に配置させることができるようになりました。
TIPS:
(※)Houdiniでは前回行った、ポイントにアトリビュートを埋め込むのと同じように「グループ」という所属情報も埋め込むことができます。
前回は完全にランダム回転でしたが、これでは樹やビルなどでは逆さまになったり倒れたりと、とんでもない結果になってしまいます。
前回の結果から簡単に改造して回転軸を垂直にそろえることを実現してみます。
attributewrangleというノードを、Nを作っているattribute randomizeの下に追加します。【図6】
ここはまだわからなくても大丈夫ですので、
v@N.y = 0;
と書きこんでください。【図7】これで回転軸が垂直にそろいました。【図8】
TIPS:
Attrubute Wrangleとはポイント等に埋め込まれた情報をスクリプトで書き換えたりすることで高度な制御を可能とするノードです。
ここで行っているのは、簡単にいうと作ったNベクトルのY成分を0にし、簡易的に上に向ける処理を行っています。
前回は完全にランダムでスケールを設定しました。
しかし小さいものも大きいものも同じ数だけ存在するというのは、あまり現実的ではありません。
現実的には、小さいものの数は多く、大きいものの数は少ないという感じ(べき乗則)にしたいですよね。
いったんここでは仕組みはわからなくても大丈夫ですので、以下のように実行してみてください。
ここで、pscaleを作成したattribute randomizeの下に新たにattribute wrangleを作成します。【図9】
@pscale = chramp("scale_ramp", @pscale);
上記のコードを丸ごとコピーしてVexpressionの欄にペーストし、すぐ右のボタンをクリックします。【図10】
すると、その下に自動的にランプのUIができると思います。【図11】
copytoPointの結果は変わらないと思いますが、
このランプを調整して、【図12】のようにしてみてください。(数値は適当ですのでそれっぽくなるようにご自身で調整してみてください。)
グラフを調整する事で、スケールの大きいものの数を減らし、スケールの小さいもの数を増やすことができます。
もちろん、グラフを変えることでその逆も可能ですし、中くらいの大きさのものが一番多い...というような表現も可能です。
TIPS:
つまり、ランプを使ったカスタマイズをすることで埋め込まれたアトリビュート(今回はpscale)の大きさによる存在確率の制御を行うことができます。
Houdiniはノードを自由自在に組み替えられるため、最初は自分の望む配置や制御を行うのは難しいかもしれません。
便利ノードをコピペして少しずつ利用する気持ちで使ってみてください。
執筆者:森田
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きなお寿司は鉄火巻き。