HoudiniBBAの台所

Houdiniを覚えたいリアルタイム系VFXババァが覚えたことをいろいろと残しておくブログ。

【Houdini】自由に形を決められる「らせんカーブ」を作る(2)

HoudiniのSOPマスターになろう企画第二弾!いぇーい。

さてさて、前回は「好きな高さと巻き数のコイルを作る」ってとこまで作りました。

houdini-kitchen.hateblo.jp

 

でもどうせみんな、らせんを作るってなったら「竜巻型も作りたい」とか言い出すんでしょ。知ってるよ!!

変形といえばmayaでもお馴染み、デフォーマの出番です。
「bend」ノードを使っていくよ!
mayaのベンドとはちょっと感覚が違うけど、難しくはないので、張り切っていきましょー。

まずは、前回作った「PointVOP」の下へ、bendノードをつなぎます。
線とbendデフォーマの向きと位置を合わせてあげましょう。

まずは向き。
Up Vectorのxを1に、Capture Directionのyを1にします。

f:id:houdini_kitchen:20181010233243p:plain


向きを合わせただけだと、らせんの長さが変わった時に不都合が生じてしまう(高さが高すぎるとデフォーマからはみ出しちゃう)ので、線の長さに応じて、デフォーマのサイズも可変になるようにします。

考え方としては、デフォーマの端っこは

 ・初期位置:原点(固定)
 ・高さ:らせん自体の高さ(可変)

なので

「らせん自体の高さ」の値が常にCaptureLengthに入るようになれば問題解決しそうですね。

オブジェクトの「高さ」とか「横幅」を使いたいときは、「バウンディングボックス」を使うと簡単に済むことが多いです。
「bbox表現関数」っていうのがあるので、ありがたく使わせてもらいましょう。
めちゃくちゃ荒く説明するとbbox(オブジェクト,どの値が欲しいか)って書くと、その値返してあげるよ、って関数です。 

http://www.sidefx.com/docs/houdini/expressions/bbox.html

いまの場合、「処理してるオブジェクトの高さちょうだい」なので、
bbox(らせん,D_YMAX)になりますね。

そして、「らせん」を指定するにはオブジェクト名を書いてもいいのですが、後々のことを考えて(らせんじゃなくなった時も使えるように)「このノードの0番入力に刺さってるやつ」って教えてあげるのがよさそうです。

「ここの〇番に入力されてるやつ」の書き方は opinputpath("参照ノードの場所",何番目か) です。
ノードの場所は相対参照です。
パス表記はもうそういうルールなので覚えるしかないので覚えちゃいましょう。
丁寧に解説してくれてるWebサイトさんがいっぱいあります。

絶対パスと相対パス

このノード(.)の0番入力に刺さってるやつ、は

opinputpath(".",0)

ですね。

実際にcaptureLengthに入れる関数は

bbox(opinputpath(".".0),D_YMAX)

となります。

f:id:houdini_kitchen:20181010233427p:plain

これでらせんをねじったり、大きくしたり、曲げたりできるようになりました!
試しに「Bend」とか「Taper」とかのスライダを動かしてみましょう~ 。

f:id:houdini_kitchen:20181010233537p:plain

ちなみに、bendはup方向のほうのデフォーマしか動かないので、下方向も動くようにしたい!という場合はいまのbendノードの下にもう1回bendノードを作ってあげる必要があります。

今度は「らせんの一番高いとこ」が基準点で、キャプチャ方向はYの-1、 lengsは変わらず、「らせんの高さ」です。
今までに作ったものだけで出来ますよ~。
スクショを見ながら作ってみてください・x・

f:id:houdini_kitchen:20181010233617p:plain

ついでと言っては何ですが、頂点カラーも決められるようにしておきましょう。
カーブのポイントにAlphaを持たせておくと、それを基準に押し出しなどをしたときに、meshにも引き継がれて便利ですよ!!

bend2から「pointVop」をつなげて中に入り、らせんを作った時のように「bind」ノードを使ってcurveuを呼び出しましょう。

f:id:houdini_kitchen:20181010233653p:plain

curveuの値をrampにしてからAlphaに渡してあげれば狙った結果になりそうです。

f:id:houdini_kitchen:20181010233911p:plain


が、出力にAlphaらしきものが見当たりません(;ω;)!

でも大丈夫!!!
入力と同じようにデフォルトで用意されてないアトリビュートは、「bind export」ノードで名前を指定してあげると渡すことができます

デフォルトの入力と出力を全無視するのが若干申し訳ない(笑)
あ、頂点カラーAlphaのアトリビュート名は大文字のAなのでご注意を!

あとは、デフォルトのrampパラメータから出てくる値はVector型(色の情報)なので、Vector to Floatで少数に直してあげるのを忘れずに。
(Ramp自体をFloat型にしてもいいけど、パラメータのUIが見辛いので...)

ちなみに、おまじないというかお約束になってしまうのですが。 頂点カラー(Cd)を指定せずにAlphaだけを指定してしまうと、UE4やUnityでカラーが何をやっても0から変わらなくなってしまうことがあるので、Cd(頂点カラー)には定数(Constant)で「1.0」を入れておきます。

VOPはこんな感じになりました!

f:id:houdini_kitchen:20181010233814p:plain

最後に、頂点カラーは要る時と要らないときがあるので、Switchノードで「頂点カラーをつけるorつけない」を切り替えられるようにしておきます。

Switchノードに「bendが終わったらすぐSwichに入る」ルートと、「bendのあとpointVOPで処理をしてからSwichに入る」ルートを、それぞれつなげましょう。
※入力部分が●ではなく「うにょーん」と繋がっているノードは、複数の入力を受け付けているよーってことです!

f:id:houdini_kitchen:20181010234111p:plain

あと、これはお好みになるのですが、処理が一区切りついたらNULL(空白)ノードを作って「ここがゴールだよー」ってわかりやすくしてる人が多いです。

f:id:houdini_kitchen:20181010234135p:plain

今回も念のため「export_spiral」って名前をつけておきました。

ここまでで「仕組み」を作る工程は終了です!
おつかれさまでした。
名前を付けて大事に保存しておきましょう。

ここまで出来てめでたし、めでたしなんですが...
このチュートリアル(?)には、もうちょっとだけ続きがあるんじゃよ。

だって毎回こんな面倒なネットワークを組むのは時間の無駄だし、そもそも調整のためのパラメータが色んなノードにゴッチャリとしてて、「便利」とは対極くらいの位置にいるし。

 次回はそれらをスッキリさせつつ、3秒でこの「らせんカーブ」を呼び出す仕組みを作っちゃいますよ!
Houdiniが本気でデキル子に化けるのはここからじゃー!
おたのしみにぃ!

本日もありがとうございました!

続きは↓↓

houdini-kitchen.hateblo.jp