【Houdini】Stamp機能をCopyToPointで代用し、角度を調整する
Verは17.5.391です
【初めに】
Houdiniには
CopyStamp、という非常に便利なノードがあります
複製しつつ、ランダム性も持たせるという機能なのですが
ただ難点として、これがかなり重いです。
データ量が少なくても、このStamp機能で処理が結構かかってきてしまう
という事が起きたりします。
なので、こちらの、CopyToPointを使って
この機能を擬似的に真似してみようかと思います。
【複製する角度を乱数に】
まずは、このようなものを作りました。
棘のようなものを、円状に並べたものです。
氷や岩などのベースなどに使えそうです。
作り方としては、まず複製するジオメトリ自体は、Tubeを二つ繋げて作ります。
横に倒してあるのは、複製する場合に向きが可笑しくなってしまった為です。
複製するポイントは、Circleを使っています。
デフォルトだと角度がおかしいので、X軸に90度回転を入れています。
解りやすく極端な例としては
このように、複製する毎にランダムな角度になるようにします。
そもそもこの角度はどこで決まるのか?という話になります
CopyToPointノードの設定で第1入力か第二入力かのどちらかを選択できます。
ここでは第二入力の角度を取得するようにします(デフォルト設定のままです)
この場合、第二入力の、法線の方向によって決定されます。
つまり、法線さえ弄ってしまえば、角度を自由に変更できるということになります。
法線はPointWrangleで作っていきます
内容としてはこんな感じになりました。
やっている手順としては
元の法線の情報である@N(今回は全て(0,1,0)の上向きの法線になります)と
中心から外に向かうベクトルを仮の法線として
その二つの間からランダムに持ってくる。というイメージです。
中心から外に向かうベクトルは、このような方向を向くベクトルになります(青い線がそうです)
単純に、角度をバラバラにしたいのみであれば、これだけで十分です
ただ、これだと調整ができないので
自由に調整をしたいのであれば、ここを編集する必要があります。
次に移る前に、コードを少し書き換えます。
内容としては変わっていません
この状態で、このAngleという変数に入れた数値で、法線の角度が変わるようになります。
では、このAngleに何を入れるのか?という部分になります。
現段階で、このAngleが0であれば、上向きに複製されます
逆に1になれば、中心から外を向く配置になります。
どのように角度を調整するようにすればいいのか?
という部分は、個人差があると思いますが。
今回は、基準となる角度と、振幅を指定する二つの角度で制御します。
まず基準の角度を作ります
ch関数を使うことで、下に操作できるスクロールバーが追加されるので
ここで角度を調整できるようになります。
ここのパラメータで複製される角度が一律に変更されていれば完了です。
この段階を、基準の角度として、ここに乱数を加えていきます。
乱数の部分は見やすいように、一旦変数を作ります
また、rand関数で0~1の乱数は使うので、一旦作ります。
やりたい事としては、Angleの変数に乱数を追加する訳ですが
その乱数を、制御したい、という事になります。
厳密には例えば0.2であれば-0.1~0.1という事になります。
今回であれば、この0.2は後から調整するので、パラメータを作ります
実際にどのくらい変化するかは、スクロールバーで調整できるようになりました。
また、更に受け取った数値を0.5で掛けた数値を引き算すれば
0.2の場合であれば-0.1~0.1の数値が返ってくるようになります。
次は、計算した変数を、Angleの変数の中に加算します。
最後に、ランダムシードも作っておきます。
これも解りやすいように、変数に入れておきます。
randの変数の中のrandの関数の中の数値が変われば変化がするので
@ptnumでポイント番号からとってきている部分に、加算するだけで設定ができます。
これで、こんな感じに、パーツごとに倒れたり、倒れてなかったりの調整ができるようになってると思います。